値テーブル(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
テーブルで参照されます。
外部キーのNULLは完全に受け入れられます。外部キーのNULLを処理するのは難しいですが、そのような列をNOT NULLに変更して、参照テーブルにダミー( "N/A"、 "Unknown"、 "No Value"など)レコードを挿入することを意味するわけではありません。
外部キーでNULLを使用するには、多くの場合、INNERJOINではなくLEFT/RIGHTJOINを使用する必要があります。
外部キー列をNULL可能にすることはできますが、一般的には、NULL可能外部キーなしでテーブルを設計する方がよいと思います。ヌルは常に特定のあいまいさと誤った結果につながりますが、問題の列が何らかの制約を受けると予想される場合、それは二重に問題になります。
これは、1対0対多の関係です。私はこれをSQLServerで何度も使用しました。 MySQLでもこれを行うことができると思います。
データ集約に関連する問題があるため、データベースでNULLを回避することを好みます。そのため、設計によっては、ルックアップテーブルにUNKNOWN行を配置します。
もちろん、外部キーにNULL値がある可能性はありますが、そのために心配する必要はありません。キー制約を管理するためのデータベースエンジンとしてInnoDBを使用していただければ幸いです。この場合、左結合または右結合を使用してDBから行を取得することをお勧めします。重複を避けるために、GroupByを使用できます。内部結合は使用しないでください。
はい、外部キーが制約された列にNULLが含まれる可能性は十分にあります。試してみました。 InnoDBストレージエンジンを使用していない場合は、外部キーの制約は無視されることに注意してください。