2010-06-03 83 views
2

我打算做一个铁路订票项目...... 我保持下表:这是一个很好的数据库设计吗?

trainTable
(trainId,trainName,trainFrom,trainTo,trainDate,trainNoOfBoogies)... PK( trainId)

不羁
(trainId,boogieId,boogieName,boogieNoOfseats)... CompositeKey(trainId,boogieId)...

座椅
(trainId,boogieId,seatId,seatStatus,seatType)... CompositeKey(trainId,boogieId,seatId)...

用户
(用户ID,名称...个人信息)

userBooking
(用户ID,trainId,boogieId,seatId)...

是G功能ood设计?

回答

2

它可以工作,但改进的余地 - 取决于你使用的是什么它与要如何优化它:

  • 在命名你的表一致。你不应该命名一个表trainTable,另一个Boogie和第三个Seats。要么总是有“”,要么永远不会;要么总是使用复数,要么永远不会。试试trains,boogies,seats
  • 您不必在列名中重复表名 - 当提及train.id时,这已经足够清楚了。但是这有待讨论,有些人会这样做。但要一致:还使用username并不仅仅是name
  • 你需要一个额外的字段traintable.trainNoOfBoogies?您可以通过使用给定的trainID计算所有配对来获得此信息。
  • 同一件事的座位:你需要一个Boogie.boogieNoOfSeats?您可以从boogieID = wantedId`的座位选择COUNT(*)。
  • seats表是连接到一个布吉和一列火车?你可能只需将座位连接到布吉就可以了。布吉本身将连接到火车。如果你把链接不止一次,你可能不一致(但话又说回来,你必须张贴的规格,我看你想要什么?)

建议:

trains 
(ID,name,from,to,date) PK(ID) 

boogies 
(ID,trainId,name,) CompositeKey(trainId,boogieId)... 

seats 
(ID, trainID, boogieID, status, type) CompositeKey(trainId,boogieId,seatId) 

users 
(ID, name, ... personal details) PK (ID) 

userBookings 
(ID, userId, trainId, boogieId, seatId) CompositeKey(trainId,boogieId,seatId) 

如果您需要更多提示,请发布更多信息:您想要存储什么内容,您想要如何处理?什么是示例查询程序员将写入数据库?

+0

谢谢你... – alokpatil 2010-06-03 07:27:19

+0

但我怎么能在MySQL和休眠中实现它... 请回复我 – alokpatil 2010-06-03 07:28:24

+0

对不起,alokpatil,我熟悉MySQL,但不是休眠 - 你应该发布一个新的问题“我如何在MySQL和Hibernate中实现这个数据库设计” - >这将吸引有经验的用户来帮助你:) – Konerak 2010-06-03 07:41:38