我读过问题是什么导致了这个sqlite外键不匹配?并且理解引用的外键是唯一的,但是插入表仍然抛出外键不匹配错误:
CREATE TABLE medication (
med_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
med_name VARCHAR (20) NOT NULL,
dosage VARCHAR (10)
);
CREATE TABLE disease (
dis_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
disease_name VARCHAR (20) NOT NULL
);
CREATE TABLE dis_med (
disease_id int NOT NULL,
medication_id int NOT NULL,
CONSTRAINT PK_dis_med PRIMARY KEY (disease_id, medication_id),
CONSTRAINT FK_dis FOREIGN KEY (disease_id) REFERENCES disease (dis_id),
CONSTRAINT FK_med FOREIGN KEY (medication_id) REFERENCES medication (med_id));
CREATE TABLE user_disease (
user_id REFERENCES user (user_id),
dis_id REFERENCES disease (dis_id),
med_id REFERENCES dis_med(medication_id),
CONSTRAINT PK_dis_user PRIMARY KEY (user_id, dis_id)
);
根据我引用的问题中的列表:
通常,外键约束的父键是父表的主键。
如果它们不是主键,则父键列必须共同 受 UNIQUE 约束 或具有 UNIQUE 索引。
有了这个:
CREATE TABLE user_disease (
...........................
med_id REFERENCES dis_med(medication_id),
...........................
);
med_id
的user_disease
列引用了medication_id
的dis_med
列,它不是PRIMARY KEY
的dis_med
,并且没有UNIQUE
约束。它只是引用 med_id
的 medication
。为什么需要
med_id
中的user_disease
列?dis_id
引用 disease
,它也可用于从 dis_med
(所有)检索 dis_med
中针对该疾病的行。