gpt4 book ai didi

database - 数据建模 : parent and child 'dual' relationship

转载 作者:搜寻专家 更新时间:2023-10-30 19:40:50 25 4
gpt4 key购买 nike

我正在尝试在我的数据模型中创建适当的父/子关系。我在 parent 和 child 之间有一个典型的一对多关系。

我想知道我的 parent 是否了解他们的 child ,是吗

  1. 永远可以接受,并且
  2. 一个好主意

让每个 child 具体了解其 parent ? (在我的例子中,一个 child 只能有一个 parent )

parent      
-------------
PARENT_ID
OTHER_COL
...

child
-------------
CHILD_ID
PARENT_ID // <-- Should this column be here?
OTHER_COL
...

parent_has_children
--------------------
PARENT_ID
CHILD_ID

我看到在子列中包含父列的优点是可以轻松地从子列中检索父列。但是,这只是懒惰的设计吗?

提前致谢。

最佳答案

长话短说

回复问题:

child
PARENT_ID // <-- Should this column be here?

,如果从引用父列 parent.PARENT_IDchild.PARENT_ID 添加外键约束,则将强制执行父子关系。

Should table parent_has_children exist?

,像这样的链接或联合表用于模拟多对多 关系。表 PC 之间的多对多关系意味着相同的 C 行可以同时关联多个 P行,反之亦然。这显然不是亲子关系。

为一对多关系建模

如果关系是 1 parent to many children(即同一个 child 只能属于一个 parent ),那么标准的建模方法是通过(其中一个)Parent 的键从 Child 表中引用 Parent 表列,通常是父级的主键 (PK)。同时,对引用列 (child.PARENT_ID) 进行外键 (FK) 约束以鼓励 RDMBS 执行 referential integrity 也是一个好主意。跨越关系:

parent      
-------------
PARENT_ID PRIMARY KEY, // PK for the parent table
OTHER_COL
...

child
-------------
CHILD_ID PRIMARY KEY, // PK for the Child Table
PARENT_ID // <-- Should this column be here? = Yes
CONSTRAINT FK_ChildParent FOREIGN KEY(PARENT_ID) REFERENCES parent(PARENT_ID)

OP 的附加 many:many 表 parent_has_children 是多余的,因为每个 child 只有一行,并且很快就会成为保留此表的负担 in sync 与从其他表中添加/删除的行(因为未能保持同步将导致关系完整性的困惑/矛盾)。

Re: parent 如何了解他们的 child ?

可以使用对父外键列过滤的子表的简单查询找到给定父项的子记录:

SELECT ... 
FROM child
WHERE PARENT_ID = myParentId;

因为这通常是一个常见的查询,所以确保外键 child.PARENT_ID 被索引总是一个好主意 - 一些 RDBMS 版本默认为所有外键执行此操作。

CREATE INDEX IXFoo on child(PARENT_ID);

如果您在表示这些表的应用程序中有一个实体模型(例如,用于 ORM),则父实体通常会有一个包含其 child 实例的集合,而在子实体上,标量外键 child.PARENT_ID 'column' 要么完全删除,要么替换为对父实例的引用:

class Parent
{
ParentId,
Child[] Children,
// ...
}

class Child
{
ChildId,
Parent Parent, // Optional, allows bidirectional navigation
// ...
}

关于database - 数据建模 : parent and child 'dual' relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3383314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com