Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 与属性和代理键的多对多关系_Mysql_Sql - Fatal编程技术网

Mysql 与属性和代理键的多对多关系

Mysql 与属性和代理键的多对多关系,mysql,sql,Mysql,Sql,我有以下表格: 用户 id INT PK 在DATETIME创建 在DATETIME更新了\u 是布尔值吗 名称VARCHAR 出版商 id INT PK 在DATETIME创建 在DATETIME更新了\u 是布尔值吗 名称VARCHAR 订阅 用户id INT PK,FK 出版者id INT PK,FK 我希望在订阅中有其他属性,例如创建、更新和存档(与所有其他表一样)以及其他字段 我的选择是: 用户id INT PK,FK 出版者id INT PK,FK 在DATETIME创

我有以下表格:

用户

  • id INT PK
  • 在DATETIME创建
  • 在DATETIME更新了\u
  • 是布尔值吗
  • 名称VARCHAR
出版商

  • id INT PK
  • 在DATETIME创建
  • 在DATETIME更新了\u
  • 是布尔值吗
  • 名称VARCHAR
订阅

  • 用户id INT PK,FK
  • 出版者id INT PK,FK
我希望在订阅中有其他属性,例如创建、更新和存档(与所有其他表一样)以及其他字段

我的选择是:

  • 用户id INT PK,FK
  • 出版者id INT PK,FK
  • 在DATETIME创建
  • 在DATETIME更新了\u
  • 是布尔值吗
  • 在日期时间过期

  • id INT PK
  • 用户id INT FK
  • 发布者id INT FK
  • 在DATETIME创建
  • 在DATETIME更新了\u
  • 是布尔值吗
  • 在日期时间过期

使用自动递增键而不是将两个外键都用作主复合键的优缺点是什么?

在多对多关系的映射表中,我通常使用这两个项的复合主键。这种方法的主要优点是,记录作为两者的组合的唯一性是由它们作为主键来实现的。另外,在大多数情况下,单独的自动增量id的存在并没有提供太多的好处,也没有赋予行更多的意义,因此对我来说,它比其他任何东西都更具噪音。这就是说,如果这两个表的映射本身就是一个重要的域实体,在不将其他表连接到它的情况下,有时会使用它,这将是有益的

这种方法的主要缺点是查询可能会更加冗长,并且通常无法直接访问记录,而无需对关系中的其他表进行连接。它还强制唯一性,因此不能同时拥有同一用户和发布者的多个实例


如果订阅是应用程序中的一个重要实体,可以在没有用户或发布者的情况下独立运行,那么您可能希望使用自动增量。此外,如果您需要为用户和发布者的任何组合创建多个记录(看起来您会这样做),那么自动增量方法是正确的选择。

在多对多关系的映射表中,我通常使用两个项的复合主键。这种方法的主要优点是,记录作为两者的组合的唯一性是由它们作为主键来实现的。另外,在大多数情况下,单独的自动增量id的存在并没有提供太多的好处,也没有赋予行更多的意义,因此对我来说,它比其他任何东西都更具噪音。这就是说,如果这两个表的映射本身就是一个重要的域实体,在不将其他表连接到它的情况下,有时会使用它,这将是有益的

这种方法的主要缺点是查询可能会更加冗长,并且通常无法直接访问记录,而无需对关系中的其他表进行连接。它还强制唯一性,因此不能同时拥有同一用户和发布者的多个实例


如果订阅是应用程序中的一个重要实体,可以在没有用户或发布者的情况下独立运行,那么您可能希望使用自动增量。此外,如果您需要为用户和发布者的任何组合创建多个记录(看起来您需要),那么自动增量方法是正确的方法。

对我来说,这主要取决于您将如何访问数据

如果您总是从
用户
发布者
的角度出发,只想获取相关数据,那么额外的主键将非常过时

如果
subscriptions
表本身有大量数据,并且并不总是依赖于用户或发布者的数据才有意义,那么额外的主键访问数据才有意义

所以,如果它是一个传统的链接表,我不认为有理由添加一个单独的主键。
如果你能把它看得更像一个独立的实体——通常如果你能给它一个更有意义和独立的名字——它与
用户和
发布者有1:m的关系,那么一个额外的主键就有意义了。

对我来说,这主要取决于你如何访问数据

如果您总是从
用户
发布者
的角度出发,只想获取相关数据,那么额外的主键将非常过时

如果
subscriptions
表本身有大量数据,并且并不总是依赖于用户或发布者的数据才有意义,那么额外的主键访问数据才有意义

所以,如果它是一个传统的链接表,我不认为有理由添加一个单独的主键。 如果你能把它看作一个独立的实体——通常是如果你能给它一个更有意义和独立的名字——它与
用户和
发布者有1:m的关系,那么一个额外的主键是有意义的