使用SMO
,我正在尝试确定SQL Server数据库中表之间的ForeignKey
关系的基数。我可以仔细阅读每个ForeignKeyColumn
并查看父级中的每个Column
(也可能还会参考)Table
,并查看这些列的可为空性以及与相关的交叉引用{ {1}用于确定基数(每个端点的多样性,例如Index
,0..1
,1
),如以下实体关系图所示:
但是,应该有一种更简单的方法来做到这一点。我在*
ForeignKey
或Properties
中未看到任何相关信息。我在MSDN Library中找到的唯一项目是SfcCardinality枚举,其中指出“不要直接在您的代码中引用此成员。它支持SQL Server基础结构。”。
是否有直接的方式通过SMO获取基数信息?
答案 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
等其他基数案例。您可能需要仔细阅读约束和/或触发器以收集其他信息。
如果有办法获得更多基数案例,和/或更好的方法来获取这些案件,我很想知道!