问题标签 [identifying-relationship]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 弱实体是否可以参与与其他表的识别和非识别关系?
显然,一个弱实体(作为孩子)必须参与一个或多个识别关系,否则它就不会是弱的。
但它可以同时是非识别关系中的孩子吗?
mysql - 识别和非识别关系
首先,我已经阅读了几个类似的问题,其中的“技术”答案看起来像 C&P。我需要的是一个清晰的例子。归一化是 3NF。
在这个项目中,在管理面板中,您必须创建城市和区域,并且每个区域都必须属于一个城市。还要创建酒店并将它们分配到相应的区域,最后为每个特定的酒店创建别名,因为人们知道同一家酒店有不同的名称。表hotels 和hotels_alias 用于填充自动完成输入。
价格计算是根据服务(标准、私人和 VIP)根据区域和乘客数量和季节进行的,我仍然没有创建逻辑或表格来计算每位乘客和季节的价格。这就是为什么它们不在下图中的原因。
我发现一个很好的解释是 识别和非识别关系有什么区别?
不过我有一些疑问。
Hotels_alias 没有表就不能存在,而酒店又不能没有区域表而存在,而这又不存在于没有城市的情况下。由于一个城市被划分为许多区域,酒店属于这些区域,区域是城市的一部分,酒店别名属于酒店,如果没有酒店,则无法存在。
到目前为止,很明显 city 是一个强大的或父实体,而 zone、hotels 和 hotels_alias 是子实体。
在 EER 图中,您可以看到它具有识别关系。第一个问题是:尽管是子实体,但有自己的 ID 是否正确?而且这个ID是PK和NN和AI?在某些示例中,这些子实体没有自己的 ID,因此它们的 PK 由来自相关表的两个 FK 形成,如 N:N (zones_has_servicees) 关系。
如果实际上子表不必有自己的 ID,因为它们必须能够通过父表来标识自己,那么您将如何更新或删除区域、酒店或酒店别名?
这个对吗?我应该为名称列创建索引吗?如果有的话,名称列而不是它自己的 ID 有什么好处?子表可以有自己的ID,并用这个ID和它的父表的ID创建一个复合PK吗?这种类型的关系是否有任何功能,还是仅适用于 InnoDB 之类的引擎?执行 ON DELETE CASCADE 操作?
如果我有两个同名的区域会怎样?例如:酒店区,坎昆和图伦两个城市都有这个区域。进行 DELETE 将是?:
了解什么是父实体和子实体是 WordPress 创建如下关系的原因,您可以在其中看到它与 wp_postmeta 和 wp_posts 使用弱关系。假设没有 wp_posts 就不能存在 wp_postmeta,对吗?它对评论和用户也是如此。
mysql - 在 MySQL 中表示识别和非识别关系
语境
我正在学习识别和非识别关系,我想知道如何在 MySQL 中表达它们。为了练习,我一直在研究 Pokemon 的数据库。就上下文而言,每隔几年就会有一个新版本的游戏出现并更新很多东西,例如move
口袋妖怪可以使用的某个特性可能会变得更强。此更新称为generation
. 此外,每个move
都有一个元素type
,如火或水。
所以我的三个实体是move
,generation
和type
。由于我想跟踪口袋妖怪随着时间的推移如何移动机会,move
因此a与generation
. 移动的名称不足以识别它,因为例如移动“Karate Chop”在generation
1 和2 中是不同的。所以, ,generation
中的对应主键应该是我的主键的一部分。generation
genID
move
另一方面,我想type
作为外键存储move
,但我相信这是一种非识别关系。每个move
人都有一个type
,所以我相信这就是所谓的强制性非识别关系。
我的尝试
那么我将如何在 MySQL 中编写它呢?我想它会是这样的
但是,我在我正在使用的 MySQL 书中找不到外键是主键一部分的示例(他们讨论了识别关系,但我找不到语法示例)。具体来说,我不确定我列出约束的顺序是否重要(我应该先声明我的主键,然后是我的外键吗?)
指数
另外,我相信我的复合主键会自动成为我表的聚集索引。一个常见的查询是move
按generation
/过滤genID
。所以这应该自动有效,因为我有一个索引 on genID
,即使它是复合键的一部分,对吧?还是我需要单独创建一个单独的索引genID
?