我可以通过以下方式创建复合外键吗?

时间:2013-08-08 18:32:04

标签: sql

我有一个包含以下列的表A

ID(PK)  id_1   
1         4
2         10
3         15
4         4

现在我正在尝试创建一个包含

列的表B.
ID(PK) Description   id_1_a_id (composite foreign key(ID,id_1))  
1        Apple         (1,4)
2        Orange         (2,10)
3        Banana         (3,15)
4        dog             (4,4)
5        

这种设计有意义吗?或者有更好的方法吗? (SQL菜鸟)

1 个答案:

答案 0 :(得分:1)

复合外键很常见且很有用,但您没有。如果你这样做,它会是这样的。

ID(PK) Description     A_id     id_1
--
1        Apple         1        4
2        Orange        2        10
3        Banana        3        15
4        dog           4        4

但你通常也不会这样做。通常,您将在表A中引用一组唯一的列。唯一的列集只是单列A.ID.所以你的桌子通常看起来像这样。

ID(PK) Description     A_id
--
1        Apple         1   
2        Orange        2   
3        Banana        3   
4        dog           4   

您通常不会复制表B中A.id_1的值。如果您需要来自A.id_1的值,请使用JOIN编写查询。

select B.ID, B.Description, A.ID, A.id_1
from B
inner join A on A.ID = B.A_id;

如果您的表中唯一的唯一约束是ID号,那么您做错了。但这是一个不同的问题。