我的数据在表格中(这是一个例子):
BOX
和BOX CONTENT表:
系统中的每个盒子都是这样的。因为一个盒子必须有: 客户代码, 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设置在一行中。
有人有想法吗? 我们将不胜感激......
最诚挚的问候......
答案 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)
约束以防止重复。