Есть ли простой способ определить мощность отношения внешнего ключа с помощью SMO?

Используя SMO, я пытаюсь определить количество элементов ForeignKey отношений между таблицами в базе данных SQL Server. Я мог бы просмотреть каждый ForeignKeyColumn и посмотреть на каждый Column в родительском (и, возможно, также указанном) Table, а также проверить допустимость значений NULL в этих столбцах, а также перекрестно ссылаться на связанные Indexes, чтобы определить количество элементов (множественность на каждый конец, такой как 0..1, 1, *), как показано на следующей диаграмме отношений объектов:

введите здесь описание изображения

Но должен быть более простой способ сделать это. Я не вижу соответствующей информации в ForeignKey Properties или ExtendedProperties. Единственным элементом, который я смог найти в библиотеке MSDN, было перечисление SfcCardinality. , в котором говорится: «Не ссылайтесь на этот член напрямую в коде. Он поддерживает инфраструктуру SQL Server».

Есть ли простой способ получить информацию об количестве элементов через SMO?


person Dave Clemmer    schedule 17.01.2012    source источник
comment
Я не хочу быть плотным, но не могли бы вы уточнить, что вы подразумеваете под кардинальностью?   -  person competent_tech    schedule 18.01.2012
comment
Кардинальность, такая как ноль к единице, один к одному, один ко многим и т. д.   -  person Dave Clemmer    schedule 18.01.2012


Ответы (1)


В настоящее время я определяю множественность отношения внешнего ключа на основе связанных индексов и столбцов.

Имея 2 таблицы A и B, где B — это ссылочная таблица (главная) внешнего ключа в A, я могу определить 3 случая множественности, используя SMO:

Один к одному, где B должно существовать, а A может существовать:

A<-0..1----------1->B ()

Этот случай верен, если все столбцы A в отношении внешнего ключа соответствуют уникальному индексу в A.

Многие к одному, где B должно существовать, если присутствует A, а A может существовать:

A<-0..*----------1->B ()

Этот случай верен, если случай 1 неверен и все столбцы A в отношении внешнего ключа не допускают значение NULL.

Многие к одному, где B может существовать, если присутствует A, и A может существовать:

A<-0..*----------0..1->B ()

Этот случай верен, если любой из столбцов A в отношении внешнего ключа допускает значение NULL.


Эти 3 случая кажутся похожими на то, что могут определить другие инструменты, такие как Entity Framework, поэтому я не уверен, легко ли получить дополнительные случаи множественности, такие как A<-1----------1->B, A<-*----------1->B, or A<-n----------1->B. Вероятно, вам придется просмотреть ограничения и/или триггеры, чтобы получить дополнительную информацию.

Если есть способ получить больше множественных случаев и / или лучший способ получить эти случаи, я хотел бы знать!

person Dave Clemmer    schedule 20.01.2012