【问题标题】:DatabaseTheory: Difference between 'many to one' and 'many to onlyOne' relationship数据库理论:“多对一”和“多对一”关系之间的区别
【发布时间】:2013-06-12 13:46:50
【问题描述】:

我一直在网上搜索,但找不到任何有用的信息来帮助区分上述关系,而且它们在我看来都是一样的。我不确定它是否被另一个术语所指,但关系的“onlyOne”端通常在 er 图中用弯曲箭头标记。

真的很感激有人举了一个小例子来帮助区分两者。

【问题讨论】:

  • 但是“多对OnlyOne”关系呢,它们与“多对一”有什么不同,在任何地方都找不到有关此的任何信息

标签: entity-relationship database-theory


【解决方案1】:

这是关于最小基数,也称为参与。参与指示对于给定实体集的所有实体出现是否必须参与关系。换句话说,参与是强制性的还是可选的?

在这种情况下,圆形/弯曲箭头表示强制参与,因此每个实体出现必须参与关系。

示例: 实体 Employee 和 Department,由关系 WorksFor 链接,这是一对多的关系(一个 Employee 为一个部门工作,一个部门可以有多个员工在其中工作)。假设每个 Employee 必须与至少一个 Department 相关联,因此参与是强制性的,您可以将其基数定义为“one and only one”(或“exactly one”)。

注意:那里有许多 ER 符号(Chen 的、UML 等等),因此圆形/弯曲箭头并不是表达强制参与的唯一方式。重要的方面是与符号一致。参见例如http://en.wikipedia.org/wiki/Entity%E2%80%93relationship_model#Diagramming_conventions

【讨论】:

    【解决方案2】:

    一对多的例子如下: 客户表具有以下字段 客户 ID、客户名称

    订单表具有以下字段 orderId、customerId、金额

    Customers 和 Orders 表之间的关系是一对多的,即 1 个客户可以下许多订单。

    多对多示例如下: 带有字段的问题表(如在 stackoverflow 中) questionId,问题

    带有字段的标签表 tagId、tagType(数据库、C++等)

    这是多对多关系的一个例子,即一个问题可以有很多标签,一个标签可以属于很多问题。您需要一个单独的表来维护此映射。

    即 标签问题映射 tagId, questionId

    【讨论】:

    • 但是“多对OnlyOne”关系呢,它们与“多对一”有什么不同,在任何地方都找不到有关此的任何信息
    猜你喜欢
    • 1970-01-01
    • 2011-06-03
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    相关资源
    最近更新 更多