mysql - 处理日期/时间时的复合主键或代理

标签 mysql foreign-keys primary-key composite-primary-key

我看到了很多关于此的讨论。我只是寻求您对此的建议。基本上,我使用的是 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 条更新。问题是:

  1. 对于更新表,是否可以同时设置uid日期 作为复合主键,其中 uid 引用来自 usersuid
  2. 或者最好在 updates 中创建另一列,该列自动递增并将用作主键(而 uid 将是 users 中的 uid 的 FK >)?

最佳答案

您的想法(在 1. 下)基于这样的假设:用户永远在一秒内无法执行两次“更新”。这是非常糟糕的设计。您永远不知道将来会实现什么功能,但很有可能有一天 1 次点击会导致 2 次操作,因此此表中会有 2 行。

我说引用“更新”是因为我将其更多地视为日志表。谁知道您将来可能想在某个地方记录什么。

至于不寻常的主键:不要这样做,它几乎总是会再次出现在您的面前,并且您必须做大量的工作来添加适当的自动增量键。

关于mysql - 处理日期/时间时的复合主键或代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8844677/

相关文章:

mysql - SELECT 标签和项目的关联

具有整数列的 Laravel 关系数组

Windows 上的 MySQL : Using SHA-2

mySql 使用行的 sum() 进行更新

sql - 如何将 UPDATE CASCADE 添加到 Rails-Postgres 迁移中?

Django:Django 管理中具有唯一外键的用户配置文件

ruby-on-rails - Rails has_many :through --> Should I keep a primary key column?

c# - .net 数据集主键 - 强制唯一性?

database - 将主键映射为数据库中的外键

php - 使用 mysql 查询检查日期是否在给定日期范围内