我有一个主表,比如说Products
,它有三个字段:product_id
,product_name
和product_type
。 product_type
可以是type_1
,type_2
或type_3
。根据类型,有关产品的更多信息可分别在Product_type_1
,Product_type_2
或Product_type_3
表格中找到。
每个Product_type_*
表都有一个product_id
,它引用Product
表中的同一列。有没有办法可以确保Product
表中的每一行中只有一行Product_type_*
表中只有一行?如果可能的话,我还想确保该行位于与product_type
对应的表中。如果我的例子不清楚,请告诉我。
答案 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_id
。Products
。所以,这将是一对多的关系。