我看到了很多关于此的讨论。我只是寻求您对此的建议。基本上,我使用的是 PHP 和 MySQL。我有一个 users
表,其中包含:
users
------------------------------
uid(pk) | username | password
------------------------------
12 | user1 | hashedpw
------------------------------
另一个存储用户更新的表
updates
--------------------------------------------
uid | date | content
--------------------------------------------
12 | 2011-11-17 08:21:01 | updated profile
12 | 2011-11-17 11:42:01 | created group
--------------------------------------------
用户的个人资料页面将显示用户最近的 5 条更新。问题是:
- 对于
更新
表,是否可以同时设置uid和日期 作为复合主键,其中 uid 引用来自users
uid - 或者最好在
updates
中创建另一列,该列自动递增并将用作主键(而 uid 将是users
中的 uid 的 FK >)?
最佳答案
您的想法(在 1. 下)基于这样的假设:用户永远在一秒内无法执行两次“更新”。这是非常糟糕的设计。您永远不知道将来会实现什么功能,但很有可能有一天 1 次点击会导致 2 次操作,因此此表中会有 2 行。
我说引用“更新”是因为我将其更多地视为日志表。谁知道您将来可能想在某个地方记录什么。
至于不寻常的主键:不要这样做,它几乎总是会再次出现在您的面前,并且您必须做大量的工作来添加适当的自动增量键。
关于mysql - 处理日期/时间时的复合主键或代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8844677/