什么是数据库中的父表和子表?

Posted

技术标签:

【中文标题】什么是数据库中的父表和子表?【英文标题】:What is a Parent table and a Child table in Database? 【发布时间】:2011-12-14 10:05:05 【问题描述】:

我只想知道什么是数据库中的父表和子表。能否请您给我一个示例,以便我了解它是如何工作的。

谢谢

【问题讨论】:

一直在谷歌上搜索,并没有很好地解释它 【参考方案1】:

子表往往具有一个或多个指向其他表的外键。请注意,子表本身也可以是某个 OTHER 表的父表。

【讨论】:

【参考方案2】:

子表和父表只是普通的数据库表,但它们以父子关系描述的方式链接。

它通常用于指定一个表的值在哪里引用另一个表中的值(通常是另一个表的主键)。

例如,想象一篇新闻文章。这可以用一个名为articles 的表来表示,并具有idheadlinebodypublished_dateauthor 的字段。但不是在author 字段中放置名称,而是将用户的 ID 值放在单独的表中(可能称为 authors),其中包含作者信息,例如 idnameemail.

因此,如果您需要更新作者姓名,您只需在authors(父)表中进行;因为articles(子)表只包含对应author记录的ID。

希望这可以帮助您更好地理解。

【讨论】:

如果有多篇文章指向一个作者,authors 表不就是父表吗? 有没有什么适合初学者的数据库方面的好书,我想知道,在amazon上找初学者的书很混乱。【参考方案3】:

请注意,您可以拥有看似父子关系但实际上并非如此的关系,例如在使用查找表时。区别在于,在真正的父子关系中,记录通常不能很好地代表它们自己——它们是父级的详细记录,没有父表信息就没有用处。一个人可以在 DMV 数据库中拥有多辆汽车,但您不希望 CARS 表中的记录没有 OWNERS 表中的父记录 - 这几乎是无用的数据。

另一方面,如果我使用查找表将代码扩展为更有意义的代码,或者将数据输入限制为可接受的值,那么“子”记录仍然有用(可以独立)如果查找表被删除。即使我不再有查找表来将其扩展为“男性”或“女性”,我仍然可以将性别信息设为“M”或“F”。

【讨论】:

这应该是公认的答案,因为它是唯一解释 lookup 关系和 parent-child 关系之间区别的答案。【参考方案4】:

这些术语用于数据库关系。

例如你有两张桌子,

1.Manifast

+-------------+------------------+------+-----+---------+----------------+
| Field       | Type             | Null | Key | Default | Extra          |
+-------------+------------------+------+-----+---------+----------------+
| manifast_id | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| description | text             | NO   |     | NULL    |                |
| title       | text             | NO   |     | NULL    |                |
+-------------+------------------+------+-----+---------+----------------+
    day_sequence
+-----------------+------------------+------+-----+---------+----------------+
| Field           | Type             | Null | Key | Default | Extra          |
+-----------------+------------------+------+-----+---------+----------------+
| day_sequence_id | int(11) unsigned | NO   | PRI | NULL    | auto_increment |
| day_number      | int(11)          | NO   |     | NULL    |                |
| day_start       | int(11)          | NO   |     | NULL    |                |
| manifast_id     | int(11)          | NO   |     | NULL    |                |
+-----------------+------------------+------+-----+---------+----------------+

如果你想连接这两个表,你需要使用以下格式的命令。

> ALTER TABLE child_table_name ADD FOREIGN KEY (P_ID) REFERENCES
> parent_table_name (P_ID)

于是就变成这样了。

> ALTER TABLE day_sequence ADD CONSTRAINT fk_manifast FOREIGN KEY
> (manifast_Id) REFERENCES manifast(manifast_Id);

总之, 子表是具有外键的表,并与其他表相连。 父表没有外键并连接到其他表。 [注意:此ans仅用于连接两个表]

【讨论】:

父表没有外键并连接到其他 连接到其他什么?我是指表格还是字段?【参考方案5】:

父级 - 与另一个表的关系的“一”(/1) 侧的实体

Child - 与另一个表的关系的“多”(/N/*) 侧的实体

【讨论】:

Parent Child。子指向父。所以每个孩子知道它的父母是谁。每个孩子只有一个父母。父实体不包含关于其子实体的信息。

以上是关于什么是数据库中的父表和子表?的主要内容,如果未能解决你的问题,请参考以下文章

什么是父表和子表

Laravel:使用同步或 updateOrCreate 更新父表和子表?

从父表和子表中删除行

如何将父表和子表数据移动到存档表(具有相同的列)

将数据从父表和子表加载到 DataGridView 的最简单方法,可以进行排序

oracle中建父表和子表的语句是啥?