SQL:使用一个共享连接表来实现多个多对多关系

问题描述 投票:0回答:1

我有这些 sql 模型:相册、集合和照片。相册和收藏集都与照片具有多对多和一对多的关系,并服务于不同的应用目的。为此使用 2 个连接表与只有 1 个如下所示的连接表有何优缺点:

选项 1:PhotoCollectable(相册和收藏合并在同一行):

照片_id 专辑_id 集合_id
1 1 100
2 5

选项 2:PhotoCollectable(相册和收藏单独行):

照片_id 专辑_id 集合_id 类型
1 100 c
1 1 a
2 5 c

假设连接表在建模中不应该有任何其他属性,这里推荐哪个选项(或者我仍然应该做单独的连接表)以及为什么(优点和缺点)?如果这 2 个连接关系确实需要不同的附加属性,您的答案会如何变化?期望某些字段可为空,而其他字段则不取决于类型?

sql database database-design data-modeling software-design
1个回答
0
投票

不要尝试将两种关系放在同一个表中 - 您只会使应用程序逻辑复杂化(例如,您将需要编写更多代码)。

创建 PHOTO_ALBUM_REL 表(每个示例仅包含 1 条记录)

| PHOTO_ID | ALBUM_ID |
| 1        |     1    |

创建 PHOTO_COLLECTION_REL 表(每个示例仅包含 2 条记录)

| PHOTO_ID | COLLECTION_ID |
| 1        | 1             |
| 2        | 5             |

这消除了所有歧义和不必要的类型检查/比较。

© www.soinside.com 2019 - 2024. All rights reserved.