Я застрял в проблеме, когда мне нужно найти кардинальность отношения между таблицами, используя mysql. После этого сообщения
MySQL: как программно определить отношения внешнего ключа ?
Я нашел все таблицы, связанные с моей таблицей, и столбцы с внешним ключом. Теперь я также хочу найти мощность отношения, то есть один к одному, один ко многим или многие ко многим. Любые идеи или фрагменты будут высоко оценены
Как определить кардинальность внешнего ключа с помощью mysql
Ответы (1)
Предположим, что таблица A
имеет внешний ключ f
, который ссылается на первичный ключ k
таблицы B
. Затем из схемы можно узнать следующее:
- Если есть ограничение
UNIQUE
дляA.f
, то может быть не более одной строки вA
для каждой строки вB
. Обратите внимание, что в случае индексов с несколькими столбцами все столбцы ограничения уникальности должны быть частью внешнего ключа. Вы можете использоватьSHOW INDEX FROM tablename WHERE Non_unique = 0
для получения информации об ограничениях уникальности таблицы. - Если
A.f
объявлен какNOT NULL
, то всегда будет по крайней мере одна строка вB
для каждой строки вA
. Вы можете использоватьSHOW COLUMNS FROM tablename
, чтобы вывести список столбцов и посмотреть, какие из них допускают значенияNULL
.
Если вы интерпретируете «один» как «ноль или один», вы получаете отношение один-к-одному с использованием уникального ограничения и отношение многие-к-одному (т.е. многие строки в A
ссылаются на одну строку в B
) без такого уникального ограничения.
Отношение многие ко многим будет моделироваться с использованием отдельной таблицы, где каждая строка представляет один элемент отношения с отношениями многие к одному для обоих внешних ключей. это содержит.
person
MvG
schedule
27.09.2012
count(distinct values in column)/count(rows in table)
- person ravnur   schedule 27.09.2012