包含外键的复合键

时间:2015-09-20 03:09:58

标签: sql

我正在尝试创建一个使用复合键作为主键的表。 我在复合键中分配第二个值时遇到问题,因为它是另一个表中的外键。这是一个例子。

create table Table1
(Table1ID NVARCHAR(8) NOT NULL,
...
PRIMARY KEY (Table1ID));

create table Table2
(Table2ID NVARCHAR2(8) NOT NULL,
...
CONSTRAINT Table2ID_Table1ID_PK PRIMARY KEY (Table2ID, Table1ID)); <---- Here

在第二个表中,我试图让主键包含table1中的主键。我是否需要包含REFERENCES Table1(Table1ID));等内容?

此外,将数据插入table2以获取复合键的正确方法是什么? insert into Table2 values ('101, 1001', .... );

干杯。

1 个答案:

答案 0 :(得分:0)

您可以在复合主键中使用外键,但要注意您将创建一对一映射,而表B将依赖于表A,因此为了保持参照完整性,表A中的行/ ID必须在尝试插入使用A的主键作为其主键中的外键的表B之前已经存在,并且为了反映这种设计选择,我在解决方案中添加了ON DELETE子句。

如果没有太多修改,您可以使用此MySQL解决方案来适合您选择的DMBS,因为您没有指定您正在使用的内容。

CREATE TABLE TableA
(
    id   int NOT NULL PRIMARY KEY
    ..
);

CREATE TABLE TableB
(
     id             int NOT NULL,
     tableA_id      int NOT NULL,
     ...
     FOREIGN KEY (tableA_id) REFERENCES TableA(id) ON DELETE CASCADE,
     PRIMARY KEY(id, tableA_id)
);