1

私のデータベースには、レコードが概念的に他のレコードの子になることができるテーブルがあります。テーブルに null 以外の名前フィールドがあります。一連の子の各名前が一意であることを確認する必要がありますが、データベース全体では一意ではありません。データベース内の制約を使用してこれを強制したいと思います。これを達成するための最良の方法は何ですか? プロセスのある時点で、次のようなクエリを実行する必要があることはわかっています。

@NameParameter NVARCHAR(512)
Select Name from MyTable
WHERE Name=@NameParameter

問題は、このクエリをどこに置くかです。

4

2 に答える 2

2

あなたの質問を正しく理解していないかもしれませんが、子の親レコードを参照する別の列を作成することをお勧めします。次に、これらの 2 つの列に基づいて A 複数列インデックスを作成して、where 句でこれらの列を一緒に参照するクエリを高速化できます...したがって、一意性は {parent_name, child_name} から得られます。これら 2 つの列に対する制約は、そのテーブルのキーとして機能し、重複を許可しません。

@childname NVARCHAR(255), @parentname NVARCHAR(255)
SELECT * FROM [child_records] 
WHERE [parent_name] = @parentname 
AND [child_name] = @childname
于 2009-02-12T05:33:53.903 に答える
1

一見すると、これは「トリガーの代わりに」に入るべきだと思います。このリンクは良い例です。

于 2009-02-12T05:28:06.320 に答える