1. ホーム
  2. sql

[解決済み] データベースの1:1リレーションを使うことに意味があることはあるのでしょうか?

2022-04-22 13:31:47

質問

先日、正規化について考えていて、ふと思ったのですが、データベースの中で1対1の関係があるべき時が思い浮かびません。

  • Name:SSN ? 同じテーブルの中に置いておくと
  • PersonID:AddressID ? 再び、同じテーブルで。

1:manyやmany:manyの例は(適切な中間テーブルを使って)いくらでも思いつくが、1:1の例はない。

何か当たり前のことを見逃していませんか?

どのように解決するのですか?

1対1の関係は、通常、何らかの理由で大きなエンティティをパーティション分割したことを示します。多くの場合、物理スキーマのパフォーマンス上の理由ですが、データの大きな塊が同時に "unknown"になると予想される場合、ロジック側でも起こり得ます(その場合、1:0または1:1を持ちますがそれ以上ではありません)。

論理的なパーティションの例として、ある従業員に関するデータがありますが、その従業員が健康保険を選択した場合にのみ収集する必要がある、より大きなデータセットがあります。健康保険に関する人口統計学的なデータを別のテーブルに置いておくと、セキュリティのパーティショニングが容易になり、保険とは関係のないクエリーでそのデータを持ち運ぶこともなくなります。

物理的なパーティションの例としては、同じデータが複数のサーバーでホストされていることが挙げられます。例えば、健康保険の人口統計データを別の州(人事部のある場所)に置き、プライマリー・データベースはリンクされたサーバーを経由してのみそれにリンクすることができます...機密データを他の場所に複製することを避けつつ、(ここではまれだと仮定して)それを必要とするクエリーに利用可能にすることができます。

物理的なパーティショニングが有効 いつでも より大きなエンティティの一貫したサブセットを必要とするクエリがある場合。