2013-10-24 25 views
1

我有一個包含列「成績」和「成績課程」的表。我有一個外鍵約束限制了A-F的等級值。我的問題是:我如何製作,以便「成績」列只能包含A-E,如果成品課程是真實的?否則它只能有F值?在sql中的真正限制

回答

1

您可以添加檢查約束這一點,像:

alter table Table1 add constraint CK_Grade 
check (
     (FinishedCourse = 0 and Grade = 'F') or 
     (FinishedCourse = 1 and Grade <> 'F') 
     -- you can use in ('A', 'B', 'C', 'D'), but since you have foreign key, 
     -- it's enough to check Grade <> 'F' 
) 

alter table Table1 add constraint CK_Grade 
check (FinishedCourse = case when Grade = 'F' then 0 else 1 end) 
0

你能完成的課程列添加到您的「洋」「Grade_Lookup」(我的名字)表和使用一個複合外鍵約束?例如

... FOREIGN KEY (Grade, Finished_Course) REFERENCES Grade_Lookup (Grade, Finished_Course) ...

你需要在Grade_Lookup添加一個額外的記錄處理等級= F,Finished_Course =真。