数据库 – 仍然困惑关于识别与非识别关系

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

> What’s the Difference Between Identifying and Non-Identifying Relationships
> Trouble Deciding on Identifying or Non-Identifying Relationship

看看每个问题的顶部答案,我似乎得到两个不同的想法,什么是识别关系。

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

但是,当我阅读对问题二的回答时,我会感到困惑,因为它说:“如果一个孩子识别其父,它是一个识别关系。然后答案给出了例子,例如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具有标识关系。同样,它与作者具有识别关系。

对YouTube视频的评论与相应视频具有标识关系。 video_id应为“注释”表的主键的一部分。

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必须是非NULL。逻辑方面是,对我来说,真正的关键是确定关系。

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

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

http://stackoverflow.com/questions/2814469/still-confused-about-identifying-vs-non-identifying-relationships

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:数据库 – 仍然困惑关于识别与非识别关系