如何建立跨表的一对一关系

时间:2012-09-10 19:38:08

标签: mysql foreign-keys relational-database data-modeling rdbms

我有一个主表,比如说Products,它有三个字段:product_idproduct_nameproduct_typeproduct_type可以是type_1type_2type_3。根据类型,有关产品的更多信息可分别在Product_type_1Product_type_2Product_type_3表格中找到。

每个Product_type_*表都有一个product_id,它引用Product表中的同一列。有没有办法可以确保Product表中的每一行中只有一行Product_type_*表中只有一行?如果可能的话,我还想确保该行位于与product_type对应的表中。如果我的例子不清楚,请告诉我。

3 个答案:

答案 0 :(得分:0)

我看到两个选项:

1)使用触发器强制执行规则,防止在类型表中插入多行,并要求 type 表中与product_type值对应的行

2)使用三种不同的ID然后依赖“普通OL”外键。

我更喜欢#2。

祝你好运。

答案 1 :(得分:0)

以下查询将为您提供'product_id',其中任何一个Product_type *都没有相应的记录。

Select P.product_id
From Products P
Left Outer Join Product_type_1 PT1 ON P.product_id = PT1.product_id

Left Outer Join Product_type_2 PT2 ON P.product_id = PT2.product_id

Left Outer Join Product_type_3 PT3 ON P.product_id = PT3.product_id

Where (PT1.product_id IS NULL AND PT2.product_id IS NULL AND PT3.product_id IS NULL)

如果这有助于解决您的问题,请告诉我......

答案 2 :(得分:0)

如果三个Product_type_X表的结构相同,那么我建议您使用一个子表Product_type,只需添加外键:Product_type。{{1} } - > product_idProducts。所以,这将是一对多的关系。