所以,我一直在阅读我的数据库设计中的识别与非识别关系,并且关于SO的一些答案似乎与我相矛盾.以下是我要看的两个问题:
从每个问题的最佳答案看,我似乎对识别关系有两种不同的看法.
第一个问题的响应表明,标识关系"描述了子表中行的存在取决于父表中的行的情况." 给出的一个例子是,"作者可以写很多书(1对n的关系),但没有作者就不能存在书." 这对我来说很有意义.
然而,当我阅读对问题二的回答时,我感到困惑,因为它说,"如果一个孩子识别其父母,那就是一种识别关系." 然后答案继续给出一些例子,例如社会安全号码(识别一个人),但地址不是(因为许多人可以住在一个地址).对我来说,这听起来更像是主键和非主键之间的决定.
我自己的直觉(以及对其他网站的额外研究)指出了第一个问题,其反应是正确的.但是,在我继续前进之前,我想验证,因为我不想学习错误,因为我正在努力理解数据库设计.提前致谢.
database database-design relational-database identifying-relationship
我试图理解一个概念,而不是修复一段不起作用的代码.
我将采用表单(父表)和表单字段(子表)的一般示例.从逻辑上讲,这将是一种识别关系,因为没有表单就不能存在表单字段.

这将使我认为,为了将逻辑关系转换为技术关系,NOT NULLform_field表中的form_id字段的简单就足够了.(参见上面屏幕截图的左侧部分.)
但是,当我使用MySQL Workbench添加标识关系时,form_id不仅NOT NULL是主键的一部分,而且也是主键的一部分.(请参阅上面屏幕截图的右侧部分.)当我添加一个非识别关系时,NOT NULL仍然按逻辑方式应用它实际上也是一个识别关系.
我想这让我感到困惑,以及直到现在我总是简单地使用id字段作为主键的事实.
所以我理解识别与非识别关系的逻辑概念,但我不理解技术部分.
为什么它,正如这个答案所说的那样,"正确"的方式使外键成为孩子主键的一部分?
这些复合主键有什么好处?
在 ERD 中,弱/非识别关系是连接两个强实体的关系,用虚线表示。强/识别关系是一种将强实体连接到弱实体的关系(弱实体是一种包含来自其相关实体的外键 [FK] 作为其自己的主键 [PK] 的组成部分),并被指示用实线。
我的问题是,那又怎样?为什么区分弱/非识别关系与强/识别关系如此重要,以至于 ERD 设计者应该分别用虚线和实线进行区分?为什么这么重要?
对我来说,ERD 中的每个元素和约定都应该添加必要的信息,这些信息要么直接转换为数据库设计(即 DDL SQL 语句),要么至少解释重要但不一定明显的信息(以及最后一种情况的示例)将命名关系 - 它们不会转换为 SQL,但它们对于理解 ERD 非常有用)。为了讨论起见,这是一个示例 ERD(从另一个 StackOverflow 问题修改而来):

我已经考虑了很多,对我来说,实线与虚线添加的唯一信息已经在以下约定中得到充分传达:
据我所知,实线与虚线的关系线没有增加额外的有用信息。这种约定不是添加信息,而是不直观且非常混乱。作为它们造成的混淆的一个例子,StackOverflow 上有许多重复的问题,询问哪个是哪个;这里只是几个例子:
任何人都可以向我解释约定添加的哪些附加信息不包含在 FK 可能是也可能不是 PK 的一部分这一事实中?我正在认真考虑完全忽略约定(也就是说,我想开始用所有实线绘制我的 ERD),但如果有人能指出我忽略的重要内容,我将不胜感激。