1

我正在开发 Web 应用程序,其中我有 90 个字段用于 Person 类,分为家庭详细信息、教育详细信息、个人详细信息等......

我想为每个人提供单独的表格,例如家庭详细信息有父亲姓名,母亲姓名兄弟姐妹等......其他字段等等

我希望每个详细信息都有单独的表格,所有表格都有共同的参考 ID

我的问题是我应该写多少个 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,并且您有多个具有相同父亲的人,则此数据将重复,并且当您发现father-lastname 中的拼写错误时,您可以为一个兄弟姐妹修改它,而不是为下一个兄弟姐妹修改它。

在这个简化的情况下,数据库设计最佳实践将要求第一次规范化为一个单独的表,其中包含parent-idfather-firstnameFather-lastname,并且您的person表与其具有一对多关系。

对于一对一的关系,例如person -> personeducationdetails,存在一些争论。在第一范式的原始定义中,每个可选字段都将通过放置它自己的表格来规范化。后来通过在关系数据库中引入“null”来削弱这一点,请参见http://en.wikipedia.org/wiki/First_normal_form#cite_note-CoddRule-12。但是,如果一整套列可能同时为空,您可以将它们放在具有一对一关系的单独表中。

例如,如果您不知道某个人的educationdetails,则其所有相关字段均为空,因此您最好将它们拆分到单独的表中,并且根本没有该人的personeducationdetails记录。

于 2012-10-07T12:40:09.200 回答
0

不要过分,我相信在你的情况下,从维护的角度来看,单个但非常(即有很多列)的表将是最有效和最简单的。唯一要记住的是,在加载大量行时,只查询必要的列/字段子集。否则,您将获取数千字节的不必要数据,特定用例不需要这些数据。

不幸的是,Hibernate 没有直接支持,在为 设计映射时Person,你最终会得到巨大的类,甚至更糟——Hibernate 总是会获取所有简单的列(以及多对一关系)。但是,您可以通过在仅包含列子集的数据库中创建多个视图或将多个 Java 类映射到同一个表但仅映射到列子集来克服此问题。

仅当您的模式未规范化时,将您的数据库模型拆分为多个表才是有益的。例如,当存储兄弟姐妹的名字和姓氏时,您可能希望有一个单独的Sibling表,并且下次输入其他家庭成员时,您可以重复使用同一行。这使得数据库更小,并且在按兄弟搜索时可能更快。

于 2012-10-07T11:42:18.427 回答