java - 识别和非识别关系

标签 java sql mysql-workbench

无法理解识别关系的主要思想:

识别关系是指子表中的行是否存在取决于父表中的行。这可能会令人困惑,因为现在的常见做法是为子表创建伪键,但不为子表主键的父部分创建外键。正式地,执行此操作的“正确”方法是使外键成为子主键的一部分。但逻辑关系是,如果没有父级,子级就无法存在。

示例:一个人有一个或多个电话号码。如果他们只有一个电话号码,我们可以简单地将其存储在 Person 的一列中。由于我们想要支持多个电话号码,因此我们创建了第二个表 PhoneNumbers,其主键包括引用 Person 表的 person_id。

但是,如果 person_id 是主键,那么 Person 如何可以拥有多个电话号码呢?或者可能的person_id必须是复杂主键的一部分并且不能单独识别表中的项目?

最佳答案

Or possible person_id must be part of complex primary key […]?

正是如此。在您引用的示例中,PhoneNumbers 的主键可能类似于 (person_id, number)。这意味着没有两个记录 PhoneNumbers 可以具有相同的 person_id number;他们可以拥有相同的 person_id,也可以拥有相同的 number,但不能同时拥有两者。 (换句话说,person_idnumber 一起“唯一标识”PhoneNumbers 中的一条记录。)

关于java - 识别和非识别关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9750514/

相关文章:

python - 尝试在 python 中从 mysql 调用存储过程,不断收到一个奇怪的错误列,在 fieldlist 中找不到,有什么想法吗?

java - 缺少 Maven 存储库中 OpenCSV 的类 "au.com.bytecode.opencsv.bean.BeanToCsv"?

java - 有没有办法正确集成两个(或更多)Spring-Boot 项目?

java - StringBuilder.append() 方法是否填满了字符串池?

java - boolean 方法每次都返回 true

sql - 如何获取Oracle SQL表中未使用/可用的主键(主键范围从1到999)的列表?

sql - 如何在 BigQuery 中获取连续时间戳之间的差异

java - 如何在 Gluon 项目中添加依赖项

来自审计跟踪数据库的 Mysql 用户事件报告

mysql - 使用MYSQL数据库中的公共(public)字段分配表之间的关系