如何在关系数据库中进行继承建模?

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 等面向文档的数据库系统中对分层和关系数据进行建模?

如何在 Kimball 风格的数据仓库中对这种关系进行维度建模?

在关系数据库中对相同实体之间的多个多对多关系进行建模

面向对象数据库与对象关系数据库

如何在维度模式中建模父子关系表