如何在关系数据库中进行继承建模?
Posted
技术标签:
【中文标题】如何在关系数据库中进行继承建模?【英文标题】:How to do Inheritance Modeling in Relational Databases? 【发布时间】:2010-12-06 18:41:16 【问题描述】:我的问题是关于关系数据库系统中的继承建模。我有规范的数据模型,其中我有一些与产品定价相关的字段从产品表中继承某些属性,我想在 mysql 关系数据库中对这种继承进行建模,所以,
“我们”
谢谢。
【问题讨论】:
【参考方案1】:Martin Fowler 在他的《企业应用程序架构模式》一书中广泛讨论了这一点。获取这本书并查看:
-
Single Table Inheritance
-
Class Table Inheritance
-
Concrete Table Inheritance
网站应该会给你一些想法。您可能还想阅读inheritance mappers 上的部分。每种不同的方法都有其优点和缺点,因此请明智地选择。
【讨论】:
这个答案涉及到买一本书才能完全实现。您有机会添加类似的网络资源吗?【参考方案2】:查看这些文章以获得一些想法:
Mapping Objects to Relational Databases
Inheritance in O/R Mapping
【讨论】:
【参考方案3】:如果你只想看一些网络文章而不是看书,你可以通过谷歌搜索找到一些好的文章:
Generalization Specialization Relational Modeling
gen-spec 模式涵盖了许多与 OOP 环境中的继承相同的基础。
如果你用谷歌搜索
Generalization Specialization Object Modeling
您将获得一批全新的文章,其中大部分都明确提到了继承。
在 info 标签下的以下标签 class-table-inheritance 中总结了一种设计技术。如果您允许奇怪地使用“扩展”一词,这允许您使用子类表来“扩展”类表。这涉及到一些工作,但这是值得的。
【讨论】:
虽然这并不是理想化 S.O. 的真正答案。感觉,我发现它非常有用。【参考方案4】:“数据库管理中的实际问题”的第 6 章可能对您来说很有趣。
可能与所有其他章节一样,但这些章节与您的问题没有直接关系。
【讨论】:
【参考方案5】:关系数据库不处理对象(因此,继承) - 它们处理关系。您真正要问的是如何将您的对象结构映射到您的数据库 - 答案是“这取决于您的 ORM 层”。
查看Mapping Objects to Relational Databases: O/R Mapping In Detail 文章了解更多详情。如果您告诉我们您使用的是什么软件堆栈,您可能会得到更中肯的答案。
【讨论】:
这可能听起来很迂腐,但我认为关系数据库处理关系并不准确,而是因为它们处理此处定义的关系:en.wikipedia.org/wiki/Relation_(database) @Ralph:维基是个脓肿; confabulators没有认证。关系数据库处理实体和关系,而不是对象。如果 RDb 是真正的 Relational,则可以轻松映射对象;如果不是,则不是。 你可以在没有 ORM 的情况下进行表继承以上是关于如何在关系数据库中进行继承建模?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 RavenDB 等面向文档的数据库系统中对分层和关系数据进行建模?