有没有直接的方法来确定使用SMO的外键关系的基数?

时间:2012-01-17 21:48:37

标签: sql-server foreign-keys indexing smo cardinality

使用SMO,我正在尝试确定SQL Server数据库中表之间的ForeignKey关系的基数。我可以仔细阅读每个ForeignKeyColumn并查看父级中的每个Column(也可能还会参考)Table,并查看这些列的可为空性以及与相关的交叉引用{ {1}用于确定基数(每个端点的多样性,例如Index0..11),如以下实体关系图所示:

enter image description here

但是,应该有一种更简单的方法来做到这一点。我在* ForeignKeyProperties中未看到任何相关信息。我在MSDN Library中找到的唯一项目是SfcCardinality枚举,其中指出“不要直接在您的代码中引用此成员。它支持SQL Server基础结构。”。

是否有直接的方式通过SMO获取基数信息?

1 个答案:

答案 0 :(得分:3)

我目前正在根据相关索引和列确定外键关系的基数。

给定2个表A和B,其中B是A和B之间的外键的引用表,我能够使用SMO确定3个基数案例。

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个案例看起来与实体框架等其他工具类似,所以我不确定是否容易获得A<-1----------1->B, A<-*----------1->B, or A<-n----------1->B等其他基数案例。您可能需要仔细阅读约束和/或触发器以收集其他信息。

如果有办法获得更多基数案例,和/或更好的方法来获取这些案件,我很想知道!