Как проверить модальность / кардинальность отношений в Oracle

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

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

2 ответа

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

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

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

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

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

select * from user_tab_col_statistics

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

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

select * from dict
where lower(comments|| '@' || table_name) like '%whatareyoulookingfor%'

Я думаю, что вам придется проверить, ссылаясь на столбцы 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>'
Другие вопросы по тегам