在我的情况下,我有
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。 所以我有两个关键的“一对多”关系。这是一个有效且可用的设计实践吗?我不是数据库人,但我正在努力学习如何处理这是最好的方法。
答案 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)
)