2017-02-12 6 views
0

SQLデータベースの場合、同じテーブルに一対一の関係を維持する方が良い場合があります。代わりに別のテーブルに格納する方が理にかなっていますか?SQLデータベースでは、1対1の関係が同じテーブルにある場合と、別のテーブルにある場合はいつですか?

+0

テーブルからのすべてのヌルカラムが別々のテーブルのOUTER JOINになっていても嫌な気持ちはありませんが。 – philipxy

+0

実際の一般的なルールはありません。それは個人的な感情の問題です。一般に、私が使用する経験則(厳密ではない)は、必要な副次列の頻度です。しばらくの間そこにいるのは、別のテーブルにあるはずです。常にそこにあるものは同じテーブルにあるべきです。 「しばらくの間」と「しばしば十分な」間の線を描くところは、個人的な好みであり、@philipxy状態のように、どれだけあなたがヌルをサポートするかによっても異なります。 – theblitz

答えて

1

他のエンティティへの外部キーとして機能できなければならない複数のエンティティがあり、複数のエンティティに共通のプロパティと固有のプロパティの両方があり、ユニークなプロパティにNOT NULL制約が必要な場合(あまり重要でないものは、他のエンティティには適用されないユニークなプロパティのNULL値を必要としません)。一意の/共通のプロパティを持たず、NULL値を気にしなくても、それぞれのサブパイプ・テーブルとスーパータイプ・テーブルに個別の外部制約が必要な場合は、依然としてそうすることができます。この戦略は、スーパータイプ/サブタイプのモデリングと呼ばれます。

例を挙げておきます。

人々

  • ID(PK)
  • 年齢

教師

  • ID(PK、FKとpeople.idする)
  • years_teaching 、NOT NULL NOT NULL
  • どんなNOT NULL

学生

  • ID

    (PK、FKとpeople.idする)
  • グレード
  • ものは何でも、NOT NULL

ご覧のように、教師と生徒はいくつかのプロパティの共通テーブルを1つ持つことができます。 NOT NULL独自のプロパティを所有しています。さらに、他のテーブルに人、教師、生徒を参加させ、参照整合性を保つことができます。

もう1つのアプリケーションは、それぞれのレコードに対して別々のデータベースがあり、あるプロパティといくつかのプロパティが別々のデータベースであったとしても、私は決してこれを実行しませんでした。

関連する問題