2

を使用して、SQL Server データベース内のテーブル間の関係のカーディナリティSMOを判断しようとしています。図のように、それぞれを熟読して、親 (およびおそらく参照されている)のそれぞれを調べ、それらの列の null 可能性を調べ、関連するes との相互参照を調べてカーディナリティ( 、、などの両端の多重度)を決定することができます。次のエンティティ関係図によると:ForeignKeyForeignKeyColumnColumnTableIndex0..11*

ここに画像の説明を入力

しかし、これを行うためのより簡単な方法があるはずです。ForeignKey Propertiesまたはに関連情報が表示されませんExtendedProperties。MSDN ライブラリで見つけた唯一の項目はSfcCardinality列挙で、「コード内でこのメンバーを直接参照しないでください。SQL Server インフラストラクチャをサポートしています。」.

SMO を介してカーディナリティ情報を取得する簡単な方法はありますか?

4

1 に答える 1

3

現在、関連するインデックスと列に基づいて、外部キー関係の多重度を判断しています。

A2 つのテーブルとが与えられB、ここでBは の外部キーの参照テーブル (プリンシパル) であり、ASMO を使用して 3 つの多重度のケースを判断できます。

1 対 1、B存在する必要があり、存在するA 可能性がある場合:

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

これは、外部キー関係にある A のすべての列が A 内の一意のインデックスと一致する場合に当てはまります。

Bが存在する場合Aは存在する必要があり、存在するA 可能性がある多対 1 :

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

このケースは、ケース 1 が真ではなく、外部キー リレーションシップ内の A のすべての列が null 許容でない場合に真です。

Bが存在する場合に存在する可能A性があり、存在する可能性がある多対 1 :A

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

このケースは、外部キー リレーションシップの A の列のいずれかが null 許容である場合に当てはまります。


これら 3 つのケースは、Entity Framework などの他のツールが判断できるものと似ているように見えるため、A<-1----------1->B, A<-*----------1->B, or A<-n----------1->B. 追加情報を収集するには、おそらく制約やトリガーを熟読する必要があります。

より多くの多重度のケースを取得する方法、および/またはこれらのケースを取得するより良い方法がある場合は、知りたいです!

于 2012-01-20T17:27:38.657 に答える