两个实体之间可以发生多重关系吗?
Can multiple relationship occur between two entities?
我有以下两个实体,其中一个人的地址保存在一个单独的 table 中,因为一个人可以有多个地址。
然而,邮寄地址是地址 table 中存储的多个地址之一,需要亲自提交 table。
可以存在以下关系吗?
我不确定您为什么将 person_id 作为地址的 fk,但这看起来不正确。有很多正确的方法可以对此进行建模,最适合您的方法将取决于您的特定情况 - 但有几个选项是:
- 如果您知道所有类型的地址,则可以向该人添加多个地址 fk 字段,例如帐单地址、送货地址等。这使得查询快速简单但不灵活:将来添加新的地址类型实施起来相对复杂
- 添加一个交集 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 对各占一行。它还可以包含其他信息,例如:
- 类型(“邮寄”与其他类型)
- 生效日期和结束日期。
- 也许还有其他信息。
如果要保证这种模型中“邮寄”地址的唯一性,许多数据库都支持过滤唯一索引,以确保没有重复的邮寄地址。
我有以下两个实体,其中一个人的地址保存在一个单独的 table 中,因为一个人可以有多个地址。 然而,邮寄地址是地址 table 中存储的多个地址之一,需要亲自提交 table。 可以存在以下关系吗?
我不确定您为什么将 person_id 作为地址的 fk,但这看起来不正确。有很多正确的方法可以对此进行建模,最适合您的方法将取决于您的特定情况 - 但有几个选项是:
- 如果您知道所有类型的地址,则可以向该人添加多个地址 fk 字段,例如帐单地址、送货地址等。这使得查询快速简单但不灵活:将来添加新的地址类型实施起来相对复杂
- 添加一个交集 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 对各占一行。它还可以包含其他信息,例如:
- 类型(“邮寄”与其他类型)
- 生效日期和结束日期。
- 也许还有其他信息。
如果要保证这种模型中“邮寄”地址的唯一性,许多数据库都支持过滤唯一索引,以确保没有重复的邮寄地址。