2

使用SMO,我试图确定SQL Server 数据库中表之间关系的基数。ForeignKey我可以仔细阅读每个ForeignKeyColumn并查看Column父(可能还引用)中Table的每个,并查看这些列的可空性以及与相关Indexes 的交叉引用以确定基数(每一端的多重性,例如0..1, 1, *),如图所示通过以下实体关系图:

在此处输入图像描述

但是,应该有一个更直接的方法来做到这一点。ForeignKey Properties我在or中没有看到任何相关信息ExtendedProperties。我可以在 MSDN 库中找到的唯一项目是SfcCardinality枚举,其中指出“不要在代码中直接引用此成员。它支持 SQL Server 基础结构。 ”。

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

4

1 回答 1

3

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

给定 2 个表AB,其中B外键的引用表(主体)在哪里A,我能够使用 SMO 确定 3 个多重情况:

一对一,B必须存在和A 可能存在的地方:

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

如果外键关系中 A 的所有列都与 A 中的唯一索引匹配,则这种情况为真。

多对一,如果B存在则必须存在A,并且A 可能存在:

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

如果情况 1 不为真并且外键关系中 A 的所有列都不可为空,则此情况为真。

多对一,如果B存在则可能存在A,并且A 可能存在:

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

如果外键关系中 A 的任何列可以为空,则这种情况为真。


这 3 种情况似乎与 Entity Framework 等其他工具可以确定的情况相似,所以我不确定是否容易获得额外的多重性情况,例如A<-1----------1->B, A<-*----------1->B, or A<-n----------1->B. 您可能必须仔细阅读约束和/或触发器才能收集更多信息。

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

于 2012-01-20T17:27:38.657 回答