【发布时间】:2020-01-16 18:46:25
【问题描述】:
我的问题归结为“连接表 B 是否会受到针对表 A 中不是外键的值的检查约束?”。对同一个外键的多次引用可能会使情况更加复杂。下面详细介绍了我正在努力解决的具体场景,并使用了一些缩写的 MySQL 代码。
MySQL 数据库包含表“Disorder”(如下所示):
CREATE TABLE `Disorder` (
disorder_name VARCHAR(255),
disorder_type VARCHAR(10),
PRIMARY KEY(`disorder_name`)
)
疾病类型可以是“综合征”或“疾病”。疾病和证候可以以多对多的方式联系起来(例如,几种疾病可以引起同一种证候,同一种疾病可能引起不同的证候)。
我希望创建一个名为“DiseaseSyndromeLink”的连接表,显示“疾病”和“综合征”疾病之间的关系。
CREATE TABLE `DiseaseSyndromeLink` (
`ds_id` int NOT NULL AUTO_INCREMENT,
`disease` VARCHAR(255) NOT NULL,
`syndrome` VARCHAR(255) NOT NULL,
PRIMARY KEY (`ds_id`),
FOREIGN KEY (disease) REFERENCES disorder(disorder_name),
FOREIGN KEY (syndrome) REFERENCES disorder(disorder_name)
)
此表需要难以设计的约束:
第一列是整数连接ID
第二列“疾病”是引用 Disorder.disorder_name 的外键。此处只允许输入 Disorder.disorder_type='Disease' 的 disorder_names。
第三列“综合征”是引用 Disorder.disorder_name 的外键。此处只允许输入 Disorder.disorder_type='Syndrome' 的 disorder_names。
我觉得语法应该是这样的:
CREATE TABLE `DiseaseSyndromeLink` (
`ds_id` int NOT NULL AUTO_INCREMENT,
`disease` VARCHAR(255) NOT NULL,
`syndrome` VARCHAR(255) NOT NULL,
PRIMARY KEY (`ds_id`),
FOREIGN KEY (disease) REFERENCES disorder(disorder_name) WHERE (Disorder.disorder_type='Disease'),
FOREIGN KEY (syndrome) REFERENCES disorder(disorder_name) WHERE (Disorder.disorder_type='Syndrome')
)
我的理解是检查值(例如 ='Disease')需要检查约束,而链接到原始表需要外键约束。我找不到同时使用这两个约束的任何文档或 YouTube 教程。由于很难找到此代码的任何示例,我想知道我是否在数据库设计方面犯了错误,但想不出一个好的替代方案。
这样可以同时使用检查和外键约束吗?
感谢您的宝贵时间!
问题已编辑为最初包含的有关试图在 DJANGO 方面加强这种关系的信息。
【问题讨论】:
标签: mysql foreign-keys constraints check-constraints