Mysql 简单的多对多关系

Mysql 简单的多对多关系,mysql,sql,Mysql,Sql,抱歉,我没睡,所以我想澄清一下我脑子里的事情 一个团队可以有许多用户,但一个用户可以是多个团队的成员 这是一种多对多的关系吗?如果是这样,我是否需要第三个表在MySQL中加入它们?是。你几乎肯定需要第三张“关系”表 最简单的选择是使用一个关系表来指示团队中的用户 团队==关系===用户 要查询团队中的用户,请在所有UserSid中搜索rel以查找团队ID,反之亦然,以检查用户所属的团队。是的,这是多对多关系的一个示例 这里,用户是一个实体团队是另一个实体。这两个实体都参与了成员关系 因此,在将其

抱歉,我没睡,所以我想澄清一下我脑子里的事情

一个团队可以有许多用户,但一个用户可以是多个团队的成员


这是一种多对多的关系吗?如果是这样,我是否需要第三个表在MySQL中加入它们?

是。你几乎肯定需要第三张“关系”表

最简单的选择是使用一个关系表来指示团队中的用户

团队==关系===用户


要查询团队中的用户,请在所有UserSid中搜索rel以查找团队ID,反之亦然,以检查用户所属的团队。

是的,这是多对多关系的一个示例

这里,
用户
是一个实体<代码>团队是另一个实体。这两个实体都参与了
成员关系

因此,在将其转换为关系表时;您必须创建3个表

一个用于
用户
,另一个用于
团队
,另一个用于
成员关系
(您可以为该关系指定任何有意义的名称),该关系将具有来自表用户和团队(如userid和teamid)的外键

多对多关系 多对多关系存在,您正确地指出,它的工作方式与多对一/一对多不同。所以这根本不是一个愚蠢的问题

大多数情况下,您将需要添加作为此关系特征的额外字段。因为你想得到一些关于你的人际关系本身的信息

您是否需要额外的信息(以及额外的字段)将决定您是否需要第三部分表

现实生活中的例子:男人和女人 假设你有男桌和女桌。一个男人在一生中可以和很多女人约会,而且是互惠的。所以,你有一个典型的多对多关系。你不用第三张桌子也可以

但是现在,假设你想添加一个信息:对于每一段关系(无论是浪漫的还是数据库意义上的(我一生中从未想过有一天我会说这句话)),你想知道这段关系何时开始,何时结束

然后你需要一张第三部分的桌子

结构 让我们看看我们的实际示例结构是什么样子的

我用默认运行的简化模型编写了这篇文章:

tableName: Man
    fields:
        id:
            type: int
            id: true
        firstName:
            type: string
        dateOfBirth:
            type: datetime
        favSport:
            type: string
        womenHePrefers:
            type: string
    oneToMany:
        relationships:
            target: ManMeetsWoman
            mappedBy: man
            cascade: remove

tableName: Woman
    fields:
        id:
            type: int
            id: true
        firstName:
            type: string
        dateOfBirth:
            type: datetime
        favAuthor:
            type: string
        menShePrefers:
            type: string
    oneToMany:
        relationships:
            target: ManMeetsWoman
            mappedBy: woman
            cascade: remove

tableName: ManMeetsWoman
    fields:
        id:
            type: int
            id: true
        dateOfEncounter:
            type: datetime
        dateOfBreakUp:
            type: datetime
    manyToOne:
        man:
            target: Man
            inversedBy: relationships
        woman:
            target: Woman
            inversedBy: relationships
要点
  • 您的男性和女性表都与您的男性会议女性表有一方关系
  • 您的男士会议女士桌子将有一个 manytone与其他两个表的关系
  • 理想情况下,您将放置级联规则,以确保当从Man表中删除Man时,引用他的关系也将从第三个表中消失
如果你不想要另一张桌子怎么办 然后您必须声明实际的多对多关系

它的工作原理基本相同,但是你不会有任何关于这个男人和这个女人之间存在什么的额外信息,除了是的,他们之间发生了什么。我们不知道什么,不知道什么时候,不知道要多久

为此,您将使用以下方法替换oneToMany和manyToOne:

# Man:
    ManyToMany:
        woman:
            target: Woman

# Woman:
    ManyToMany:
        man:
            target: Man

但是,如果没有好的ORM的支持,它开始变得难以管理。因此,第三部分表通常是最好、最简单的解决方案。此外,它还允许您添加有关关系本身的信息。

关于第一个示例,没有第三个表,您具体如何做到这一点?