我打算做一个铁路预订项目...... 我正在维护以下表格:
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)...
这是好设计吗?
答案 0 :(得分:2)
它可以工作,但有改进空间 - 取决于您使用它以及如何优化它:
trainTable
,另一个Boogie
和第三个Seats
命名为。要么总是有“表”,要么永远不要;要么总是使用复数,要么永远不会。试试trains
,boogies
,seats
。train.id
时,它已经足够清楚了。但有些人这样做是为了讨论。但要一致:也使用username
而不只是name
traintable.trainNoOfBoogies
吗?您可以通过使用给定的trainID计算所有boogies来获取此信息。Boogie.boogieNoOfSeats
吗?您可以从boogieID = wantedId`。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)
如果您需要更多提示,请发布更多信息:您想要存储什么,您想用它做什么?程序员将针对数据库编写什么样的查询?