关于将数据插入1:m关系的表部分的问题

时间:2009-04-15 13:01:03

标签: sql database-design

将记录插入到与另一个表具有1:m关系的数据库表时,最佳做法是确保使用新记录更新(插入)相关表吗?如果仅更新其中一个相关表,会有什么后果吗?

另外,如果我在关系的m侧更新表格(例如,汽车和车轮的关系,其中一辆车可以有多个车轮,但车轮只能属于一辆车),我是否应该总是插入外键作为显式参数?例如。如果其他相关表具有1,2,3,4,5的PK系统并以独特的方式上升,我是否应该通过存储过程将外键值作为值插入?

编辑:这听起来非常糟糕但不幸的是我只学习/学习数据库设计和Sql Server,尤其是自我练习(没有正式培训)。

2 个答案:

答案 0 :(得分:1)

让我们用你的例子..

car:
    car_id
    name

wheel:
    wheel_id
    car_id

如果您的第一个问题是询问在car表中插入记录时是否应确保wheel表中有相应的行,那么是!实际上,如果使用外键正确设置了RDBMS,那么在wheel中没有父行的情况下,您将无法在car表中插入行。

我认为这也可以解决你的第二个问题。如果没有,你能详细说明吗?

答案 1 :(得分:0)

如果您有一对多关系,则必须先将记录插入父表。在插入父表时,您可能也可能不需要也插入子表。这完全取决于您的设计以及插入初始记录时可用的信息。例如,客户和订单具有一对多的关系。但是,在他或她实际购买之前可能会添加一个cusotmer,因此没有订单。或者新客户可能试图购买某些东西,并且需要存储他/她的客户信息和他/她的订单。你应该在设置datanbase结构时建立一个主键/外键关系。这将确保您没有相关客户的订单。在Order表中,您将从Customer表中为id字段添加一列。插入记录时,此值将与其他信息一样成为插入的一部分。

如果更新父表或子表,则除非更改具有PK.FK关系的字段,否则无需更新其他表。最好是你永远不要改变这个值(主键应该是这样的,它们几乎不需要被打开。如果你使用诸如主键之类的东西,你需要重新考虑你的设计。)