Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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 我是否应该添加autoinc主键以获得主键?_Mysql_Database Design_Primary Key - Fatal编程技术网

Mysql 我是否应该添加autoinc主键以获得主键?

Mysql 我是否应该添加autoinc主键以获得主键?,mysql,database-design,primary-key,Mysql,Database Design,Primary Key,我有一个需要两个字段的表。一个是外键,另一个不一定是唯一的。除了读过“每一个tabel都需要一个主键”这句话之外,我真的找不到一个拥有主键的理由 编辑: 这里有一些好的想法 为了清楚起见,我将给您一个与我的数据库需求类似的示例 假设有一个包含产品类型、数量、成本和制造商的表格 产品类型并不总是唯一的(例如,MP3播放器),但制造商/产品类型将是唯一的(例如,苹果MP3播放器)。忘记制造商为这个例子制作的各种型号吧。为方便起见,此表有一个自动递增的主键 我给出了一个分值,并记录了搜索、添加到购物车

我有一个需要两个字段的表。一个是外键,另一个不一定是唯一的。除了读过“每一个tabel都需要一个主键”这句话之外,我真的找不到一个拥有主键的理由

编辑:

这里有一些好的想法

为了清楚起见,我将给您一个与我的数据库需求类似的示例

假设有一个包含产品类型、数量、成本和制造商的表格

产品类型并不总是唯一的(例如,MP3播放器),但制造商/产品类型将是唯一的(例如,苹果MP3播放器)。忘记制造商为这个例子制作的各种型号吧。为方便起见,此表有一个自动递增的主键

我给出了一个分值,并记录了搜索、添加到购物车以及购买这些产品以显示在热门商品列表上的频率

我目前的布局方式是在第二个表中,FK指向主表,第二列显示该项目获得的“受欢迎点”总数


这里看到的答案让我想到,也许我应该在我的初级产品表中添加一个“点”列,这样我就可以跟踪到那里。。。但我似乎没有充分规范我的数据库


我的问题是,我目前主要是一个业余爱好者,这样做是为了学习,而没有DBA来告诉我如何设置表,所以我必须学习编码方面和数据库方面。

我不确定另一个领域是什么样子。。但我猜,如果有一个基于FK和其他字段的复合主键,那就可以了。。但是,我也不知道你的确切情况。

我不确定另一个领域是什么样子。。但我猜,如果有一个基于FK和其他字段的复合主键,那就可以了。。但是,我也不知道您的具体情况。

为了具有唯一性和标识符,请在每个表中都有一个主键:)


它还有助于在未来架构发生更改且2个值不再唯一的情况下提高兼容性。另外,内存现在便宜多了,可以随意使用它们作为投资

为了具有唯一性和标识符,请在每个表中都有一个主键:)


它还有助于在未来架构发生更改且2个值不再唯一的情况下提高兼容性。另外,内存现在便宜多了,可以随意使用它们作为投资

这是一种与规范化相关的技术,也是一种很好的实践。由自动递增数字组成的键有许多好处:

  • 您有一个与数据无关的PK
  • 您永远不必更改PK值
  • 每一行将自动具有唯一标识符

这是一种与规范化相关的技术,也是一种很好的实践。由自动递增数字组成的键有许多好处:

  • 您有一个与数据无关的PK
  • 您永远不必更改PK值
  • 每一行将自动具有唯一标识符

    • 我想说,在每个表中都有某种主键是绝对必要的


      有趣的是,Viacom属性的一位DBA曾经告诉我,在MySQL中使用
      INT UNSIGNED
      VARCHAR(n)
      作为主键实际上没有明显区别。这是指一个包含超过6400万行的用户表。我相信n可以相当大(我认为在每个表中都有某种主键是绝对必要的


      有趣的是,Viacom属性的一位DBA曾经告诉我,在MySQL中使用
      INT UNSIGNED
      VARCHAR(n)
      作为主键实际上没有明显区别。这是指一个有6400多万行的用户表。我相信n可以相当大(您不必在每个表上都有主键,但拥有主键被认为是最佳实践,因为它们在规范化关系数据库设计中几乎总是必需的。如果您发现了一堆您认为不需要PKs的表,那么您应该重新查看表的设计/布局。要了解更多关于规范化的信息


      我能想到的两种情况是,您可能不需要或不想在表上使用PK,这将是一个严格用于日志记录的表。(限制写入日志和维护唯一索引的性能降低)在这种情况下,您只需存储用于通过应用程序进行测试的数据。

      您不必在每个表上都有主键,但这被认为是最佳做法,因为它们几乎总是规范化关系数据库设计所必需的。如果您正在查找一组表,您认为不需要那么您应该重新审视表的设计/布局


      我能想到的两种情况是,您可能不需要或不想在表上使用PK,这将是一个严格用于日志记录的表。(限制写入日志和维护唯一索引的性能降低)在这种情况下,您只需存储用于通过应用程序进行测试的数据。

      我会反驳说,如果您没有理由,就不应该添加密钥。如果需要,稍后可以很容易地添加此列。

      我会反驳说,如果您没有理由,就不应该添加密钥。这很简单如果需要,以后添加此列非常容易。

      您必须区分和。自动递增列是后者的一种特殊情况。因此,您的问题有两个:

      <