0

1 対 1 の関係をいつ使用する必要がありますか? いつ新しいフィールドを追加し、いつそれらを新しいテーブルに分割する必要がありますか?

フィールドをグループ化するときや、そのグループがオプションになる傾向があるときはいつでもそれを使用するように思えます。はい?

オブジェクトのテーブルを作成しようとしていますが、すべてをグループ化/分離するには、約 20 の結合と 4 レベルの深さが必要です。

私は何か間違ったことをしていますか?どうすれば改善できますか?

4

1 に答える 1

6

まず、Normal Forms について読むことを強くお勧めします

正規化されたリレーショナル データベースは非常に便利です。これを適切に行うことが、Hibernate などのツールが存在する理由です。これは、リレーショナル マッピングとして表現されるオブジェクトとプログラム エンティティとしてのオブジェクトの違いを管理するのに役立ちます。

1 対 1 のマッピングを持つものはすべて、おそらく同じテーブルにあるはずです。Person には、名と姓が 1 つだけあります。それらは論理的に同じテーブルにある必要があります。名前のテーブルへの参照を持つ必要はありません。特に、名前に関して保存できる追加データはほとんどないためです。明らかに、これは常に正しいとは限りません (語源データベースは正確にそうする必要があるかもしれません) が、ほとんどの用途では、名前の由来は気にしません。

したがって、表現されているオブジェクトを考えてください。人にはいくつかの特異なデータ ポイントと、いくつかの 1 対多の関係 (住んでいた住所など) があります。1 対多および多対多では、ほとんどの場合、別のテーブルが必要です (多対多の場合は 2 つ)。これら 2 つのガイドラインに従えば、正規化されたデータベースを非常に高速に取得できます。

オプションのフィールドは、可能な限り避けるべきであることに注意してください。通常、これは元のテーブルへの参照を持つフィールドを保持する別のテーブルを持つ場合です。テーブルをスリムに保つようにしてください。フィールドに何かが含まれる可能性が低い場合は、おそらくそれ自体のテーブルの行である必要があります。多くのそのようなプロパティは、特定のタイプの任意のオプションのプロパティを保持できる「プロパティ」テーブルを示唆しています (つまり、「人」に適用されます)。

于 2012-04-10T23:30:56.670 に答える