gpt4 book ai didi

mysql - 数据库建模 : does this non-identifiable relationship maintain identifiability?

转载 作者:行者123 更新时间:2023-11-29 00:21:13 26 4
gpt4 key购买 nike

我有一些表,我使用 MySQL Workbench 创建了 role_has_action 表。
创建的字段是:(role_id,action_id,action_controller_id):
(为简洁起见,我将 action_controller_id 重命名为 controller_id): identifying relationship

我理解这是role_has_actionaction 表之间的识别关系。 action 表有一个来自其自身的复合键和 Controller 表。因此,role_has_action 表现在有一个三重复合主键来维护可识别的关系。

然而,我声称,如果 role_has_action 只有 (role_id,action_id) 字段,那么在实践中将保留可识别性,尽管也许不是严格的理论意义上的。我这么说是因为, Controller 是独一无二的;操作对于 Controller 而言是唯一的;并且 role_has_action 可以通过使用 action.id 列将 role 表中的角色唯一地绑定(bind)到操作,因此 controller_id 键在 role_has_action 表。

我错过了什么吗?删除该列 (controller_id) 会使 MySQL Workbench 将此关系标记为非标识,因此我有些担心。我可以举一个反例来说明这如何成为一种非识别性关系,或者我在实践中是否可以删除该列而不用太担心失去识别性?

最佳答案

正式来说,在标识关系中,子实体的主键必须包含其父实体的主键。 MySQLWorkbench 似乎遵循这个严格的定义。

由于 action 被定义为与 controller 建立识别关系(这可以说是正确的),因此严格的规则要求 controller_id 是其中的一部分action 的主键,并向下级联到 role_has_action

但假设 action.id 是唯一的,则此列实际上变得多余。

但是,action.id 的唯一性并不是正式 要求的(事实上,这是一个 surrogate key ,它的存在是可选的)。您可以很好地删除此列,让 (name, conroller_id) 成为主键。在这种情况下,role_has_action.controller_id实际上再次需要。

关于mysql - 数据库建模 : does this non-identifiable relationship maintain identifiability?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21025557/

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