数据库设计中的二元关系与非二元关系
Binary relations vs non-Binary realtions in database design
n元关系和二元关系有什么区别?
- 优缺点是什么?
- 关系数据库设计哪个更好?
N 元关系描述任何元数的关系 - 一元、二元、三元等。
这种关系的简单数学示例是 n 维笛卡尔坐标系中的点集 space。例如:
- 一元关系可以表示数轴上的任意一组点。
- 二元关系可以表示平面上的任何一组点,或数轴上的任何一组间隔。
- 三元关系可以表示 3D 中的任何一组点 space。
- 四元关系可以表示 4D 中的任何一组点 space,或平面上的任何一组线。
数字并不是我们可以关联的唯一领域。我们可以关联任何值集 - 名称、颜色、日期等。关系可以表示我们想要的任何谓词:
- 一元关系可以表示一组用户权限
- 二元关系可以关联一组用户名和密码
- 三元关系可以关联一组用户名、权限和访问级别
数据的关系模型就是建立在这个想法之上的,事实上关系可以很容易地表示为遵循特定规则的表格:
- 每一列都有一个唯一的名称并与一个域相关联
- 每个单元格只包含其列域中的一个值
- 行和列的顺序无关紧要
- 没有重复行
关系数据库的优点之一是它们能够使用n元关系,这使得将任何数据记录为关系变得容易。关系可以组合成更大的关系——从逻辑上讲,事实可以组合以导出其他隐含但未记录的事实。因此,关系数据库可以更轻松地从您的数据中获取更多价值,并且它们是通往演绎数据库的重要一步。
在数据的关系模型中,不偏爱二进制或其他参数。我们使用我们需要的东西,但我们喜欢保持关系简单,因为它们更容易操纵和组合。
我推荐 Lex de Haan 和 Toon Koppelaars 的 Applied Mathematics for Database Professionals
以深入探讨该主题。
针对您的评论,即您打算询问关系而不是关系,我决定添加第二个答案,重点关注实体关系模型中定义的关系:
N 元关系描述任何元数的关系 - 二元、三元等。元数描述关系中角色的数量 [1](无论它们是否指代不同实体集的相同),或不同实体集的个数。
二元关系是大家最熟悉的。例如,<supplier> supplies <product>
。三元关系的示例可以是 <supplier> supplies <product> in <region>
或 <student> takes <course> with <teacher>
.
在 ER 模型中找不到真正的一元关系(具有单一角色的关系)。这些与实体集或子类型无法区分。相反,一些作者使用该术语来指代单个实体集上的二元关系。
关系中的每个角色都可以有关联的基数,指的是该角色中的实体数,这些实体可以与关系中其他角色中的每个实体组合相关联。这在二元关系中很常见,二元关系根据上限广泛分类:1 对 1、1 对多或多对多。在 n 元关系中,1:M:N 或 M:N:P:Q 关系是可能的。
ER 模型中的关系表示为 tables(或关系关系,在 ER 术语中),其中主键是由关系中涉及的每个实体集的键组成的复合键基数大于 1。关系可以有属性(非主要列),这些不计入关系的数量。
在关系数据库设计中,具有共同决定因素的关系通常是非规范化的。在一对多二元关系的情况下,这意味着将关系记录在与多边实体相同的 table 中。例如,可以通过在员工 table.
中包含 manager_id
来记录员工与其经理 (employee_id -> manager_id
) 之间的关系
在网络数据模型中,只允许二元关系。将 ER 模型转换为网络模型需要将 n > 2 的 n 元关系具体化为具有 n 个二元关系的实体。这还需要引入代理标识符和唯一约束,这些约束将由 ER 模型中的复合键处理。
关于您比较优缺点的问题 - 在 ER 中,就像在关系中一样,我们使用任何适合对数据建模的元数关系。
如果您想知道基于 n 元关系的数据模型与仅基于二进制关系的数据模型相比如何,我建议您搜索 access path independence
.
[1]我更喜欢算角色,因为它符合关系模型中的术语。
n元关系和二元关系有什么区别?
- 优缺点是什么?
- 关系数据库设计哪个更好?
N 元关系描述任何元数的关系 - 一元、二元、三元等。
这种关系的简单数学示例是 n 维笛卡尔坐标系中的点集 space。例如:
- 一元关系可以表示数轴上的任意一组点。
- 二元关系可以表示平面上的任何一组点,或数轴上的任何一组间隔。
- 三元关系可以表示 3D 中的任何一组点 space。
- 四元关系可以表示 4D 中的任何一组点 space,或平面上的任何一组线。
数字并不是我们可以关联的唯一领域。我们可以关联任何值集 - 名称、颜色、日期等。关系可以表示我们想要的任何谓词:
- 一元关系可以表示一组用户权限
- 二元关系可以关联一组用户名和密码
- 三元关系可以关联一组用户名、权限和访问级别
数据的关系模型就是建立在这个想法之上的,事实上关系可以很容易地表示为遵循特定规则的表格:
- 每一列都有一个唯一的名称并与一个域相关联
- 每个单元格只包含其列域中的一个值
- 行和列的顺序无关紧要
- 没有重复行
关系数据库的优点之一是它们能够使用n元关系,这使得将任何数据记录为关系变得容易。关系可以组合成更大的关系——从逻辑上讲,事实可以组合以导出其他隐含但未记录的事实。因此,关系数据库可以更轻松地从您的数据中获取更多价值,并且它们是通往演绎数据库的重要一步。
在数据的关系模型中,不偏爱二进制或其他参数。我们使用我们需要的东西,但我们喜欢保持关系简单,因为它们更容易操纵和组合。
我推荐 Lex de Haan 和 Toon Koppelaars 的 Applied Mathematics for Database Professionals
以深入探讨该主题。
针对您的评论,即您打算询问关系而不是关系,我决定添加第二个答案,重点关注实体关系模型中定义的关系:
N 元关系描述任何元数的关系 - 二元、三元等。元数描述关系中角色的数量 [1](无论它们是否指代不同实体集的相同),或不同实体集的个数。
二元关系是大家最熟悉的。例如,<supplier> supplies <product>
。三元关系的示例可以是 <supplier> supplies <product> in <region>
或 <student> takes <course> with <teacher>
.
在 ER 模型中找不到真正的一元关系(具有单一角色的关系)。这些与实体集或子类型无法区分。相反,一些作者使用该术语来指代单个实体集上的二元关系。
关系中的每个角色都可以有关联的基数,指的是该角色中的实体数,这些实体可以与关系中其他角色中的每个实体组合相关联。这在二元关系中很常见,二元关系根据上限广泛分类:1 对 1、1 对多或多对多。在 n 元关系中,1:M:N 或 M:N:P:Q 关系是可能的。
ER 模型中的关系表示为 tables(或关系关系,在 ER 术语中),其中主键是由关系中涉及的每个实体集的键组成的复合键基数大于 1。关系可以有属性(非主要列),这些不计入关系的数量。
在关系数据库设计中,具有共同决定因素的关系通常是非规范化的。在一对多二元关系的情况下,这意味着将关系记录在与多边实体相同的 table 中。例如,可以通过在员工 table.
中包含manager_id
来记录员工与其经理 (employee_id -> manager_id
) 之间的关系
在网络数据模型中,只允许二元关系。将 ER 模型转换为网络模型需要将 n > 2 的 n 元关系具体化为具有 n 个二元关系的实体。这还需要引入代理标识符和唯一约束,这些约束将由 ER 模型中的复合键处理。
关于您比较优缺点的问题 - 在 ER 中,就像在关系中一样,我们使用任何适合对数据建模的元数关系。
如果您想知道基于 n 元关系的数据模型与仅基于二进制关系的数据模型相比如何,我建议您搜索 access path independence
.
[1]我更喜欢算角色,因为它符合关系模型中的术语。