ORM 建模——实体类型与值类型

ORM modelling - entity type vs. value type

我是 ORM 建模的新手,有一个简单的问题。

假设我想要一份电影列表,包括它们的名称、发行日期和类型。电影在这里由值类型 "name" 表示。但是我应该使用 "release date" 和 "genre" 作为实体类型还是值类型?我见过使用不同方法的不同 ORM 模型。选择其中之一的原因是什么?

电影片名在电影翻拍中获得 re-used。然而,可以说永远不会在同一年,所以标题和制作年份(或发行年份?确保您指定!)应该足以唯一标识特定的电影作品。就我个人而言,我喜欢 "The Italian Job (1969)" 而不是 2003 年的翻拍版,后者实在是太糟糕了。

标题只是一个值——一段文字。另一方面,Year 是一种实体类型,由年份编号标识。您可以通过询问穆斯林或中国人是哪一年来验证这一点——他们都有自己的纪元,而不是基于共同纪元。不同的数字,同一年。所以数字与年份不同。

情况变得更糟:他们的岁月也不会在 12 月 31 日结束,但我们暂时忽略它。此外,一个天文(恒星)年有 366.25 天,而不是 365.25 天,因为这是我们绕天转的速度。多转一圈 "unwinds" 围绕太阳公转一圈。因此,明确您的价值观的含义非常重要。

使用此逻辑,日期是实体类型,而不是值类型。恰好我们的数据库有 "value" 支持日期,这就是为什么它们也提供了将它们分开的功能等。但是日期是实体类型,而不是值类型。但是,如果您的工具太不方便,您可能会决定忽略它。

流派也是如此。不同的人可能对同一流派有不同的名称;一种流派不一定由其名称唯一标识。因此,您拥有由值类型 GenreName 标识的实体类型 Genre。您断言,出于您的目的,每种流派都有一个(且只有一个)名称;但是实体的使用承认了首选不同标识符的可能性。流派与流派名称不同。

我希望这能给你一个明确的理由。