Существует ли простой способ определения мощности отношения внешнего ключа с помощью SMO? - PullRequest
2 голосов
/ 18 января 2012

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

enter image description here

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

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

1 Ответ

3 голосов
/ 20 января 2012

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

Учитывая 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.Вам, вероятно, придется просматривать противоречия и / или триггеры, чтобы получить дополнительную информацию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...