我是 ORM 建模的新手,有一个简单的问题。
假设我想要一个电影列表、它们的名称、发行日期和类型。电影在这里由值类型“名称”表示。但是我应该使用“发布日期”和“类型”作为实体类型还是值类型?我见过使用不同方法的不同 ORM 模型。选择其中之一的原因是什么?
我是 ORM 建模的新手,有一个简单的问题。
假设我想要一个电影列表、它们的名称、发行日期和类型。电影在这里由值类型“名称”表示。但是我应该使用“发布日期”和“类型”作为实体类型还是值类型?我见过使用不同方法的不同 ORM 模型。选择其中之一的原因是什么?
电影标题在电影翻拍中得到重复使用。然而,可以说永远不会在同一年,因此标题和制作年份(或发行年份?确保您指定!)应该足以唯一地识别特定的电影制作。就个人而言,我喜欢“意大利工作(1969)”而不是 2003 年的翻拍,这确实很糟糕。
标题只是一个值——一段文本。另一方面,A Year 是一种实体类型,由年份编号标识。您可以通过询问穆斯林或中国人来验证这一点 - 他们都有自己的时代,而不是基于共同时代。不同的数字,同一年。所以这个数字和年份不一样。
情况变得更糟:他们的年份也不会在 12 月 31 日结束,但现在让我们忽略这一点。此外,天文(恒星)年有 366.25 天,而不是 365.25 天,因为这是我们环绕天空的速度。一个额外的旋转“展开”围绕太阳的一个轨道。因此,明确您的价值观的含义非常重要。
使用此逻辑,日期是实体类型,而不是值类型。碰巧我们的数据库对日期具有“值”支持,这就是为什么它们还提供将它们分开的功能等。但是日期是实体类型,而不是值类型。但是,如果您的工具太不方便,您可能会决定忽略这一点。
流派也是如此。不同的人可能对同一类型有不同的名字;流派不一定由其名称唯一标识。所以你有实体类型 Genre,由值类型 GenreName 标识。您断言,出于您的目的,每个流派都有(并且只有)一个名称;但实体的使用承认可能首选不同的标识符。流派与流派名称不同。
我希望这能给你一个明确的理由。