Database 数据库继承技术?
当您需要将继承类持久化到不支持继承的关系数据库时,有哪些技巧/技巧 假设我有一个经典的例子:Database 数据库继承技术?,database,database-design,class-table-inheritance,Database,Database Design,Class Table Inheritance,当您需要将继承类持久化到不支持继承的关系数据库时,有哪些技巧/技巧 假设我有一个经典的例子: Person -> Employee -> Manager -> Team lead -> Developer -> Customer -> PrivilegedCustomer -> EnterpriseCustomer 设计数据库
Person -> Employee -> Manager
-> Team lead
-> Developer
-> Customer -> PrivilegedCustomer
-> EnterpriseCustomer
设计数据库的可用技术有哪些?各有利弊
p、 我已经搜索并发现了几个关于数据库继承的问题,但大多数问题都是关于转换为本地支持它的数据库引擎。但假设我一直使用SQL Server 2005。。。我的选择是什么?三种常见策略:
vehicle
表,其中包含car
和frame
等具有vehicle\u id
列的其他表。这里的缺点是,您可能需要执行大量的联接才能得到一个类类型vehicle
表可能包含一个名为wingspan
的列,该列对应于飞机
类型。如果将此列设置为非空,则插入表中的Car
的任何实例都需要wingspan
的值,即使NULL
的值可能更有意义。如果将列保留为空,则可以使用检查约束解决此问题,但它可能会变得很糟糕。()第八章。下面链接中的继承映射也讨论了这一点
这是NHibernate文档。在某些情况下要小心数据库继承-我们在应用程序中实现了它以实现审计策略,最终导致性能瓶颈/噩梦 问题是,我们使用的基表是insert-only,并且变化很快,所以我们最终遇到的是到处都是死锁。我们目前正计划将这些列拆分为各自的表,因为在15个不同的表中有相同的列而不是性能噩梦,这是非常值得的。实体框架不一定能有效地处理继承(这是Microsoft已知的一个问题),这一事实也加剧了这种情况
无论如何,我想我应该分享一些知识,因为我们已经讨论了这个问题。我关心的是查询的复杂性。可能需要在DAL部分使用一些技巧才能使其正确。对于查询复杂性,3听起来最好。此外,在某些DBMS(如Postgres)中,您可以通过检查约束为每个特定子类型强制非空,即使列都可以为空。我不知道这是否是一个选项,但您不使用1。并使用视图访问数据,这样您只能在一个点中获得连接?相关问题:那么您正在执行#1,并且正在(已经)移动到#2?(关于cliff.meyers解决方案)