22

値テーブル(value)の列をknownValuesテーブルへの外部キーとして参照し、次の例のように、必要に応じてNULLにすることはできますか?

表:値

 product     type     value     freevalue
 0           1        NULL      100
 1           2        NULL      25
 3           3        1         NULL

表:タイプ

 id    name     prefix
 0     length   cm
 1     weight   kg
 2     fruit    NULL

テーブル:knownValues

id    Type     name
0     2        banana 

注:テーブルvalues&のタイプknownValuesは、もちろんtypesテーブルで参照されます。

4

5 に答える 5

31

外部キーのNULLは完全に受け入れられます。外部キーのNULLを処理するのは難しいですが、そのような列をNOT NULLに変更し、参照テーブルにダミー( "N / A"、 "Unknown"、 "No Value"など)レコードを挿入することを意味するわけではありません。

外部キーでNULLを使用するには、多くの場合、INNERJOINの代わりにLEFT/RIGHTJOINを使用する必要があります。

于 2010-05-10T12:58:59.660 に答える
7

外部キー列をnull許容にすることはできますが、一般的にはnull許容外部キーなしでテーブルを設計する方がよいと思います。ヌルは常に特定のあいまいさと不正確な結果につながりますが、問題の列が何らかの制約を受けると予想される場合、それは二重に問題になります。

于 2010-05-10T12:45:28.813 に答える
4

これは、1対0対多の関係です。私はこれをSQLServerで何度も使用しました。MySQLでもこれが可能だと思います。

データ集約に関連する問題があるため、データベースでNULLを回避することを好みます。そのため、設計によっては、ルックアップテーブルにUNKNOWN行を配置します。

于 2010-05-10T12:36:15.677 に答える
1

はい、外部キーが制約された列にNULLが含まれる可能性は十分にあります。試してみました。InnoDBストレージエンジンを使用していない場合は、外部キーの制約は無視されることに注意してください。

于 2010-05-10T12:45:16.147 に答える
1

もちろん、外部キーにNULL値がある可能性もありますが、そのために心配する必要はありません。キー制約を管理するためのデータベースエンジンとしてInnoDBを使用していただければ幸いです。この場合、左結合または右結合を使用してDBから行を取得することをお勧めします。重複を避けるために、GroupByを使用できます。内部結合は使用しないでください。

于 2010-05-10T13:13:59.220 に答える