首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多到多数据库体系结构

多到多数据库体系结构
EN

Stack Overflow用户
提问于 2018-05-31 14:58:56
回答 2查看 83关注 0票数 1

我刚开始使用数据库,只是在我的数据库中被许多到许多数据关系所困扰。例如,我有一个以主键作为Activity_Id的活动数组,单个活动可以有多个会话,因为它是一对多的关系,

但是,一个会议也可以有多个地点,一个地点也可以在多个会议中使用,它是一个会议和地点之间的多到多的关系,我怎么能把某个会议的场地和会议的地点分开,以便在一个APi上作为响应发送一个地点?提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 15:07:19

让我们说你有:

代码语言:javascript
复制
session_table: id, name
venue_table: id, name

现在,为了在这些表之间建立许多到多个关系,您需要创建第三个枢轴表:

代码语言:javascript
复制
session_venue_table: session_table_id, venue_table_id

然后,要从一个地点获得会议,您将做:

代码语言:javascript
复制
SELECT s.* 
FROM session_table s
WHERE s.id in (
    SELECT pivot.session_table_id as id 
    FROM session_venue_table pivot
    WHERE pivot.venue_id = 'selectedVenueId'
)

希望能帮上忙。

票数 0
EN

Stack Overflow用户

发布于 2018-05-31 15:22:59

我想你们的桌子应该有这种结构。

活动:

代码语言:javascript
复制
Activity_Id | SomeActivityData
------------+-----------------
 1          | blabla
 2          | example
 3          | some things
 4          | nice data

地点:

代码语言:javascript
复制
Venue_Id    | SomeVenueData
------------+--------------
 1          | hello
 2          | another example
 3          | anything
 4          | cool data

一个活动有一个或更多的地点和一个地点有一个或更多的活动。

这意味着这种关系可以通过这样的方式来表达:

Activity -> (活动与场地的关系) <- (1,n)场地

您可以构建第三个表,用于引用关系中的ids。

ActivityVenue:

代码语言:javascript
复制
Activity_Id | Venue_Id
------------+---------

表ActivityVenue的主键是组合,它既包括外键,也包括表Activity和场地。

假设活动1和3属于场地1,场地2和3属于活动2,活动4和地点4是相关的。

表ActivityVenue将如下所示:

代码语言:javascript
复制
Activity_Id | Venue_Id
------------+---------
 1          | 1
 3          | 1
 2          | 2
 2          | 3
 4          | 4

如果设置适当的约束,就不会有重复的键。

编辑:

I强烈建议您看看Merise方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50627270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档