如何解决使用 REFERENCES 创建两个表
我正在阅读一本 dbms 的书,我得到了这个约束示例:
CREATE TABLE Students (
sid CHAR(20),name CHAR(20),login CHAR(20),age INTEGER,honors CHAR(10) NOT NULL,gpa REAL,PRIMARY KEY (sid),FOREIGN KEY (honors) REFERENCES Courses(cid)
);
CREATE TABLE Courses (
cid CHAR(10),cname CHAR(10),credits INTEGER,grader CHAR(20) NOT NULL,PRIMARY KEY (cid),FOREIGN KEY (grader) REFERENCES Students(sid)
);
如何将 FK 约束设置为 DEFERRED,以便创建这些表?
解决方法
外键关系不允许前向引用。所以在创建第二个表后添加第一个:
CREATE TABLE Students (
sid CHAR(20),name CHAR(20),login CHAR(20),age INTEGER,honors CHAR(10) NOT NULL,gpa REAL,PRIMARY KEY (sid)
);
CREATE TABLE Courses (
cid CHAR(10),cname CHAR(10),credits INTEGER,grader CHAR(20) NOT NULL,PRIMARY KEY (cid),FOREIGN KEY (grader) REFERENCES Students(sid)
);
ALTER TABLE students ADD FOREIGN KEY (honors) REFERENCES Courses(cid);
注意:我强烈建议您对字符串使用 VARCHAR()
。通常你不想处理尾随空格。
此外,通常首选整数主键(通过 generated always as identity
列)。
这是修改后的外键约束查询
CREATE TABLE Students (
sid CHAR(20),PRIMARY KEY (sid),);
CREATE TABLE Courses (
cid CHAR(10),FOREIGN KEY (grader) REFERENCES Students(sid)
);
ALTER TABLE Students ADD CONSTRAINT FOREIGN KEY (honors) REFERENCES Courses(cid)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。