考慮下面的設計:對數據的Oracle參照完整性範圍PK臺
LEGAL_CASE table (columns)
--------------------------------
LEGAL_CASE_ID
APPELLATE_CRT_ID
DISTRICT_CRT_ID
TRIAL_CRT_ID
與所有法院在查找表
COURT table (data)
--------------------------------------------
CRT_ID CRT_TYPE CRT_NAME
--------------------------------------------
1 A APPELLATE COURT 1
2 A APPELLATE COURT 2
3 D DISTRICT COURT 1
4 D DISTRICT COURT 2
5 T TRIAL COURT 1
6 T TRIAL COURT 2
做它的標準方式來定義,我想,應該爲每種法院類型分別設置一個查詢表,但我更願意將它們全部放在一個代碼中,以便使用緊湊和高雅。那麼我希望有某種形式的參照完整性約束(如果上面的規則出FK),將強制所有可以進入APPELLATE_CRT_ID的形式都是來自COURT表的CRT_ID值,但只有在CRT_TYPE ='A' etc 。一個普通的FK可以允許Ds和Ts,但是我想使它更具限制性。
有沒有一種方法來制定一個限制主鍵表中值的範圍的FK,或者我應該去RULE
或其他類型的CONSTRAINT
?
'appellate_crt_type'在'legal_case'中始終是相同的值。這是多餘的。我不喜歡那樣。我可以有一個規則,在'appellate_crt_id'中將可接受的值範圍定義爲'SELECT CRT_ID FROM COURT WHERE CRT_TYPE ='A''? – amphibient 2014-11-21 18:30:42
@amphibient - 是的,這是多餘的。但是,鑑於你想要構建「法庭」表,這是獲得參照完整性的唯一方法。這就是爲什麼在這種情況下我更喜歡不同的查詢表。不,您不能創建一個約束來驗證基於對某個其他表的查詢的一個表中的數據。 – 2014-11-21 18:34:19