考虑下面的设计:对数据的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