私はこれを正しく行っているかどうかわからない奇妙なデータベース設計の問題を抱えています。私の現在の設計は非常に複雑なので、次の図では、家と居住者(実際のエンティティではない)を使用して比較して簡略化しています。
したがって、データベース設計のどの部分がどのように見えるかを次に示します。
標準状態:
- 複数の家
- 家ごとに複数のフロア
- フロアごとに複数のベッドルーム
それほど標準的ではない条件:
- 各居住者は複数の家に住むことができます
- 各居住者は、家ごとに複数の寝室を持つことができます
- 各居住者は、1つの家につき1つのフロアに1つのベッドルームしか持てません(これは注意が必要な部分です)。たとえば、1階に1つのベッドルーム、2階に1つのベッドルーム、3階に1つのベッドルームを持てますが、同じ場所に2つのベッドルームを持てることはできません。床
したがって、私が達成しようとしているのはこれです。アプリのデザインでは、私は知っていますhouse
、私は知っています、floor
そして私は知っていoccupant
ます。ユーザーが指定せずにこの情報で知る必要があるbedroom
のoccupant
は、これら3つの基準に基づいたものです。2つの解決策があります。1つ目は、occupants_has_bedrooms
テーブルで主キーを、、occupants_id
およびbedrooms_floors_id
にすることbedrooms_floors_houses_id
です。ただし、bedrooms_id
主キーを削除すると、テーブルは親との識別関係ではなくなります(bedrooms
)。親なしでは存在できなかったので、それは識別関係です。したがって、4つのIDすべてを主キーとして保持する必要があるとのことです。私の2番目のオプションは、これら3つの値の間の一意のインデックスですが、これは、私がこれに間違ってアプローチしている可能性があると考えたときです。
どうすればこれを達成できますか?