【问题标题】:Multiple primary keys in table表中有多个主键
【发布时间】:2014-07-25 01:32:56
【问题描述】:

我的一个朋友刚刚给我发了一张他的新 api 数据库设计的图片。

当我看到它时,我注意到他的用户表有三个主 id。

我实际上认为这是不可能的。

这让我开始思考……这样做可以吗?只要每一列都是唯一的?

我似乎找不到不这样做的理由,除非 id 不是主要的,如果有多个。

这是一个糟糕的数据库设计吗?为什么?

【问题讨论】:

  • 你只能有一个主键,但这个主键可以由一、二、三、...列组成。对于购物网站,bag 表有一个包含 3 列(可能更多)的主键。 (买家 ID,产品 ID,产品数量) 示例:您在包中添加了 2 个 Iphone……但经过思考,您决定要 3 个或更多。如果您忘记添加金额,您必须传递 3 个不同的订单,因为 iphone 的 id 是相同的,并且您不能在不同的行中拥有相同的 id,这就是我们添加 Amout 的原因。当您在包中添加其他 Iphone 时,只需增加此值...
  • 您不会为此使用主键。那是外国人我真的希望您不要将订单列的数量作为主键
  • 我只是给你一个例子......只是说:主键可以像(column1,column2,column3),其中column1,column2,column3是你表中的3个不同的列但是你是对的,我做错了,我们不能添加数量作为主要,只是 id_buyer 和 id_product...
  • 我明白你在说什么,只是看起来不合逻辑:/
  • “主键”在关系理论中没有任何作用。这是 SQL 中保留的早期混淆。重要的是候选键。并且可以有任何数量。我最喜欢的例子是元素周期表。每个元素都有一个唯一的名称、符号和原子序数(质子)。三个候选键。

标签: mysql database database-design innodb


【解决方案1】:

每个表应该只指定一列作为主键,并且大多数数据库不允许使用多个主键。请注意,PRIMARY KEY 可以跨越多个列。将 UNIQUE 用于需要唯一值的其他列。 UNIQUE 键也可用于外键关系。

【讨论】:

  • 谢谢,这就是我正在寻找的答案^^
  • 很高兴为您提供帮助。支持许多不同数据库和版本的便捷测试工具称为 SQLFiddle。
猜你喜欢
  • 2019-04-21
  • 1970-01-01
  • 2014-01-11
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多