我正在开发Web应用程序,其中我有一个Person类的90个字段,分为家庭详细信息,教育详细信息,个人详细信息等....
我希望每个人都有单独的表格,比如家庭详细信息有父亲姓名,母亲姓名兄弟姐妹等...其他地方等等
我希望每个细节都有单独的表,所有表的公共引用ID
我的问题是我应该写多少个bean类?是否可以将一个bean类从多个表格映射到多个表格?
class PersonRegister{
private Long iD;
private String emailID;
private String password;
.
.
}//for register.......
登录后我需要保留他/她的详细信息
要么
class person{
}
或
class PersonFamilyDetails{}
class PersonEducationDetails{}
etc
软件开发标准指定创建哪种方式?
答案 0 :(得分:0)
不要太过分了,我相信你的情况是单一但非常宽(即有很多列)表从维护角度来看是最有效和最简单的。唯一要记住的是,在加载大量行时,只查询列/字段的必要子集。否则,您将获取千字节的不必要数据,而不是特定用例所需。
不幸的是,Hibernate没有直接的支持,在为Person
设计映射时,你最终会遇到巨大的类,甚至更糟 - Hibernate将总是获取所有简单的列(以及许多 - 一个关系)。但是,您可以通过在仅包含列子集的数据库中创建多个视图,或者通过将多个Java类映射到同一个表但仅映射到列的子集来克服此问题。
仅当您的架构未规范化时,才将数据库模型拆分为多个表是有益的。例如。当存储兄弟姐妹的名字和姓氏时,你可能希望有一个单独的Sibling
表格,下次输入其他一些家庭成员时,你可以重复使用同一行。这使得数据库更小,并且在通过兄弟搜索时可能更快。
答案 1 :(得分:0)
你的问题归结为数据库规范化,正如Boyce和Codd深入描述的那样 http://en.wikipedia.org/wiki/Database_normalization
数据库规范化的主要优点是避免修改异常。在您的情况下,如果您为每个人准备了一张桌子,例如父亲名字和父亲姓氏,并且您有多个人拥有相同的父亲,这些数据将被复制,当您发现父姓的拼写错误时,你可以修改一个兄弟,而不是下一个。
在这个简化的案例中,数据库设计最佳实践要求首先将标准化归入一个单独的表,其中包含 father-id ,父亲名字和父亲 - 姓氏,以及与您的人表有一对多的关系。
对于一对一关系,例如人 - > personeducationdetails ,有一些争论。在第一范式的原始定义中,每个可选字段都将通过放置自己的表来规范化。后来通过在关系数据库中引入“null”来削弱这一点,请参阅http://en.wikipedia.org/wiki/First_normal_form#cite_note-CoddRule-12。但是,如果整个列的列可以同时为null,则将它们放在一个具有一对一关系的单独表中。
E.g。如果你不知道一个人的教育细节,那么它的所有相关字段都是空的,所以你最好把它们分开放在一个单独的表中,而不是那个人<的 personeducationdetails 记录/强>