外部キーは NULL または重複にできますか? 質問する

外部キーは NULL または重複にできますか? 質問する

以下の2点を明確にしてください。

  1. 外部キーは NULL にできますか?
  2. 外部キーは重複できますか?

当然ですが、NULL外部キーでは使用すべきではありませんが、一部のアプリケーションでは Oracle と SQL Server の両方に入力できNULL、その理由がわかりません。

ベストアンサー1

短い答え: はい、NULL または重複になる場合があります。

外部キーが NULL である必要がある場合や、一意である必要がある場合、または一意でない場合がある理由を説明したいと思います。まず、外部キーでは、そのフィールドの値が別のテーブル (親テーブル) に最初に存在する必要があるだけであることを覚えておいてください。これが、定義上、FK のすべてです。定義上、NULL は値ではありません。NULL は、値が何であるかがまだわからないことを意味します。

実際の例を挙げてみましょう。営業提案を保存するデータベースがあるとします。さらに、各提案には 1 人の営業担当者と 1 人のクライアントのみが割り当てられているとします。したがって、提案テーブルには 2 つの外部キーがあり、1 つはクライアント ID 用、もう 1 つは営業担当者 ID 用です。ただし、レコードの作成時には、営業担当者が常に割り当てられているわけではありません (まだ誰も作業できないため)。そのため、クライアント ID は入力されますが、営業担当者 ID は null である可能性があります。つまり、通常、データの入力時にその値がわからない可能性があるが、入力する必要があるテーブル内の他の値はわかっている場合に、null FK を持つ機能が必要になります。FK で null を許可するには、通常、FK を持つフィールドで null を許可するだけで済みます。null 値は、FK であるという考えとは別のものです。

一意かどうかは、テーブルが親テーブルと 1 対 1 の関係か 1 対多の関係かによって決まります。1 対 1 の関係であれば、すべてのデータを 1 つのテーブルに収めることもできますが、テーブルが広くなりすぎたり、データが異なるトピック (たとえば、@tbone が示した従業員 - 保険の例) に関する場合は、FK を持つ別のテーブルが必要になります。その場合は、この FK を PK (一意性を保証する) にするか、一意制約を設定する必要があります。

ほとんどの FK は 1 対多の関係用であり、これはフィールドにさらなる制約を追加せずに FK から得られるものです。たとえば、注文テーブルと注文詳細テーブルがあるとします。顧客が一度に 10 個の商品を注文すると、FK と同じ注文 ID を含む 1 つの注文と 10 個の注文詳細レコードが存在します。

おすすめ記事