两个实体之间可以发生多重关系吗?

Can multiple relationship occur between two entities?

我有以下两个实体,其中一个人的地址保存在一个单独的 table 中,因为一个人可以有多个地址。 然而,邮寄地址是地址 table 中存储的多个地址之一,需要亲自提交 table。 可以存在以下关系吗?

我不确定您为什么将 person_id 作为地址的 fk,但这看起来不正确。有很多正确的方法可以对此进行建模,最适合您的方法将取决于您的特定情况 - 但有几个选项是:

  1. 如果您知道所有类型的地址,则可以向该人添加多个地址 fk 字段,例如帐单地址、送货地址等。这使得查询快速简单但不灵活:将来添加新的地址类型实施起来相对复杂
  2. 添加一个交集 table 与 fks for person and address 和 address type 字段。这在查询方面有轻微的开销,但如果非常灵活则具有优势:添加新的地址类型是微不足道的

您的直接问题的答案是“是”。但是,您不能 声明 仅使用 create table 的模型,因为:

  • 声明外键 address.person_id 要求 person table 已经存在。
  • 声明外键 person.mailing_address 要求 address table 已经存在。

因此,要实现该模型,您需要在创建两个 table 之后使用 alter table 添加一个或两个约束。

这是您想要的模型吗?地址的一个特征是多个人可以拥有相同的地址。您的模型不允许这样做。要处理这个问题,您通常需要 three tables:

  • Person
  • Address
  • PersonAddress

第三个 table 每 person/address 对各占一行。它还可以包含其他信息,例如:

  • 类型(“邮寄”与其他类型)
  • 生效日期和结束日期。
  • 也许还有其他信息。

如果要保证这种模型中“邮寄”地址的唯一性,许多数据库都支持过滤唯一索引,以确保没有重复的邮寄地址。