0

次のように、C# で直接テーブルの外部キーを見つけることができます。

  foreach (ForeignKey key in CurrentTable.ForeignKeys) {
                    Console.WriteLine("FK:" + key.ReferencedTable);
          }

多対多の関係の従来の表現は、2 つの主要なテーブルに対して 1 対多の関係を持つ中間テーブルを介して実現されるため、多対多の関係を持つテーブル間に直接リンクはありません。

今のところ、分析しているテーブルに2つの列しかなく、両方の列が異なるテーブルへの外部キーであるかどうかをチェックする多対多の関係を見つけようとします(その場合、これを中間テーブルとして認識します)。

中間テーブルには他の列も含まれている場合があるため、これは最善の解決策ではありません。

このmany2many関係をプログラムで見つける最良の方法は何ですか?

4

4 に答える 4

0

テーブルに 2 つの異なるテーブルへの外部キー列がある場合、それは間違いなくテーブル間の多対多の関係を表しています。テーブルに他の列があるという事実は、テーブル (エンティティ) 間の関係が追加の属性によってさらに修飾されることを意味するだけです。次の図の例を見てください。

代替テキスト

上記の例では、製品と請求書の間に多対多の関係があります。交差テーブルには、「数量」、「ギフト包装」などの記述属性もあります。これは、そもそも多対多の関係があるという事実を取り除くものではありません。テーブルは次のようになります

  • 製品 (prod_id、名前、単位重量、単位)
  • Bill(BillNo, date, amount,uom)
  • BillItems(prod_Id, BillNo,quantity,gift_flg)
于 2009-07-23T03:55:36.447 に答える
0

このステートメントは、少なくとも 2 つの外部キー列を持つすべてのテーブルを検索します

SELECT  objects_1.name AS Master1, objects_2.name AS Master2, sys.objects.name AS Detail, 
    sys.columns.name AS Column1, columns_1.name AS Column2
FROM sys.objects 
INNER JOIN sys.columns ON sys.objects.object_id = sys.columns.object_id 
INNER JOIN sys.foreign_key_columns ON sys.columns.column_id = sys.foreign_key_columns.parent_column_id 
    AND sys.columns.object_id = sys.foreign_key_columns.parent_object_id 
INNER JOIN sys.objects AS objects_1 ON sys.foreign_key_columns.referenced_object_id = objects_1.object_id 
INNER JOIN sys.columns AS columns_1 ON sys.objects.object_id = columns_1.object_id 
    AND columns_1.column_id <> sys.columns.column_id 
INNER JOIN sys.foreign_key_columns AS foreign_key_columns_1 ON columns_1.object_id = foreign_key_columns_1.parent_object_id 
    AND columns_1.column_id = foreign_key_columns_1.parent_column_id 
INNER JOIN sys.objects AS objects_2 ON objects_2.object_id = foreign_key_columns_1.referenced_object_id
WHERE     (sys.columns.is_nullable = 0) AND (columns_1.is_nullable = 0)
ORDER BY Master1, Detail, Master2
于 2009-01-21T11:46:07.743 に答える
0

追加の基準として、多くの場合、2 つの外部キーの組み合わせが結合/中間テーブルの主キーを表すという事実を使用できます。

于 2009-01-21T11:03:20.513 に答える
0

あなたはあなた自身の解決策を提案したようです。他の個別のテーブルを参照し、他の列を持たない 2 つの外部キーを持つテーブルを検索するのではなく、"and with no other columns" という語句を削除するだけです。

つまり、「他の個別のテーブルを参照する 2 つの外部キーを持つテーブル」を探します。

于 2009-01-21T11:04:20.057 に答える