二进制关系与数据库设计中的非二元实现

时间:2016-05-18 11:30:52

标签: database-design relational-database relation

n元关系和二元关系有什么区别?

  • 什么是利弊?
  • 哪一个更适合关系数据库设计?

2 个答案:

答案 0 :(得分:2)

< - > N-ary关系描述任何arity的关系 - 一元,二元,三元等。

这种关系的简单数学例子是n维笛卡尔空间中的点集。例如:

  • 一元关系可以代表数字线上的任何一组点。
  • 二元关系可以表示平面上的任何点集,或数字线上的任何一组间隔。
  • 三元关系可以表示3D空间中的任何一组点。
  • 四分之一关系可以表示四维空间中的任何一组点,或平面上的任何一组线。

数字不是我们可以关联的唯一域名。我们可以关联任何值集 - 名称,颜色,日期等。关系可以表示我们想要的任何谓词:

  • 一元关系可以代表一组用户权利
  • 二元关系可以关联一组用户名和密码
  • 三元关系可以关联一组用户名,权限和访问级别

数据的关系模型建立在这个理念之上,并且关系可以很容易地表示为遵循某些规则的表:

  • 每列都有一个唯一的名称,并与域
  • 相关联
  • 每个单元格只保留其列
  • 域中的一个值
  • 行和列的顺序无关紧要
  • 没有重复的行

关系数据库的一个优点是它们能够使用n元关系,这使得将任何数据记录为关系变得容易。关系可以组成更大的关系 - 从逻辑上讲,事实可以结合起来得出隐含但未记录的其他事实。因此,关系数据库可以更轻松地从您的数据中获取更多价值,并且它们是演绎数据库的重要一步。

在数据的关系模型中,对二元或其他元素没有偏好。我们使用我们需要的东西,但我们希望保持关系简单,因为它们更容易操作和组合。

我建议Lex de Haan和Toon Koppelaars Applied Mathematics for Database Professionals深入探讨这个话题。

答案 1 :(得分:0)

在回答你的评论时,你想询问关系而不是关系,我决定添加第二个答案,重点关注实体关系模型中定义的关系:

N-ary关系描述任何arity的关系 - 二元,三元等。这个关系描述了关系 [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模型中的关系表示为表(或ER关系中的关系关系),其中主键是一个复合键,由与基数高于1的基数关系中涉及的每个实体集的键组成。可以有属性(非素数列),这些属性不计入关系的arity。

与常见决定因素的关系通常在关系数据库设计中被非规范化。在1对多二进制关系的情况下,这意味着在与许多方面的实体相同的表中记录关系。例如,可以通过在员工表中包含employee_id -> manager_id来记录员工与其经理(manager_id)之间的关系。

在网络数据模型中,只允许二进制关系。将ER模型转换为网络模型需要通过n> 1来实现n元关系。 2具有n个二元关系的实体。这还需要引入代理标识符和唯一约束,这些约束将由ER模型中的复合键处理。

关于比较利弊的问题 - 在ER中,就像在关系中一样,我们使用适合的任何arity关系来建模我们的数据。

如果您想了解基于n元关系的数据模型与仅基于二元关系的数据模型的比较,我建议您搜索access path independence

[1] 我更喜欢计算角色,因为它与关系模型中的术语一致。