1

私は、家族の詳細、教育の詳細、個人の詳細などに分割された Person クラスの 90 フィールドがある Web アプリケーションに取り組んでいます。

家族の詳細のように、それぞれに別のフォームが必要です-父の名前、母の名前の兄弟など...フィールドなど、他のフィールド

すべてのテーブルに共通の参照 ID を持つ詳細ごとに個別のテーブルが必要です

私の質問は、いくつの Bean クラスを作成する必要があるかです。1 つの Bean クラスで、複数のフォームから複数のテーブルにマップできますか?

class PersonRegister{
  private Long iD;
  private String emailID;
  private String password;
   .
    .

     }//for register.......

ログインしたら、彼/彼女の詳細を維持する必要があります

また

class person{
}

また

class PersonFamilyDetails{}
class PersonEducationDetails{} 
etc

ソフトウェア開発標準がどのように作成することを指定していますか?

4

2 に答える 2

0

質問は、BoyceとCoddによって詳細に説明されているように、データベースの正規化に帰着します 。http://en.wikipedia.org/wiki/Database_normalizationを参照してください。

データベースの正規化の主な利点は、変更の異常を回避できることです。あなたの場合、たとえばfather-firstnamefather-lastnameのように各人に1つのテーブルがあり、同じfatherを持つ複数の人がいる場合、このデータは複製され、father-lastnameにタイプミスが見つかった場合、次の兄弟ではなく、ある兄弟のために変更することができます。

この単純化されたケースでは、データベース設計のベストプラクティスでは、father-idfather-firstnamefather-lastnameを含む別のテーブルへの最初の正規化と、それに1対多の関係を持つpersonテーブルが必要になります。

1対1の関係、たとえば、 person- > personeducationdetailsについては、いくつかの議論があります。第一正規形の元の定義では、すべてのオプションのフィールドは、独自のテーブルを配置することによって正規化されます。これは後にリレーショナルデータベースに「null」を導入することで弱められました。http://en.wikipedia.org/wiki/First_normal_form#cite_note-CoddRule-12を参照してください。ただし、それでも、列のセット全体が同時にnullになる可能性がある場合は、それらを1対1の関係で別のテーブルに配置します。

たとえば、ある人のeducationdetailsがわからない場合、関連するすべてのフィールドはnullであるため、それらを別のテーブルに分割し、その人のpersoneducationdetailsレコードを持たない方がよいでしょう。

于 2012-10-07T12:40:09.200 に答える
0

船外に出ないでください。あなたのケースでは、単一だが非常に幅の広い(つまり、多くの列がある)テーブルが、メンテナンスの観点から最も効率的でシンプルになると思います。覚えておくべき唯一のことは、多くの行をロードするときに、列/フィールドの必要なサブセットに対してのみクエリを実行することです。そうしないと、特定のユースケースでは必要のない不要なデータを数キロバイトフェッチすることになります。

残念ながら、Hibernate はそれを直接サポートしていませんPerson。ただし、この問題は、列のサブセットのみを含むデータベースに複数のビューを作成するか、列のサブセットのみに同じ表にマッピングする複数の Java クラスを作成することで解決できます。

データベース モデルを複数のテーブルに分割することは、スキーマが正規化されていない場合にのみ有効です。たとえば、兄弟の名前と姓を保存する場合、別のSiblingテーブルが必要な場合があり、次に他の家族が入力されたときに同じ行を再利用できます。これにより、データベースが小さくなり、兄弟で検索するときに高速になる場合があります。

于 2012-10-07T11:42:18.427 に答える