2013-04-12 56 views
1

我有這些表:在數據庫設計防止循環引用

--location(ID)

--Concert(ID,LocationID_FK)

--Showtimes(ID,ConcertID_FK)

--SeatBlock(ID,ShowtimesID_FK)

--Seat(ID,SeatBlockID_FK)

現在我有一個名爲SeatValue.this的實體是一些座位的值,如Golden,Silver等等。對於這個實體,每個記錄都必須有一個指定的Showtime。 我認爲這是解決方案:

SeatValue(ID,ShowtimesID_FK)

和座椅變化:

--Seat(ID,SeatBlockID_FK,SeatValueID_FK)

但我認爲這是創造cicular不是嗎? 我該如何改變它?

+0

爲什麼不配合你seatvalue作爲零或一參考座位嗎? –

+0

SeatValue有一些記錄,它必須與Seat.it分開,並有名稱和價格。 –

回答

2

在這種情況下,我想提出以下建議:

  • 位置(ID,元數據)
  • 音樂會(ID,LocationID_FK,元數據)
  • 場次(ID,ConcertID_FK,元數據)
  • SeatBlock(ID,Location_FK,元數據)
  • 座椅(ID,SeatBlockID_FK,元數據)
  • SeatPricing(ID,Seat_FK [或SeatBlock_FK如果pricin g由塊完成],ShowTime_FK,元數據)
  • SeatAssignment(ID,SeatPricing_FK,Seat_FK [如果座位定價由方框完成],元數據)
+0

謝謝你的回覆。但是如果我有音樂會#1的A座和音樂會#2的另一個A座,我該如何區分他們? –

+0

那麼,除非你正在重新安排你的座位,否則你不會爲不同的音樂會設置不同的街區。這些街區與音樂會無關。他們只與某個音樂會有關的音樂會有關。我認爲你試圖在你的層次結構中儘快鏈接靜態信息和動態信息。 –

+0

SeatBlock的定義是什麼?是由SeatID驅動的實體座位安排,還是虛擬的定價層次表示,可能因演唱會而異?這不清楚。在後一種情況下,SeatBlock將由Concert或Showtime驅動。但是,你真的希望SeatValue因Showtime而改變嗎? – JAGAnalyst

1
  • 劇院存在。
  • 音樂會存在。
  • 劇院分爲座位塊。
  • 座椅是座椅的一部分。
  • 音樂會的演出安排在劇院。
  • 表演有座位待售。

enter image description here