Sqlite 外键不匹配?

问题描述 投票:0回答:1

我读过问题是什么导致了这个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)
);

根据我引用的问题中的列表:

  • 父表(药物、疾病)存在。
  • 父列存在
  • 子表引用父表中的所有主键列
sqlite foreign-keys entity-relationship
1个回答
1
投票

来自 SQLite 外键支持/3。所需和建议的数据库索引:

通常,外键约束的父键是父表的主键。
如果它们不是主键,则父键列必须共同 受 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
中针对该疾病的行。

© www.soinside.com 2019 - 2024. All rights reserved.