【问题标题】:Confusion with primary key与主键混淆
【发布时间】:2012-01-11 06:08:07
【问题描述】:

我是设计数据库的新手。也许这是一个愚蠢的问题,所以请原谅我。所以问题是我正在为用户设计数据库。用户填写注册信息后,他将获得唯一的收据编号。所以我的问题是因为收据没有。是唯一的我可以将它用作用户表中的主键还是我应该坚持将用户ID分配给表中的每一行并将用户ID用作主键的标准方法?

【问题讨论】:

  • 这些收据是什么?
  • 用户是否通过收据号识别?如:他会保留这个号码直到时间结束,并且这个号码永远不会用于识别此用户以外的任何目的?如果是,请继续。如果不是,请使用满足这些要求的单独用户 ID。
  • 就像用户填写信息时,唯一的收据号会发送到用户的电子邮件中。并使用该收据编号,他可以查看他的订单状态。

标签: sql database database-design primary-key


【解决方案1】:

一张表可以有多个键。如果收据编号是唯一的,并且您希望 DBMS 强制执行对该属性的键依赖性作为数据完整性约束,那么是的,您应该将其设为键(通过 PRIMARY KEY 或 UNIQUE 约束或您的 DBMS 的任何机制实现唯一性提供)。

将任何一个键指定为“主”键并不是特别重要 - 或者至少它只是与您希望的一样重要。真正重要的是您选择的全套密钥。任何密钥的要求都是唯一性和不可约性。选择密钥的合理标准还有:熟悉度、简单性和稳定性

【讨论】:

  • 也许还需要补充一点,通常情况下,代理项在熟悉度标准上的得分非常接近于零,而非代理项在稳定性标准上的得分可能很差。
【解决方案2】:

如果您的收据编号只包含整数,那么您可以将您的收据-无字段设置为自动递增编号,

【讨论】:

  • 收据编号为字母数字,可以是 8 个字符。
【解决方案3】:

如果您的收据没有。足够复杂 - 使用数字和字符构建,或者长度为 20 位 - 最好使用代理用户 ID

如果receipt No 可以是简单的整数并且可以从DB 生成-最好使用UserId 并将其值分配给ReceiptNo

如果 ReceiptNo 是简单的整数,并且它标识用户 AND 唯一的用户 - 将其用作 PKey。

【讨论】:

  • 奥列格狗,感谢您的快速回复。我认为最好使用自动递增的用户 ID,因为收据编号将是字母数字和 8 个字符。
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
相关资源
最近更新 更多