关于复合主键的参考

时间:2015-06-01 11:32:02

标签: sql sql-server

我的数据在表格中(这是一个例子):

BOX enter image description here

和BOX CONTENT表: enter image description here

系统中的每个盒子都是这样的。因为一个盒子必须有: 客户代码, BOX CODE AND BOX NUM

包装盒中的每件物品都必须: 客户代码, BOX CODE, BOX NUM 和每个项目的一个数字。

现在,为此,我在两个表上创建了复合主键:

CREATE TABLE BOX ( 
CLIENT_CODE NVARCHAR(10), 
BOX_CODE Nvarchar(50),
BOX_NUMBER SMALLINT, 
BOX_CONTENT NVARCHAR(250), 
CONSTRAINT PK_BOX_CLI_COD_NUM PRIMARY KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER)
);

CREATE TABLE BOX_CONTENT ( 
CLIENT_CODE NVARCHAR(10), 
BOX_CODE Nvarchar(50),
BOX_NUMBER SMALLINT, 
BOX_CONTENT_NUMBER SMALLINT, 
ID1 NVARCHAR(50),
ID2 NVARCHAR(50),
ID3 NVARCHAR(50),
ID4 NVARCHAR(50)
CONSTRAINT PK_BOXCONT_CLI_COD_BNUM_CNUM PRIMARY KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER, BOX_CONTENT_NUMBER)
);

我的问题是,我怎样才能在表格之间引用FOREIGN KEYS? 这个表有很多数据,需要参考。

如果我这样做:

CONSTRAINT fk_BOX_CLI FOREIGN KEY(CLIENT_CODE) REFERENCES BOX(CLIENT_CODE),
CONSTRAINT fk_BOX_CODE FOREIGN KEY(BOX_CODE) REFERENCES  BOX(BOX_CODE),
CONSTRAINT fk_BOX_NUMB FOREIGN KEY(BOX_NUMBER) REFERENCES BOX(BOX_NUMBER)

我有一个错误,如果我也将FK设置在一行中。

有人有想法吗? 我们将不胜感激......

最诚挚的问候......

1 个答案:

答案 0 :(得分:4)

您需要将约束放在一个引用中:

CONSTRAINT fk_BOX FOREIGN KEY(CLIENT_CODE, BOX_CODE, BOX_NUMBER)
    REFERENCES BOX(CLIENT_CODE, BOX_CODE, BOX_NUMBER)

但是,我建议您在BOX上添加一个identity int主键,并将其用于外键引用。您可以在UNIQUE上声明BOX(CLIENT_CODE, BOX_CODE, BOX_NUMBER)约束以防止重复。