java – 何时在每个子类的Table上使用每个类层次结构的表?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 何时在每个子类的Table上使用每个类层次结构的表?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2386字,纯文字阅读大概需要4分钟。
内容图文
![java – 何时在每个子类的Table上使用每个类层次结构的表?](/upload/InfoBanner/zyjiaocheng/794/9c5853fdfbe84e9e848c8a05b9fdc496.jpg)
在任何Web应用程序中,我们都遇到了这样的场景,即我们可以使用Table每个类层次结构
或每个子类的表.但重要的是要决定哪一个更适合您的用例.
我已经提出了基本的理解,哪一个更好?
场景: – 员工.永久和合同员工扩展了员工.
存在两种选择: –
选项1: – 每个类层次结构的表,其中我们表示单个表中的所有字段.
关于它的好处,你可以从单个表中获取所有细节,并摆脱Employee和Permanent / Contract Employee之间的连接.
所以提高了性能.但是,即使在您认为不可能的字段上,也无法声明非空约束
永久雇员为null(因为我们在单表中为永久雇员和合同雇员提供服务).这是缺点.
选项2: – 每个子类的表,我们有父表的外键引用.加入这里会降低性能.
但是,是的,你可以在第一个选项中无法做到无效的约束.
我的看法: – 如果你不需要设置约束,那么请选择1这种情况,因为摆脱连接对于性能pov是有益的.
我想听听是否有更多的方面或我的理解是否正确?
解决方法:
未来读者需要注意:自该答案发布以来,该问题经过了大量修改.第二点可能没有意义了
您的问题有两个答案:
>你误解了每个层次表的概念和
表每个子类.这些涉及继承,而不是协会.
所以我可以解释这些概念究竟是什么.
>无论如何,都可以建议您考虑的数据库设计
第一点.
1)什么是table-per-hierarchy和table-per-subclass?
这些概念与一对一或多对一关联无关,它们与您在类设计中处理继承的方式相关,并在数据库设计中进行转换.在某个时刻,您简要地谈到了长期雇员和合同雇员.所以你的困境肯定是:
I have classes
PermanentEmployee
andContractEmployee
that extend classEmployee
. Do I need a single table for both types of employees (table per hierarchy) or do I need a table forContractEmployee
and another forPermanentEmployee
(table per subclass) ?
有了这个困境,是的,非零约束的存在具有重要性.使用第一个策略,您将得到一个包含所有常用列的表,所有列都是特定于承包商的,所有列都是特定于永久物的,还有一个用于歧视的附加列(例如,它将包含承包商的“CON”和“PER”对于永久物).如果存储永久物,则将为承包商特定的列设置所有列为null.因此,您无法强制执行诸如“Contractors具有强制性end_contract_date列”之类的规则,因为永久物将为null.
支持或反对的其他论据是性能:第一个策略使用更多空格,有大量空列,而在第二个策略中,您复制两个表中的公共列,如果您想要选择所有员工(无论承包商/永久)你将不得不建立一个SELECT UNION.
2)你的设计是什么?
一对一和多对一与您的表和联接相关.如果您具有一对一,则表示您有两个具有受限外键的表(唯一).如果你有多对一,同样的东西,但fk并不是唯一的.
对于您的多对一示例,您是正确的,规范化需要您的两个表.对于您的一对一,您也应该使用两个表,但您可以使用EmployeeDetails的组件,然后只有一个表.请参阅this hibernate documentation,它将解释它(请注意,从词汇的角度来看,它不再是一对一的).
内容总结
以上是互联网集市为您收集整理的java – 何时在每个子类的Table上使用每个类层次结构的表?全部内容,希望文章能够帮你解决java – 何时在每个子类的Table上使用每个类层次结构的表?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。