mysql - 在我的情况下我应该使用什么外键关系?很难理解

标签 mysql entity-relationship

我很难理解何时使用识别关系或非识别关系。我已经在这里阅读了一些答案,但我仍然很困惑。我想我就是这么慢......

所以我附上了一张 ER 图的一小部分图片,其中包含饮料配方:

ER Diagram

我明显的问题是;应该确定这些关系中的哪一个(如果有)? - 为什么?

如你所见;我只有一对多的非识别关系 - 这让我觉得我一定做错了什么 - 但它确实有效。

例如玻璃器皿菜谱之间的关系:
每个食谱都需要一个玻璃杯 - 这意味着没有玻璃杯就不可能存在食谱 - 我猜。因此,我将 recipes.fk_glassware_id 设置为 NN,并且给定的 ID 必须与 glassware 表中的 ID 相对应。 (一个玻璃杯可以跨越多个食谱,因此一对多)。但这应该是一种确定的关系吗?

recipes_rel_tagsrecipes 以及 tags 表之间的关系怎么样。其中任何一个都应该被确定为关系吗?如果没有任何链接表,则该表中的任何条目都不能存在。

编辑:
我添加了图表的新图片。现在,当我将关系更改为identified时,我的_rel_表中的fk_看起来像主键——所有这些。
这是什么意思?

ER Diagram 2

最佳答案

我不确定您是否看过这个问题的答案:What's the difference between identifying and non-identifying relationships? 。我不确定我能做得更好,但也许我可以让它更具体地适合您的示例。

思考识别关系的方法是问自己:我是否想将 child 与 parent 分开创建?如果你愿意的话,这不是一种识别关系。我引用的答案使用了人​​与电话号码的关系。您不会创建一堆电话号码,然后将它们与人们联系起来(至少在通常的用例中不会)。就您而言,您可能会创建配方并稍后决定最适合它们的玻璃器皿(这将使其成为可选的非识别关系),或者您可能要求在创建时选择一些玻璃器皿(强制非识别关系)。然而,您也可能稍后添加到您的玻璃器皿 table 上(例如......有凹槽和无柄酒杯),然后更改一些配方以使用它们而不是标准酒杯......所以这绝对不是一种识别关系。

您还问:

What about the relations between recipes_rel_tags and recipes- and tags-tables. Should any of those be identified relations? No entry in this table can exist without any of the linked tables..

对!如果没有食谱和标签中的记录,您永远不会在 recipes_rel_tags 中创建记录。因此它有 2 个识别关系。

关于mysql - 在我的情况下我应该使用什么外键关系?很难理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20999563/

相关文章:

php - PDO 在 PHP 中与多个数据库连接查询

python - 如何根据多对多关系从多个表中进行选择?

mysql - 如何在 mysql 中的 varchar 中执行 SQL 插入

mysql - where 子句中的 SQL 别名

mysql - 数据库 - 对于预订系统来说,什么是好的数据库设计?

C# Entity Framework 保存 1-1 关系

php警告为什么?无法解决

swift - NSPredicate:无法解析关系的格式字符串

mysql - 多值: list of string in SQL?的数据类型是什么

javascript - 如何设计类 Bill 和类 SimplifiedBill 之间的关系?