23

2 つの列に対して UNIQUE INDEX 制約を作成しようとしていますが、別の列に値 1 が含まれている場合のみです。たとえばcolumn_1column_2active = 1. を含むすべての行は、他の行の値が何であるかに関係なく、別の行とactive = 0値を共有できます。ただし、の値を共有できない行、またはを持つ別の行と値を共有できない行。column_1column_2activeactive = 1column_1column_2active = 1

「共有」とは、同じ列に同じ値を持つ 2 つの行のことです。例: 行 1.a = 行 2.a AND 行 1.b = 行 2.b。行 1 の両方の列が行 2 の他の 2 つの列と一致する場合にのみ、値が共有されます。

私は自分自身を明確にしたことを願っています。:\

4

6 に答える 6

17

column_1、column_2、およびアクティブで複数列のUNIQUEインデックスを作成してから、一意性が不要な行にアクティブ= NULLを設定できます。または、トリガーを使用して(MySQL トリガー構文を参照) 、挿入/更新された各行をチェックして、そのような値が既にテーブルに存在するかどうかを確認することもできますが、かなり遅くなると思います。

于 2011-02-10T10:37:53.217 に答える
0

SQL Server では、これはチェック制約で実現できますが、MySQL が同様のものをサポートしているかどうかはわかりません。

どのデータベースでも機能するのは、テーブルを 2 つに分割できることです。アクティブ =0 のレコードが単なる履歴レコードであり、二度とアクティブにならない場合は、それらを別のテーブルに移動し、元のテーブルに単純な一意制約を設定できます。

于 2011-02-10T10:18:15.177 に答える
-2

インデックスは外部の影響にとらわれません。この種の制約は、データベースの外部で実装する必要があります。

于 2011-02-10T10:12:40.823 に答える