弱实体集中的部分键

Partial Keys in a Weak Entity Set

我对部分密钥有点困惑。 'Database System Concepts by Korth' 表示如下:

Although the weak entity set does not have a primary key, we nevertheless need a means of distinguishing among all those entities in the weak entity set that depend on one particular strong entity. The discriminator of a weak entity set is a set of attributes that allows this distinction to be made. The discriminator of a weak entity set is also called the partial key of the entity set.

我的困惑是,如果弱实体的discriminator/partial键能够唯一标识一组属性,那么它应该称为主键,而不是部分键,因为主键是那些可以唯一标识一个关系的所有属性。

另外,在网上冲浪时,我看到了部分密钥的定义,它说:

'A partial key is a key using which all the records of the table can not be identified uniquely'

这在我脑海中提出了一个问题,假设如果一个table由一个主键组成,主键由两个或多个属性组成,那么如果我们从中提取一个属性,那么将它被称为部分键,因为该属性是主键的一部分,但它本身不能唯一标识关系中的所有属性。

我真的认为这种类型的描述源于任何建模过程的第一步,任何具有任何数据建模经验的人都会在不考虑它的情况下解决这个问题。

"Weak Entity" 上的维基页面给出了 Header/Detail 对的经典示例,其中的详细信息本身没有对 header 的引用。想象一个两页的文档,其中第一页是 header,第二页是详细信息。

第二页本身不能唯一标识一行,但当然任何人都会自动添加 header FK 以便我们可以唯一标识一行。

还没有看过您正在阅读的书,但我认为这就是它的意思。所以我认为你后面的所有推理都是正确的。查看 wiki 页面了解更多信息。

定义中没有说 "the discriminator/partial keys of weak entities are able to uniquely identify" 在 table 中。它表示在一个特定的强实体中识别一个弱实体

技术术语仅表示它们在特定假设上下文中的定义,包括其他定义。您不能指望同一个术语在任何地方都具有相同的含义。您不能只看定义的文本并假设它适用于什么情况以及它的技术术语是什么意思,甚至是一个词是用于技术意义还是日常意义。当有人使用某个术语时,您必须确保您知道他们的意思。

关系超键唯一标识一行。 CK(候选密钥)是一个不包含更小超级密钥的超级密钥。 PK(主键)只是您决定调用 PK 的一些 CK。)因此,独一无二并不是将某物称为 PK 或 CK 的理由。 (SQL PK/UNIQUE 类似于关系超级键。)

book 方法生成的鉴别器不是超级键。所以我们可以说它与网络定义一致——对于该方法中出现的情况。但是,如果一种方法允许生成作为 CK 或 PK 的鉴别器,那么它使用该教科书措辞会将 "partial key" 定义为与 Web 定义不同的东西。这样的方法不能使用 (relational) "PK" 作为强 id 加鉴别器,因为它将是一个超级密钥,而不是 CK 或 PK。 (但它仍然可以使用 SQL "PK" 因为这大约意味着主超级键。)