实体具有某些共同属性时的模型结构

Posted

技术标签:

【中文标题】实体具有某些共同属性时的模型结构【英文标题】:Model structure when entities having some properties in common 【发布时间】:2015-03-06 06:54:00 【问题描述】:

我在 Core Data 中有 2 个实体,它们有一些共同的属性。我必须在同一个列表视图中显示这两个实体。这样做的最佳做法是什么?我可以做一些继承的事情并将公共属性放在基类中吗?

【问题讨论】:

【参考方案1】:

Core Data 支持继承。 打开您的核心数据模型并选择子实体。确保显示了实用程序窗格(Xcode 中的右上角按钮)并选择“显示数据模型检查器”(实用程序窗格中最右侧的图标)。

您可以在此处为您的实体选择父实体。父实体的所有属性都将在子实体中可用。

Apple documentation on Core Data inheritance

【讨论】:

【参考方案2】:

这样做的最佳做法是什么?

这取决于您需要建模的实体类型。例如,如果你有一个Cat 和一个Dog,你应该在一个基本实体中移动共同的属性(比如Animal 或任何你想要的)。换句话说,您应该有这样做的理由,即实体之间存在某种关系。

我可以做一些继承的事情并将公共属性放在基类中吗?

当然可以。在模型中,您可以拥有如下的继承模式。

在哪里

在这里我要强调两点。

首先,您可以将基础实体设为抽象实体。这样你就不能创建这个实体的实例了。

根据文档。

你可以指定一个实体是抽象的——也就是说,你不会 创建该实体的任何实例。您通常创建一个实体 抽象,如果你有许多实体都代表 (继承自)一个公共实体的特化,它不应该 本身被实例化。例如,在绘图应用程序中,您 可能有一个为 x 和 y 定义属性的 Graphic 实体 坐标、颜色和绘图边界。但是,您永远不会实例化 图形。 Graphic 的具体子实体可能是 Circle、TextArea 和 Line。

其次,Core Data 将在后台创建一个包含您插入的所有属性的表。因此,如果您有很多属性,那么您将有很多列用于一个表。

【讨论】:

以上是关于实体具有某些共同属性时的模型结构的主要内容,如果未能解决你的问题,请参考以下文章

实体如何继承递归模型结构中的属性?

引用具有多个共同父项的子实体

数据库设计E-R图

将 json 模型字段与 django 石墨烯一起使用

《数据库系统概念》10-ER模型

如何从实体框架中存在数据模型的json中反序列化对象?