这是一个很好的数据库设计吗?

时间:2010-06-03 06:51:39

标签: mysql

我打算做一个铁路预订项目...... 我正在维护以下表格:

  

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)...

     

用户
  (userId,name ...个人详细信息)

     

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

这是好设计吗?

1 个答案:

答案 0 :(得分:2)

它可以工作,但有改进空间 - 取决于您使用它以及如何优化它:

  • 在命名表格时一致。您不应该将一个表trainTable,另一个Boogie和第三个Seats命名为。要么总是有“”,要么永远不要;要么总是使用复数,要么永远不会。试试trainsboogiesseats
  • 您不必在列名中重复表名 - 在引用train.id时,它已经足够清楚了。但有些人这样做是为了讨论。但要一致:也使用username而不只是name
  • 您需要额外字段 traintable.trainNoOfBoogies吗?您可以通过使用给定的trainID计算所有boogies来获取此信息。
  • 座位也一样:你需要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)

如果您需要更多提示,请发布更多信息:您想要存储什么,您想用它做什么?程序员将针对数据库编写什么样的查询?