多对多的数据库架构

时间:2018-05-31 14:58:56

标签: php mysql json

我是数据库的新手,我只是在我的数据库中遇到了很多对很多数据关系。例如 我有一系列活动,主键为Activity_Id,单个活动可以有多个会话,因为它是一对多的关系,

但是会议还可以有多个场地,场地可以在多个会话中使用,会话和场地之间有多对多的关系, 我如何将某个会话和会话的场地分开,作为对APi的响应发送? 提前致谢

2 个答案:

答案 0 :(得分:0)

假设你有:

session_table: id, name
venue_table: id, name

现在,为了在这些表之间建立多对多关系,您需要创建第三个数据透视表:

session_venue_table: session_table_id, venue_table_id

然后,从您将要参加的会议中获取会话:

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'
)

我希望它有所帮助。

答案 1 :(得分:0)

我认为你的表有这种结构。

活动:

Activity_Id | SomeActivityData
------------+-----------------
 1          | blabla
 2          | example
 3          | some things
 4          | nice data

地点:

Venue_Id    | SomeVenueData
------------+--------------
 1          | hello
 2          | another example
 3          | anything
 4          | cool data

活动有1个或更多(n)个场地,场地有1个或更多(n)个活动。

这意味着关系可以用这种方式表示:

  

[活动](1,n) - > (活动与场地之间的关系)< - (1,n)[地点]

您可以构建第三个表来引用关系中的ID

ActivityVenue:

Activity_Id | Venue_Id
------------+---------

表ActivityVenue的主键是来自表Activity和Venue

外键组合

让我们说活动1和3属于场地1,场地2和3属于活动2,活动4和场地4属于关系。

表ActivityVenue将如下所示:

Activity_Id | Venue_Id
------------+---------
 1          | 1
 3          | 1
 2          | 2
 2          | 3
 4          | 4

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

编辑:

强烈建议您查看Merise方法