В настоящее время я определяю количество элементов отношения внешнего ключа на основе связанных индексов и столбцов.
Учитывая 2 таблицы A и B, где B - ссылочная таблица внешнего ключа между A и B,Я могу определить 3 случая количества элементов с помощью SMO.
A<-0..1----------1->B (one to one, where B must exist and A may exist)
Этот случай верен, если все столбцы A в отношении внешнего ключа соответствуют уникальному индексу в пределах A.
A<-0..*----------1->B (many to one, where B must exist if A is present, and A may exist)
Этот случай является истинным, если случай 1 не является истинным, и все столбцы A в отношении внешнего ключа не обнуляются.
A<-0..*----------0..1->B (many to one, where B may exist if A is present, and A may exist)
Этот случай является истинным, если какой-либо из столбцов A вотношения внешнего ключа допускают обнуление.
Эти 3 случая кажутся похожими на то, что могут определить другие инструменты, такие как Entity Framework, поэтому я не уверен, легко ли получить дополнительные случаи кардинальности, такие как A<-1----------1->B, A<-*----------1->B, or A<-n----------1->B
.Вам, вероятно, придется просматривать противоречия и / или триггеры, чтобы получить дополнительную информацию.
Если есть способ получить больше случаев кардинальности и / или лучший способ получить эти случаи, я хотел бы знать!