我对部分键有些困惑。 “ Korth的数据库系统概念”说:
尽管弱实体集没有主键,但我们 但是,需要一种在所有这些实体之间进行区分的方法 依赖于一个特定强实体的弱实体集。的 弱实体集的鉴别符是一组允许 这种区分。弱实体集的鉴别符是 也称为实体集的部分关键字。
我的困惑是,如果弱实体的鉴别符/部分键能够唯一地标识属性集,则应将其称为主键,而不是部分键,因为主键是可以唯一地标识所有属性的键。关系的属性。
此外,在浏览网络时,我遇到了部分密钥的定义,它说:
“部分键是不能唯一标识表中所有记录的键”
在我的脑海中提出了一个问题,即假设一个表包含一个由两个或多个属性组成的主键,那么如果我们从中选择一个属性,则将其称为部分键,因为该属性是主键的一部分,但是就其本身而言,它不能唯一地标识关系中的所有属性。
答案 0 :(得分:2)
该定义并不表示表中的“弱实体的鉴别符/部分键能够唯一标识”。它说,人们在一个特定的强实体中识别出一个弱实体。
技术术语仅表示在某些假设(包括其他定义)中定义的含义。您不能期望相同的术语在任何地方都意味着相同的事物。您不仅可以查看定义的文本,还不能对定义适用于什么情况,其技术术语的含义,甚至是将单词用于技术性或日常含义进行假设。当某人使用术语时,必须确保您知道他们的意思。
关系超键唯一地标识一行。 CK(候选密钥)是一个超级密钥,其中不包含更小的超级密钥。 PK(主键)只是您决定调用PK的某些CK。)因此,具有唯一性并不是称呼PK或CK的理由。 (SQL PK / UNIQUE类似于关系超键。)
book方法生成的标识符不是超级键。因此,对于这种方法中出现的情况,我们可以说它与网络定义一致。但是,如果一种方法允许生成是CK或PK的区分符,则其使用该教科书措辞的方式将定义“部分密钥”为与Web定义不同的事物。这种方法不能将(关系)“ PK”用于强标识加区分符,因为它将是超键,而不是CK或PK。 (但是它仍然可以使用SQL“ PK”,因为这大约意味着主超键。)
答案 1 :(得分:1)
我真的认为这种描述源于任何建模过程的第一步,任何具有任何数据建模经验的人都可以在不考虑的情况下进行修复。
“弱实体”上的Wiki页面给出了标头/明细对的经典示例,其中明细本身没有对标头的引用。想象一下一个两页的文档,其中第一页是标题,第二页是细节。
第二页本身无法唯一地标识行,但是当然任何人都会自动添加标题FK,以便我们可以唯一地标识行。
您还没有看过您正在阅读的书,但是我认为这就是它的意思。因此,我认为您随后的所有推理都是正确的。请查看Wiki页面以获取更多信息。