两个表之间的表的SQLite复合键

两个表之间的表的SQLite复合键,sqlite,composite-key,Sqlite,Composite Key,我正在尝试连接三张桌子。其中两个有主键,第三个应该链接到主键。我需要这中间,因为它是链接到第四个(但这很好)。我写的代码如下: CREATE TABLE CUSTOMERS( CUSTOMER_ID INT(10) NOT NULL, SURNAME CHAR(50) NOT NULL, NAME CHAR(50) NOT NULL, PRIMARY KEY (CUSTOMER_ID) ); CREATE TABLE WORKSHOP( WORKSHOP_ID INT(10) NOT NU

我正在尝试连接三张桌子。其中两个有主键,第三个应该链接到主键。我需要这中间,因为它是链接到第四个(但这很好)。我写的代码如下:

CREATE TABLE CUSTOMERS(
CUSTOMER_ID INT(10) NOT NULL, 
SURNAME CHAR(50) NOT NULL, 
NAME CHAR(50) NOT NULL,
PRIMARY KEY (CUSTOMER_ID)
);

CREATE TABLE WORKSHOP(
WORKSHOP_ID INT(10) NOT NULL,
NAME CHAR(100) NOT NULL, 
CHAIN_NAME CHAR(100),
CHAIN_ID INT(10),
CONTRACT_WORKSHOP CHAR(5) NOT NULL,
PRIMARY KEY (WORKSHOP_ID, CHAIN_ID)
);

CREATE TABLE CAR_DAMAGE(
DAMAGE_ID INT(10)  NOT NULL, 
CUSTOMER_ID INT(10) NOT NULL, 
DATE INT(20) NOT NULL, 
PLACE CHAR(128) NOT NULL,
WORKSHOP_ID INT(10) NOT NULL,
PRIMARY KEY (DAMAGE_ID, CUSTOMER_ID, WORKSHOP_ID, DATE, PLACE),
FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMERS (CUSTOMER_ID),
FOREIGN KEY (WORKSHOP_ID) REFERENCES WORKSHOP (WORKSHOP_ID)
);


INSERT INTO CUSTOMERS VALUES (1, "OLSEN", "TROND");
INSERT INTO CUSTOMERS VALUES (2, "JOHNSEN", "FELIX");
INSERT INTO CUSTOMERS VALUES (3, "SVINDAL", "AKSEL");
INSERT INTO CUSTOMERS VALUES (4, "BJORGEN", "MARIT");
INSERT INTO CUSTOMERS VALUES (5, "SVENDSON", "LISA");

INSERT INTO WORKSHOP VALUES (1, "BERTEL", "MOLLER", 1, "YES");
INSERT INTO WORKSHOP VALUES (2, "OLOF", "OLOF AUTO", 3, "NO");
INSERT INTO WORKSHOP VALUES (3, "J-AUTO", "MOLLER", 1, "YES");
INSERT INTO WORKSHOP VALUES (4, "SPEED", "BIRGER N. HAUG", 2, "YES");
INSERT INTO WORKSHOP VALUES (5, "RELAX AUTO", "MOLLER", 1, "YES");

INSERT INTO CAR_DAMAGE VALUES (1, 1, 10102008, "HELLERUD", 1);
INSERT INTO CAR_DAMAGE VALUES (2, 2, 14032015, "JAR", 2);
INSERT INTO CAR_DAMAGE VALUES (3, 3, 24052016, "LOMMEDALEN", 3);
INSERT INTO CAR_DAMAGE VALUES (4, 4, 31102017, "FLAKTVEIT", 4);
INSERT INTO CAR_DAMAGE VALUES (5, 5, 08062016, "STOCKHOLM", 5);
但是,当我收到错误“外置钥匙不匹配-车辆损坏”时,问题就出现了


我正在使用SQLite,因为我是被迫使用它的,这是我所在大学提供的。

WORKSHOP
有一个复合主键
(WORKSHOP\u ID,CHAIN\u ID)
。引用该表的任何外键都必须是复合外键,由相同的两个字段组成。因此,您需要将
CHAIN\u ID
添加到表
WORKSHOP
,并将外键声明更改为类似以下内容:

FOREIGN KEY (WORKSHOP_ID, CHAIN_ID) REFERENCES WORKSHOP (WORKSHOP_ID, CHAIN_ID)

[更一般地说,根据给出的信息,您的主键似乎比需要的更复杂:为什么不将
WORKSHOP\u ID
作为
WORKSHOP
的主键和
DAMAGE\u ID
作为
CAR\u damamage
的主键呢?但您可能有很好的理由。]

WORKSHOP有一个复合主键
(WORKSHOP\u ID,CHAIN\u ID)
。引用该表的任何外键都必须是复合外键,由相同的两个字段组成。因此,您需要将
CHAIN\u ID
添加到表
WORKSHOP
,并将外键声明更改为类似以下内容:

FOREIGN KEY (WORKSHOP_ID, CHAIN_ID) REFERENCES WORKSHOP (WORKSHOP_ID, CHAIN_ID)

[更一般地说,根据给出的信息,您的主键似乎比需要的更复杂:为什么不将
WORKSHOP\u ID
作为
WORKSHOP
的主键和
DAMAGE\u ID
作为
CAR\u damamage
的主键?但也许您有充分的理由。]

谢谢。这种方法有效。因此,当我继续操作时,出现了一个新问题。表CAR\u DAMAGE链接到第四个表(称为DAMAGE\u INFORMATION),代码为:

CREATE TABLE DAMAGE_INFORMATION(
DAMAGE_ID INT(10) NOT NULL, 
DAMAGE_TYPE CHAR(100) NOT NULL, 
DAMAGE_SIZE CHAR(50) NOT NULL, 
SPEND INT(10) NOT NULL, 
FOREIGN KEY (DAMAGE_ID) REFERENCES CAR_DAMAGE (DAMAGE_ID)
);
我收到与前面相同的错误,即外键不匹配“损坏信息”引用“汽车损坏”

不允许用不同的主键将三个表组合成一个表吗?车辆损坏的主键是:


主键(损坏密钥、客户标识、车间标识)

谢谢。此方法有效。因此,当我继续操作时,出现了一个新问题。表CAR\u DAMAGE链接到第四个表(称为损坏信息),代码为:

CREATE TABLE DAMAGE_INFORMATION(
DAMAGE_ID INT(10) NOT NULL, 
DAMAGE_TYPE CHAR(100) NOT NULL, 
DAMAGE_SIZE CHAR(50) NOT NULL, 
SPEND INT(10) NOT NULL, 
FOREIGN KEY (DAMAGE_ID) REFERENCES CAR_DAMAGE (DAMAGE_ID)
);
我收到与前面相同的错误,即外键不匹配“损坏信息”引用“汽车损坏”

不允许用不同的主键将三个表组合成一个表吗?车辆损坏的主键是:


主键(损坏键、客户ID、车间ID)

如果我回答了你的问题,那么请接受答案。谢谢。你在这里看到的问题是一样的:主键和外键之间不匹配。很难说正确的外键声明是什么:你在这里写的车损PK与原始问题不同,我不知道哪个是正确的。如果我回答了你的问题,那么请接受答案。谢谢。你在这里看到的问题是一样的:主键和外键之间不匹配。很难说正确的外键声明是什么:你在这里写的车损坏PK与原来的问题不同,我不知道哪个是正确的。