SQL多表共有列关联方案:客户、员工与距离表参照完整性约束配置
这是我的第一篇帖子,若相关问题已有解答请见谅。目前已有同类问题讨论,但均未覆盖我遇到的需求。
我现有3张表:
- Clients表(主键PK:
ClientId) - Staff表(主键PK:
StaffId)
二者存储的业务数据、字段数量差异很大,但都包含VARCHAR类型的Location字段用于存储经纬度位置信息;第三张是Distances表,我需要在其中存储任意两个地点之间的距离,每个地点可以是客户也可以是员工。
我的核心目标是:可通过典型的可视化关系编辑器完成表关系搭建,建立强制参照完整性的约束。
最初我设想Distances表包含Place1Id、Place2Id、Dist三个字段,其中Place1Id和Place2Id对应关联的客户或员工表主键,但该方案无法区分ID对应的是客户还是员工。
我也曾考虑在Distances表新增PlaceTypeId字段,配套建立PlaceTypes表存储PlaceTypeId(1对应客户、2对应员工)和对应的VARCHAR类型名称字段,但该方案仍无法建立有效的关联约束,因为数据库无法识别1和2分别对应哪张业务表。
请问是否有简洁优雅的方案可实现该需求(足够简单,可通过可视化关系编辑器完成配置)?还是必须采用在Clients表每行存储固定值1的PlaceTypeId、Staff表每行存储固定值2的PlaceTypeId,再通过PlaceTypeId和业务主键组合成唯一键的方案?(而且我认为整数类型主键直接相加无法实现该组合唯一键的效果)
若有其他开发者遇到同类需求,可参考如下经过验证的可行方案:
在Distances表中新增ClientFromId、ClientToId、StaffFromId、StaffToId四个字段,即可覆盖客户-客户、客户-员工、员工-客户、员工-员工四类距离存储场景,四个字段中每次仅会填充2个。
注意:地点1到地点2的距离与反向距离一致,但如果起止点属于同一张业务表,仍需要两个对应的客户ID或员工ID字段来实现关联。
内容的提问来源于stack exchange,提问作者Snipes

