mysql - 外键 - 子父关系

标签 mysql relational-database

我是 SQL 新手。我很难理解 child 与 parent 的关系。 《Thomas Conally 的数据库系统》一书中提到“如果子表中的外键为空,则子表在关系中的参与是完整的” 。外键为空时子表的参与怎么能满呢? 请任何人都可以解释这个概念。 谢谢!

最佳答案

首先,我假设您熟悉主键、外键、父表和子表,是吗?

所以,你有一个parent_table: PK ID 号, 姓名, 地点, 电话号码。

还有一个child_table: FKparent_table.ID号, PK 位置号, 办公地点, 办公地址, 办公城。

您有一些一般类型的关系:一对一、一对多、多对多(适用于表和字段。)以及特定关系:拒绝、限制、级联、无效、设置默认值。一般关系基本上是parent_table中的多少记录与child_table中的多少记录或与同一表中的其他字段相关的字段相关/相关。具体的关系说明了当我们添加/修改/删除具有相同键(IDnumber)的parent_table记录时,child_table中的相关记录会发生什么。

有了这种理解,“子表的完全参与”是因为子表必须参与父表中发生的操作。这通常是通过将外键字段设置为 NOT NULL/minimum=1 来完成的。因此,parent_table 中对记录的操作将影响具有匹配外键的所有 child_table 记录。

例如,如果您删除了 IDnumber 为 123 的父表记录,您希望在子表中对 IDnumber=123 的所有外键记录执行什么操作?删除两者(或级联),保留但标记为不活动(拒绝),如果存在匹配外键的子表记录则不允许父表删除(限制)?使用限制关系通常是最佳实践。

还有更多关于关系的规则和准则,但我希望这能回答您的问题。

关于mysql - 外键 - 子父关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48261920/

相关文章:

php - 仅在 Microsoft Access 更新时将 Microsoft Access 导出到 Mysql

mysql - 如何在 MySql 中查询名字和姓氏字符串

android - 在 SQLite 数据库中使用 bool 值

database - 在数据库设计的逻辑设计阶段实现泛化?

php - 从 url=$url 的数据库中获取数据

mysql - 如何做mysql rstrip

mysql - 有没有办法优化这个sql server查询?

sql - 如何根据多个外键选择数据库条目?

scala - Slick 使用的连接数多于线程数的情况

mysql - 数据透视表可能有比 Id 更多的字段