我有一个无法解决的问题。我有两个表Branches
和Students
。每个学生都有一个程序属性,每个分支都有一个名称和程序,它们是组合的主键。
CREATE TABLE Branches(
name TEXT NOT NULL,
program TEXT NOT NULL,
PRIMARY KEY (name, program),
FOREIGN KEY (program) REFERENCES Programs(name)
);
CREATE TABLE Students(
idnr NUMERIC(10) PRIMARY KEY,
name TEXT NOT NULL,
login TEXT NOT NULL UNIQUE,
program TEXT NOT NULL,
FOREIGN KEY (program) REFERENCES Programs(name)
);
我想创建一个新表StudentBranches
,其中包含有关学生所属的分支(如果有)的信息。到目前为止,这是我的代码:
CREATE TABLE StudentBranches(
student NUMERIC(10) PRIMARY KEY,
branch TEXT NOT NULL,
program TEXT NOT NULL,
FOREIGN KEY (student) REFERENCES Students(idnr),
FOREIGN KEY (branch, program) REFERENCES Branches(name,program)
);
我的问题是,我需要检查,以使来自Branches外键的程序与分配给学生的程序相同。我不能使用任何触发器。我该怎么办?
答案 0 :(得分:0)
通过编号和程序为学生添加唯一约束:
CREATE TABLE Students (
idnr NUMERIC(10) PRIMARY KEY,
name TEXT NOT NULL,
login TEXT NOT NULL UNIQUE,
program TEXT NOT NULL,
FOREIGN KEY (program) REFERENCES Programs(name),
UNIQUE (program, idnr)
);
这有点多余-毕竟idnr
已经是唯一的。但是,它允许您添加包含program
的外键引用:
CREATE TABLE StudentBranches(
student NUMERIC(10) PRIMARY KEY,
branch TEXT NOT NULL,
program TEXT NOT NULL,
FOREIGN KEY (student) REFERENCES Students(idnr),
FOREIGN KEY (program, student) REFERENCES Students(program, idnr,),
FOREIGN KEY (branch, program) REFERENCES Branches(name,program)
);