2013-04-12 23 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