2010-06-03 81 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