db design:两个“1对多”关系?

时间:2017-12-01 18:20:10

标签: mysql database database-design

在我的情况下,我有

 TABLE vehicles (
   id int(11) NOT NULL AUTO_INCREMENT,
   transaction_type varchar(45),
   PRIMARY KEY (`id`)
   /* all other values of vehicle */
 ) 


 TABLE Origination(
   id int(11) NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
 ) 

 TABLE Additions(
   id int(11) NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`)
 ) 

所以我有这个新的车辆表来自Origination或Additions。它可以来自两个表的原因是业务需求,它既可以为原点设置,也可以源于事后的特殊添加。我不确定如何将“车辆”关系连接到两个表,因为id可以来自任何一个。

所以我添加了一个transaction_type字段,如果type是“Additions”,则根据Additions Id连接表。否则,如果类型是“始发”加入起始ID。 所以我有两个关键的“一对多”关系。这是一个有效且可用的设计实践吗?我不是数据库人,但我正在努力学习如何处理这是最好的方法。

1 个答案:

答案 0 :(得分:1)

根据我的理解,您需要一个包含所有车辆的主表和两个单独的表,这些表为这些车辆添加了不同的数据。这就是我的工作方式。如果你更具体地了解每张桌子的作用,我可以提供更多帮助。

TABLE Vehicle (
    id int(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
    /* all other values of vehicle */
) 

TABLE Origination (
    id int(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
) 

TABLE Addition (
    id int(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`)
) 

TABLE Vehicle_Origination (
    origination_id int(11),
    vehicle_id int(11),
    FOREIGN KEY (origination_id) REFERENCES Origination (id),
    FOREIGN KEY (vehicle_id) REFERENCES Vehicle (id)
) 

TABLE Vehicle_Addition (
    addition_id int(11),
    vehicle_id int(11),
    FOREIGN KEY (addition_id) REFERENCES Addition (id),
    FOREIGN KEY (vehicle_id) REFERENCES Vehicle (id)
)