【问题标题】:How to create an n-n relation on the same table with composite primary key in MySQL如何在 MySQL 中使用复合主键在同一张表上创建 n-n 关系
【发布时间】:2021-01-26 09:57:53
【问题描述】:

如果两个事件是可组合的,我想存储。 这是一个 n 到 n 的关系,所以我需要一个带有这些约束的数据透视表:

  • PK(event_1, event_2) = PK(event_2, event_1)
  • event_1 是对表事件中 id 的引用
  • event_2 是对表事件中 id 的引用

我试图用这个查询创建我的表:

   event_id_1 INT UNSIGNED,
   event_id_2 INT UNSIGNED,
   cumulative_place INT,
   PRIMARY KEY(event_id_1,event_id_2),
   FOREIGN KEY(event_id_1) 
       REFERENCES events(id)
       ON DELETE CASCADE,
   FOREIGN KEY(event_id_2) 
       REFERENCES events(id)
       ON DELETE CASCADE
);

关注 MySQL Documentation

我对此有一些疑问:

  1. 它是否针对搜索查询进行了优化,例如,如果我想要所有可与 event1 组合的事件,无论 event1 位于第一列还是第二列?
  2. 我是否需要手动管理 INSERT 和 UPDATE 或 MySQL 的主键来完成这项工作?例如,我可以只插入 (event1, event2) 主键的累积位置编号,如果行存储为 (event2, event1) 这也可以。

【问题讨论】:

    标签: mysql composite-primary-key


    【解决方案1】:

    排序。

    INSERT ...
        VALUES (
            LEAST("e1", "e2"),
            GREATEST("e1", "e2"),
            ...)
    

    同样,在进行查找时对对进行排序。这样您就有 1 行,而不是 2 行,而且您不必同时查找两个订单。

    【讨论】:

      猜你喜欢
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2014-07-08
      • 2018-01-31
      • 1970-01-01
      • 2019-10-05
      相关资源
      最近更新 更多