我是数据库的新手,我只是在我的数据库中遇到了很多对很多数据关系。例如 我有一系列活动,主键为Activity_Id,单个活动可以有多个会话,因为它是一对多的关系,
但是会议还可以有多个场地,场地可以在多个会话中使用,会话和场地之间有多对多的关系, 我如何将某个会话和会话的场地分开,作为对APi的响应发送? 提前致谢
答案 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方法