我想为我的表学生添加一个约束,以便在其majors列中输入的任何值也必须存在于majors表中.我怎样才能做到这一点?
这是一个外键约束.
ALTER TABLE student
ADD CONSTRAINT somename
FOREIGN KEY (major_id) REFERENCES major (id);
Run Code Online (Sandbox Code Playgroud)
请注意,如果student.major_id可以为空,则列的值仍可以为null.
另请注意,您的桌子不适合双人专业.为此,我们有一个student_major表,它是学生和专业之间的多对多关系.这还演示了如何在create table中创建外键,而不是在alter table中创建外键
create table student_major (
id serial not null unique primary key, -- optional, but good idea
student_id int not null references student(id), -- fk
major_id int not null references major(id), -- fk
UNIQUE (student_id, major_id) -- no redundant relations
);
Run Code Online (Sandbox Code Playgroud)
评论:
-1表示拒绝复合键. - 比尔卡文
所以让我理解这一点.比尔同意我正确回答了OP关于约束的问题.他同意我正确地看到OP没有询问的内容,可能是双重专业.但比尔仍然认为这个答案是错误的,因为比尔和我不同意复合键.
我甚至没有说合成身份证是必要的 ; 事实上,我特别说它是可选的,但在我看来是一个好主意.(为什么?删除时"更好",可能引用student_majors的表,以及ORMS和生成的代码.)
比尔,这很坦率.你在详细阐述(复合/合成)上详细说明了一个正确的答案(学生:主要是M:M而不是M:1),以及什么是"宗教"战争.您是否标记了正确答案,因为您不同意回答者在标签与空格或vi 与 emacs 上的立场?也许你应该花时间给出自己的答案,而不是标出正确的答案.
| 归档时间: |
|
| 查看次数: |
2607 次 |
| 最近记录: |