gpt4 book ai didi

database - 仍然对识别与非识别关系感到困惑

转载 作者:太空狗 更新时间:2023-10-30 01:37:27 25 4
gpt4 key购买 nike

所以,我一直在阅读关于我的数据库设计中识别关系与非识别关系的文章,SO 上的一些答案似乎与我相矛盾。这是我正在查看的两个问题:

  1. What's the Difference Between Identifying and Non-Identifying Relationships
  2. Trouble Deciding on Identifying or Non-Identifying Relationship

查看每个问题的最佳答案,我似乎对什么是识别关系有了两种不同的看法。

第一个问题的回答是识别关系“描述了子表中一行的存在依赖于父表中一行的情况”。给出的一个例子是,“一个作者可以写很多书(一对一的关系),但是没有作者就不能存在一本书。”这对我来说很有意义。

但是,当我阅读对问题二的答复时,我感到困惑,因为它说:“如果 child 识别其 parent ,则这是一种识别关系。”然后答案继续给出示例,例如 Social Security Number (识别一个人),但地址不是(因为许多人可以住在一个地址)。对我来说,这听起来更像是在主键和非主键之间做出决定的情况。

我自己的直觉(以及对其他网站的额外研究)指出第一个问题及其回答是正确的。但是,我想在继续前进之前进行验证,因为我不想在了解数据库设计时学到错误的东西。

最佳答案

识别关系的技术定义是子项的外键是其主键的一部分。

CREATE TABLE AuthoredBook (
author_id INT NOT NULL,
book_id INT NOT NULL,
PRIMARY KEY (author_id, book_id),
FOREIGN KEY (author_id) REFERENCES Authors(author_id),
FOREIGN KEY (book_id) REFERENCES Books(book_id)
);

看到了吗? book_id 是一个外键,但它也是主键中的列之一。因此,此表与引用表 Books 具有标识关系。同样,它与 Authors 具有标识关系。

对 YouTube 视频的评论与相应视频具有识别关系。 video_id 应该Comments 表的主键的一部分。

CREATE TABLE Comments (
video_id INT NOT NULL,
user_id INT NOT NULL,
comment_dt DATETIME NOT NULL,
PRIMARY KEY (video_id, user_id, comment_dt),
FOREIGN KEY (video_id) REFERENCES Videos(video_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

这可能很难理解,因为现在只使用串行代理键而不是复合主键是很常见的做法:

CREATE TABLE Comments (
comment_id SERIAL PRIMARY KEY,
video_id INT NOT NULL,
user_id INT NOT NULL,
comment_dt DATETIME NOT NULL,
FOREIGN KEY (video_id) REFERENCES Videos(video_id),
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);

这可能会掩盖表具有标识关系的情况。

认为 SSN 代表身份识别关系。有些人存在但没有 SSN。其他人可能会申请获得新的 SSN。所以 SSN 实际上只是一个属性,而不是个人主键的一部分。


来自@Niels 的评论:

So if we use a surrogate key instead of a compound primary key, there is no notable difference between use identifying or non-identifying relationship ?

我想是的。我犹豫要不要说是,因为我们没有使用代理键更改表之间的逻辑 关系。也就是说,您仍然无法在不引用现有视频的情况下发表评论。但这仅仅意味着 video_id 必须为 NOT NULL。对我来说,逻辑方面才是确定关系的关键。

但是识别关系也有一个物理方面。这就是外键列是主键的一部分的事实(主键不一定是复合键,它可以是单个列,既是 Comments 的主键又是 Videos 表的外键,但这意味着您只能为每个视频存储一条评论)。

识别关系似乎只是为了绘制实体关系图才重要,这在 GUI 数据建模工具中出现。

关于database - 仍然对识别与非识别关系感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2814469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com