这是一个 SQL 设计问题。首先,设置。我有三张桌子:
- A,根据对链接服务器的查询自动填充。此表中的数据不能更改;
- B,只有十几行,包含 As 集合的名称;
- AtoB,这是将 As 组织成命名集合的映射表,两列都有外键;
例如,A 包含:
- 长颈鹿
- 猫头鹰
- 老虎
B 包含:
- 西雅图动物园
- 圣何塞动物园
AtoB 包含:
1,1(西雅图的长颈鹿)
2,1(西雅图的猫头鹰)
3,1(西雅图的老虎)
2,2(圣何塞的猫头鹰)
现在,问题:
我被要求在其中一些集合中包含 A 中没有的项目。因此,我创建了一个表 C,它具有与 A 相同的标识和名称列,并填充它。与前面的示例保持一致,假设 C 包含:
- 龙
问题是,如何在 AtoB 中包含来自 C 的项目?如果我需要在西雅图动物园里放一条龙怎么办?
天真的我的第一直觉是创建一个包含 A 和 C 联合的视图 V,并将 AtoB 修改为 VtoB。这就是我的天真得到回报的地方:无法为视图创建外键。
我怀疑有一种标准的、正确的方法可以将一个或多个 A 或 C 与 B 联系起来。