gpt4 book ai didi

mysql - SQL 多对多关系

转载 作者:行者123 更新时间:2023-11-29 05:18:29 25 4
gpt4 key购买 nike

问题

有没有办法在不使用自动增量器(通常是 ID)的情况下在 3 个表之间建立多对多关系,或者为此需要 ID?

我为什么要问

我有 3 个相关表。由于一对一关系似乎不能直接发生,我做了第 4 个与其他 3 个表建立一对多关系。但是,由于每个表仍然有一个主键,一个值只能在一个表中使用一次,这是我不希望发生的。

我有什么

  • 连接器有多个 Pocket,这些 Pocket 有多个引脚。
  • 第 4 个表是 ConnectorFullInfo Screenshot

最佳答案

不要求表有一个“自动递增器”作为主键。

但是,一个熟悉的模式是在实体表上添加一个代理 ID 列作为主键。 “理想的”主键将是“匿名的”(不携带任何有意义的信息)、“唯一的”(没有重复的值)、“简单的”(单列、简短的简单 native 数据类型)...

关于引入代理键是否是个好主意,存在多种思想流派。我还会注意到,有些人后来因决定使用自然 key 而不是代理 key 而感到焦躁。还有一些人还没有被那个决定烧毁。


在“关联”表(为解决多对多关系而引入的表)的情况下,外键的组合可以用作主键。我经常这样做。

但是,如果关联表本身就是实体表,有自己的属性,我会引入一个代理ID列。举个例子,personclub的关联,一个人可以是多个俱乐部的成员,一个俱乐部可以有多个成员...

club +--< membership >--+ person

当我们开始为membership添加属性时(例如statusdate_joinedoffice_held等。 . 那时 membership 不仅仅是一个关联表;它正在变成一个实体。当我怀疑一个关联实际上是一个实体时,我将添加代理 ID 列。

我将向关联表添加代理 ID 列的另一种情况是当我们想要允许“重复”时,我们想要允许多个关联。在这种情况下,我还将引入代理 ID 列。

关于mysql - SQL 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29379041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com