【发布时间】:2013-07-30 15:11:59
【问题描述】:
我有一个递归的subject 表,因为一个主题可以是另一个主题的先决条件:
- 科目可以没有先决条件
- 一个科目可以有 1 个先决条件
- 一个科目可以有 2 个先决条件
由于有 2 个先决条件的科目,我将 prerequisite_1 和 prerequisite_2 列 FK 指向 subject_code 列:
CREATE TABLE subject(
subject_code CHAR(7),
subject_desc VARCHAR(255) NOT NULL,
no_of_units TINYINT UNSIGNED NOT NULL CHECK(no_of_units >= 0 AND no_of_units < 13),
prerequisite_1 CHAR(7),
prerequisite_2 CHAR(7),
PRIMARY KEY(subject_code),
FOREIGN KEY(prerequisite_1, prerequisite_2) REFERENCES subject(subject_code)
)ENGINE=INNODB;
我在 SQL Fiddle 上尝试了代码,但没有创建表。
如何创建一个包含 1 个 PK 列和 2 个 FK 列指向表自身 PK 的递归表?
【问题讨论】:
-
我认为您的语法有误,请尝试将每个外键的
foreign key内容更改为:CONSTRAINT `subject_ibfk_1` FOREIGN KEY (`prerequisite_1`) REFERENCES `subject` (`subject_code`)(ON DELETE CASCADE?) 将所有_1替换为_2偏离路线。 -
您可以使用单独的参考表将主题与其先决条件相关联,而不是任意将自己限制为 2 个先决条件。
-
@Barmar 到目前为止,科目最多有 2 个先决条件,但是如果我应用您的建议,必须如何完成(SQL 代码)?
标签: mysql sql foreign-keys ddl recursive-query