修改数据库 table 个最佳实践

Modify database table best practices

正如我的标题所述,我很好奇在 (mysql) 数据库中修改现有 table 的最佳做法。在我的场景中,我有一个已经充满数据的 table 并且有一个名为 product_id 的列,该列当前是 table 的主键。我正在开发一项功能,我发现 product_id 不一定需要是唯一的或主键,因为我想允许同一产品有多个记录。数据库设计还不是我的强项,但在我看来我想做的是 运行 product_id 列的命令 DROP PRIMARY KEY,然后添加一个名为 id 并将其设为新的主键。然后,我需要为每条记录更新 id 列,使其成为有效的主键。就数据库设计而言,这是执行此操作的最佳做​​法还是使用更新的结构创建新的 table 并将当前记录复制到新的 table 中更好?

编辑: 有关我正在开发的功能的更多信息。这些产品是书籍,我正在尝试允许预览这些书籍的多个部分。为此,我存储了可以预览的页面范围。现在,只允许一个页面范围,这就是产品 ID 不再需要唯一的原因。

主键始终是唯一的。

为什么不希望它是独一无二的?听起来您正在将密钥暴露在数据库之外,PK 以某种方式可见,并且某些用户认为它的行为应该有所不同。如果是这种情况,那么这是一个非常糟糕的做法。

这就是臭名昭著的典型案例"natural keys"。它们是一场等待发生的灾难;我不喜欢大定时炸弹。一段时间以来,我一直强烈反对他们。他们在学校教他们很好,这样你就知道在现实世界中不要使用什么

现在是解决方案。如果product_id暴露了,那根本就不应该是PK。解决方案?

  • 创建一个新列(id 也许?),它是内部的、唯一的、不向用户公开的,同时保持 product_id。这个新列最初可能与 product_id 具有完全相同的值。
  • 将所有 FK 引用从其他表更改为新的 id 列。
  • 然后,从product_id中删除PK约束并用它做任何你想做的事情。
  • 将 PK 约束添加到新的 id 列。