什么是数据库中的父表和子表?
Posted
技术标签:
【中文标题】什么是数据库中的父表和子表?【英文标题】:What is a Parent table and a Child table in Database? 【发布时间】:2011-12-14 10:05:05 【问题描述】:我只想知道什么是数据库中的父表和子表。能否请您给我一个示例,以便我了解它是如何工作的。
谢谢
【问题讨论】:
一直在谷歌上搜索,并没有很好地解释它 【参考方案1】:子表往往具有一个或多个指向其他表的外键。请注意,子表本身也可以是某个 OTHER 表的父表。
【讨论】:
【参考方案2】:子表和父表只是普通的数据库表,但它们以父子关系描述的方式链接。
它通常用于指定一个表的值在哪里引用另一个表中的值(通常是另一个表的主键)。
例如,想象一篇新闻文章。这可以用一个名为articles
的表来表示,并具有id
、headline
、body
、published_date
和author
的字段。但不是在author
字段中放置名称,而是将用户的 ID 值放在单独的表中(可能称为 authors
),其中包含作者信息,例如 id
、name
和email
.
因此,如果您需要更新作者姓名,您只需在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 更新父表和子表?