这是一个鸟类观察者数据库示例。假设您有三个实体BirdSpecies
,Location
和Observer
。要拥有一个实体Observation
,您需要所有这三个。没有它们就没有观察。
我的理解是,上面的要求是Observation
一个弱实体。但是,如果同一个人可以在同一地点多次发现同一物种怎么办?那么条目将不是唯一的。
因此,我的问题是,你能不能有一个主键,Observation
因为它只是一个数字,每次观察依次增加,而实体仍然是一个弱实体?
这是一个鸟类观察者数据库示例。假设您有三个实体BirdSpecies
,Location
和Observer
。要拥有一个实体Observation
,您需要所有这三个。没有它们就没有观察。
我的理解是,上面的要求是Observation
一个弱实体。但是,如果同一个人可以在同一地点多次发现同一物种怎么办?那么条目将不是唯一的。
因此,我的问题是,你能不能有一个主键,Observation
因为它只是一个数字,每次观察依次增加,而实体仍然是一个弱实体?
我认为新实体的弱点取决于它的关系,现在不管它的主键是什么。
为了理解这一点,想象一下,你有一个日期时间,而不是一个顺序增加的数字,每个观察都是独一无二的。这不会改变这样一个事实,即如果您删除三个实体之一,则没有观察到。
弱实体由单个父实体的主键和另一个属性标识。弱实体通常是整体的一部分。 Observation
(不引入代理键)是三元关系,而不是弱实体。
为了记录同一人在同一地点对同一物种的多次观察,我会在Observation
关系和主键中包含一个日期/时间值,或者一个非素数列来记录观察次数。请记住,关系不能有重复的条目,因此没有区分列的风险不是唯一性,而是您记录多个条目的能力。然而,SQL DBMS 的关系不正确,会让您自取其辱。
引入代理键后,您将关系具体化为关联实体。由代理键标识的实体始终是强实体,因为它们是由它们自己的属性标识的。代理键允许您记录否则重复的条目,这就是为什么代理键经常与其他属性上的唯一键相补充的原因。