我已经看过很多关于此的讨论。我只是在寻求你的建议。基本上,我使用的是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个最新更新。问题是:
updates
表,是否可以同时设置 uid 和 日期 作为复合主键, uid 引用users
updates
中创建另一个自动递增的列,并将其用作主键(而在users
中uid将是FK到uid?)答案 0 :(得分:2)
您的想法(在1.下)基于这样的假设:用户永远不会在一秒内完成两次“更新”。这是非常糟糕的设计。你永远不知道将来会实现什么功能,但有可能在某一天点击会导致2个动作,因此在这个表中有2行。
我说引用了“更新”,因为我更多地将其视为日志记录表。谁知道你将来可能想要记录什么。
对于不寻常的主键:不要这样做,它几乎总是回到你的脸上,你必须做很多工作才能在之后添加一个合适的自动增量键。
答案 1 :(得分:0)
这取决于要求,但第三种可能性是您可以制作密钥(uid,日期,内容)。您仍然可以添加代理键,但在这种情况下,您可能希望实现两个键 - 复合和代理 - 而不仅仅是一个。不要错误地认为你必须做出任何一种选择。
添加代理是否有用取决于它的使用方式 - 除非您需要,否则不要添加代理。在任何情况下,我都会假设是一个引用users表的外键。