Как проверить модальность / кардинальность отношений в 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>'