我正在为一项作业设计一个航空公司数据库(无论如何都是大纲),似乎是在圈子里跑来跑去。
关注三个表:
Customer Booking_Reference Flight
cust_id(pk) reference_id(pk) Flight_id(pk)
cust_id(fk)
预订参考可以有很多航班。
航班将有许多预订参考。
我试图打破多对多的关系。是否可以将一个关系表与flight_id作为属性(列),将booking_reference作为行(数据)?如果是这样,就没有主键,这是我所理解的禁止。
或者,我可以使用2个属性和booking_reference / flight的复合主键制作booking_reference / flight关系表,这将导致两个实体重复,但主键是唯一的(无论如何都是一半)。这是可接受的设计实践吗?
我打算在预订参考表中列出最多8个航班作为列(对于少于8个航班的条目为NULL),并为客户提供超过8个航班的新reference_id,但是这个似乎更荒谬,因为我对数据库有了更多了解,导致更多的参考ID和更多的NULL数据。
有关哪条路线的想法?
答案 0 :(得分:1)
不是有八个(或任意数量的)列,而是创建有时称为连接表的三列:
Table: references_flights
id (Primary key)
reference_id (fk)
flight_id (fk)
然后,您应该能够使用正确的JOIN查询它们之间的数据,但我会将其留给具有更多数据库专业知识的人。