2つの列に対してUNIQUE INDEX制約を作成しようとしていますが、別の列に値1が含まれている場合のみです。たとえば、column_1
とcolumn_2
は、active = 1
。 active = 0
を含む行は、active
の他の行の値に関係なく、column_1
とcolumn_2
の値を別の行と共有できます。しかし、active = 1
の行は、column_1
またはcolumn_2
の値と、active = 1
の値を共有できません。UNIQUE制約には、フィールドに特定の値が含まれている場合のみ
「共有」とは、同じ列に同じ値を持つ2つの行を意味します。例:row1.a = row2.a AND row1.b = row2.b. row1の両方の列がrow2の他の2つの列と一致する場合にのみ、値が共有されます。
私は自分自身を明確にしたいと思います。 :\
IRCで同様の提案がありました。アクティブな表と非アクティブな表を作成します。しかし、あなたがそれを置く方法はより意味があります。歴史的なテーブルとアクティブなテーブルがあります。しかし、このテーブルには多くのフィールドがあり、これらのフィールドを2つのテーブルに複製するのは間違っているようです。私はこのタイプの冗長性を避けるよう提案しますか? – Sam
少しの非正規化は長い道のりになる可能性があるので、重複する定義について心配しないでください。もちろん、元のテーブルを履歴テーブルにも変更する必要があります。そのためオーバーヘッドはありますが、IMHOではクリーンなデータの価値があります。 – SWeko
ええと、一意の索引付けが必要なデータだけを分離するとどうなりますか?テーブル:mydata、mydata_active、mydata_inactive。このようにして、mydataには主キーとデータ列が含まれます。また、mydata_activeおよびmydata_inactiveには、一意に索引付けする必要がある列と、mydataを参照する外部キーのみが含まれます。これはもう1つの方法ですが、余分な(3番目の)テーブルが必要です。 – Sam