gpt4 book ai didi

database - 解决多对多关系

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:37 25 4
gpt4 key购买 nike

有没有人有流程或方法来确定如何解除关系数据库中的多对多关系?这是我的场景。我有一组联系人和一组电话号码。每个联系人可以与多个电话号码相关联,每个电话号码可以与多个联系人相关联。

这种情况的一个简单示例是办公室有两名员工 (e1 和 e2)、一条主语音线路 (v1) 和一条私有(private)语音线路 (v2)。 e1 是 CEO,因此他们有自己的私有(private)语音线路 v1,但也可以通过调用主线 v2 联系他们,并询问 CEO。 e2 只是一名员工,只能通过调用 v2 联系到他。

因此,e1 应该与 v1 和 v2 相关。 e2 应该与 v2 有关。相反,v1 应该与 e1 相关,v2 应该与 e1 & e2 相关。

这里的目标是能够运行诸如“e1 可以达到哪些数字”和“v2 可以达到哪些员工”等查询。我知道答案将涉及一个或多个中间表,但我似乎无法确定确切的架构。

最佳答案

查询不需要任何临时表。有一个用于映射的中间表。

numbers_tbl
-----------
nid int
number varchar

employees_tbl
-----------
eid int
name varchar

employee_to_phone_tbl
-----------
eid int
nid int

如何给 Bob 打电话?

select *
from employees_tbl e
inner join employee_to_phone_tbl m
on e.eid = m.eid
inner join numbers_tbl n
on m.nid = n.nid
where e.name = 'Bob'

如果我调用这个号码,谁会接听电话?

select *
from numbers_tbl n
inner join employee_to_phone_tbl m
on m.nid = n.nid
inner join employees_tbl e
on e.eid = m.eid
where n.number = '555-5555'

关于database - 解决多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/497395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com