Рассмотрим следующую конструкцию:Oracle ссылочной целостности против диапазона данных в ПК таблицы
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, - это значения CRT_ID из таблицы COURT , но только там, где CRT_TYPE = 'A' и т. Д. . Регулярный FK позволял бы Ds и Ts, но я хотел бы сделать его более ограничительным.
Есть ли способ сформулировать FK, который ограничивал бы диапазон значений в таблице первичных ключей, или я должен просто перейти с RULE
или другим типом CONSTRAINT
?
'appellate_crt_type' всегда будет одинаковым значением в' legal_case'. это избыточно. Мне это не нравится. Могу ли я иметь правило, которое определяет допустимый диапазон значений в 'appellate_crt_id' как' SELECT CRT_ID FROM COURT WHERE CRT_TYPE = 'A''? – amphibient
@amphibient - Да, это избыточно. Но это единственный способ получить ссылочную целостность, учитывая, как вы хотите структурировать таблицу 'court'. Вот почему я предпочитаю разные таблицы поиска для каждого типа судов в этом случае. Нет, вы не можете создать ограничение, которое проверяет данные в одной таблице на основе запроса к какой-либо другой таблице. –