对 SQL 关系感到困惑

Confused on SQL Relationships

我对 SQL 关系感到困惑,特别是一对一和一对多关系。我读过很多文章,比如 this and this

例如,下面是这些文章和其他文章中的一些陈述

  1. customer表和address表是一对一的关系,因为一个地址属于一个customer

  2. customer表和order表是一对多的关系,因为一个customer可以下很多单。

  3. customer 和 contactData 表是一对一的,因为一个 contactData 属于一个客户

是的,没错,但现在接受我的论点。

所有这些,我很困惑。有人可以给我一个关于如何找到关系的明确定义吗?

加密狗。你在对称地看待这个主题时犯了一个错误。关系被认为是单向的,这就是为什么你感到困惑。

让我们以这种 Customer <-> Order 关系为例。正如您观察到的,customer -> orderorder -> customer 完全不同。他们实际上是独立的,无论它多么奇怪。这是因为在实际代码中,您实际上从未同时处理两个对象,而不是从两个对象之一的角度来看 "acting"。例如。您从数据库中获取了订单对象,然后您才是发出此订单的客户。或者你有客户对象,你想检查他的订单是什么。

如您所见,这是非常单向的(我们称关系为单向或双向)。你有对象 X,你想 "enhance" 通过将它与另一个 table,对象 Y 结合来了解它。所以它是 X->Y。或者 Y->X。但实际上从来没有 X<->Y。这就是为什么 你总是必须把关系看作是独立的

除此之外,你是对的,通常是这样,一种关系是一对一,另一种是一对多.

点 2 显然是 one to many 因为一个 customer 可以有多个 orders 但每个 order 都属于一个 customer.

你必须双向阅读关系。

假设这种关系是 one to one。每次下新订单时都需要创建一个新的客户帐户。

第3点可能是设计问题。如果你想允许多个 contactData 就没有理由保留它 one to one.

The relationship between customer and order tables are one to many, that is because one customer can make many orders.

这应该更好地阅读

  • 一个顾客可以下很多个订单
  • 一个订单属于一个位客户

所以表之间是一对多关系。

customer and contactData tables are one to one because one contactData is belong to one customer

这应该更好地阅读

  • 一个联系人数据属于一个个客户
  • 一个客户只能有一个个联系人数据

所以表之间是一对一关系。

是的,实际上某个公司的客户可能有多个联系人,但在他们谈论的这个特定数据库中,定义了一个客户只能有一个联系人数据。

编辑:我应该补充一点,你可以说 "there is a one to many relationship between tables a and b",它没有指定哪个是哪个,所以你可以更准确地说,说 "there is a one to many relationship from table a to b" 或 "there is a many to one relationship from table b to a"。一对一,你当然没有这样的问题。 (除此之外,还有更精确的定义,例如 "one to one or zero" 等,您可以在其中指定是否允许零记录,例如没有联系数据的人。)

你的 "point 2" 得到了 Rav 的回复。

"point 3":我在您的第一个链接中找到了 "Addresses" table 的一对一示例。在此示例中,一位客户只能有一个地址。因此,如果您的客户可以拥有多个客户,那么您将需要一对多(如示例订单中所示)。