3

MySQL では、UNIQUE 制約が NULL 値を同等に扱わないことを知っています。したがって、ColumnX に一意の制約がある場合、2 つの別々の行が ColumnX に対して NULL の値を持つことができ、これは制約に違反しません。どうすればこれを回避できますか? 私の場合、ColumnX は実際には別のテーブルへの外部キーであるため、フラグを立てることができる任意の定数に値を設定することはできません。ここでのオプションは何ですか?

このテーブルには、主キーである「id」列もあることに注意してください。Ruby on Rails を使用しているため、この id 列を主キーとして保持することが重要です。

注 2: 実際には、私の一意のキーには多くの列が含まれており、そのうちのいくつかは null でなければなりません。それらは外部キーであり、そのうちの 1 つだけが非 null であるべきだからです。私が実際にやろうとしているのは、データベースで参照整合性を維持する方法でポリモーフィックな関係を「シミュレート」することですが、ここで尋ねられた質問に対する受け入れられたソリューションの最初のオプションで概説されている手法を使用します:ポリモーフィックな関連付けの外部キー?

4

1 に答える 1

1

外部キーの 1 つだけが非 null になる場合は、テーブルを再構築する方がよいでしょう。colA | colB | colC1 つの FK と 2 つの NULL を使用する代わりに、代わりにfkType | fkId.

fkTypeA,B,C外部テーブルに対応するオプションを含む列挙型になります。fkId外部テーブルの ID になります。に一意性制約を設定できるようになりました(fkType,fkId)

したがって、以前は次のことがあった可能性があります。

1    | NULL | NULL
NULL | 3    | NULL

これで、次のようになります。

A | 1
B | 3
于 2010-03-23T15:32:32.260 に答える