2

テーブルを結合できるタイミングを検出するシステムを構築しています。たとえば、2 つの単純なテーブルの場合Table A、 の外部キーにリンクする主キーがある場合Table B、システムは 2 つのテーブル間で結合が可能であることを検出します。これは、すべての外部キーを反復処理し、それぞれの FK を参照する主キーを持つテーブルを確認するだけで、これまで C# で完全に機能していました。

しかし、今は複雑になってきています。の形式で、仮想テーブルの概念を追加しましたView。したがって、結合されたテーブルを使用してビューを作成し、同じビューを使用して他のテーブルと結合できます。これは、3 つ以上のテーブルで結合が発生する可能性があるケースを単純化できるようにするために行われます。したがって、ビューを使用することで、ユーザーは 3 つ以上のテーブルを簡単な方法で結合できます。

私の問題は、ビューが主キーや外部キーなどの概念を格納していないように見えることです。したがって、特定のテーブルとビューの間で結合が可能かどうかを検出するにはどうすればよいでしょうか? たとえば、次のビューを持つことができます。

CREATE VIEW [View A] 
AS 
SELECT  Children.Child_ID,
        Social_Workers.Social_ID 
FROM Children 
INNER JOIN Social_Workers 
    ON Children.Social_ID = Social_Workers.Social_ID

次に、次のように、そのビューをテーブルに結合することができます。

SELECT  [View A].Child_ID,
        Sponsors.User_ID 
FROM [View A]
INNER JOIN Sponsors 
    ON [View A].Child_ID = Sponsors.Child_ID

ビューとテーブルの間の結合の可能性を検出するにはどうすればよいですか?

4

1 に答える 1

2

2つのアプローチがあり、どちらを選択するかは、DBMSに変更を加える高速なソリューションが必要か、それとも大変な作業を行うかによって異なります。


ビューのスキーマを取得し、DBMSで一時テーブルを作成し、既存のロジックを使用します

ビュースキーマに一致するテーブルを作成する必要がありますが、テストのすべての負担がSQL Serverに転送されるため、これは迅速な解決策だと思います。


両方のテーブルのスキーマをDataTableにロードし、手動でテストを実行します

  • 結合列の数が親テーブルと子テーブルの両方に対応していることを確認してください
  • 一致する列のタイプが両方のテーブルで完全に一致することを確認してください
  • 各列が結合側に1回だけ表示されることを確認します
  • DBにまったく同じ列の関係がまだないことを確認してください
  • 子列に一意の(必要に応じてnull以外の)制約がないことを確認します
于 2013-03-07T11:40:02.563 に答える