【问题标题】:many to many database architecture多对多数据库架构
【发布时间】:2018-05-31 14:58:56
【问题描述】:

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

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

【问题讨论】:

  • 通过创建参考表
  • @Cid 你能详细说明一下吗?举个例子
  • 在 RDBMS 中,没有“多对多”。只有“一对多”。所以食谱--> recipe_ingredient

标签: php mysql json


【解决方案1】:

假设你有:

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

希望对你有帮助。

【讨论】:

  • 很好——但你不会那样做。您通常会使用连接。
  • 当然,我只是想保持简单。
  • JOIN 很简单。
  • 是的,一旦你得到它,一切都很简单。
【解决方案2】:

我假设您的表具有这种结构。

活动:

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

一个 Activity 有 1 个或多个 (n) Venue,一个 Venue 有 1 个或多个 (n) Activity。

这意味着关系可以这样表示:

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

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

活动地点:

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 方法

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 2018-08-10
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多