2015-04-19 68 views
0

解釋我的問題的一個簡單方法是: 我想創建一個表格,其中將包含關於將在學校口述的主題的信息。該列必須是:如何在外部表格中添加列約束

create table program(teacher varchar(20) references teachers(name), 
          classroom varchar(20) references classrooms(id), 
          dtime datetime) 

在表teachersclassrooms的每一個存在一個名爲「主題」欄,對應於由老師所傳授的課堂主題決定主題(想象這些表中沒有更多列)。

現在,我想在program表中創建一個約束,它不允許我插入一行,教師口述的主題與老師指定的主題不同。

+0

不要使用「mysql」標籤來查詢關於sql server的問題。 –

+0

@Kadriand您將需要程序表中的主題列來強制執行具有外鍵約束的規則。 –

+0

我不認爲你可以做到這一點沒有去規範你的表結構。在插入「程序」表之前,您必須檢查其他表中的「If Exists」行(「teacher」和「classroom」)。 – ANewGuyInTown

回答

0

你想使用複合外鍵。將subjectId放在programs table中將會是最簡單的。這是對教師的例子:

create table teachers (
    teacherid int identity(1, 1) primary key, 
    name varchar(255) not null, 
    subjectid int references subjects(subjectid), 
    unique (teacherid, subjectid) 
); 

create table programs (
    programid int identity(1, 1) primary key, 
    teacherid int references teachers(teacherid), 
    classroomid int references classrooms(classroomid), 
    dtime datetime 
    subjectid int references subjects(subjectid), 
    foreign key (teacherid, subjectid) references teachers(teacherid, subjectid), 
    foreign key (classroomid, subjectid) references classrooms(classroomid, subjecdtid) 
); 

如果你不把在programs表中的主題,那麼你將需要使用一個用戶自定義函數的約束。這似乎是一個更簡單的解決方案。