Как проверить модальность / кардинальность отношений в Oracle - PullRequest
0 голосов
/ 17 февраля 2010

Я пытаюсь провести обратный инжиниринг базы данных, которая находится в Oracle. Мне удалось найти основные ключи и правила ссылочной целостности, которые соответствуют внешним ключам, но не могу найти, где хранятся правила модальности / мощности.

Буду очень признателен за помощь в поиске таблицы или примера запроса.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2010

Что вы подразумеваете под правилами модальности / кардинальности?

Отношения FK всегда равны 1: N в отношении Oracle.Я думаю, что можно было бы применить 1: 1, имея два отношения FK в одних и тех же полях, но в противоположных направлениях.

Единственное другое «правило», касающееся количества элементов, - это уникальные ключи, но я думаю, у вас уже есть такие.В противном случае это может помочь:

http://www.eveandersson.com/writing/data-model-reverse-engineering#constraints

В зависимости от настройки базы данных вы также можете найти эвристика о количестве значений в столбцах:

select * from user_tab_col_statistics

Особенно значение NUM_DISTINCT может иметь некоторое значение.

Если вам нужна дополнительная информация в словаре данных, я рекомендую этот выбор для начинающих

select * from dict
where lower(comments|| '@' || table_name) like '%whatareyoulookingfor%'
1 голос
/ 17 февраля 2010

Я думаю, вам нужно проверить, ссылаются ли столбцы на nullable:

SELECT column_name, nullable
FROM user_tab_cols
WHERE table_name = '<TABLE_NAME>'

и для уникальных индексов на ссылающихся столбцах:

SELECT idx.index_name, col.column_name
FROM user_indexes idx
JOIN user_ind_columns col ON ( col.index_name = idx.index_name )
WHERE idx.uniqueness = 'UNIQUE'
  AND idx.table_name = '<TABLE_NAME>'
...