【发布时间】:2016-07-05 14:23:35
【问题描述】:
我有一张这样的桌子:
// cookies
+----+---------+-------------------+------------+
| id | user_id | token | expire |
+----+---------+-------------------+------------+
| 1 | 32423 | dki3j4rf9u3e40... | 1467586386 |
| 2 | 65734 | erhj5473fv34gv... | 1467586521 |
| 3 | 21432 | 8u34ijf34t43gf... | 1467586640 |
+----+---------+-------------------+------------+
我想了几天。我想我不需要id 列。目前 id 列是 PK 并且我在 token 列上有一个唯一索引,以使其既独特又快速搜索。
现在我想知道,我可以从表中删除id 列并将token 列作为PK 吗?这正常吗?
说实话,到目前为止,我从来没有创建一个没有id 列的表(一直是 PK),所以我选择 token 列作为 PK 对我来说很奇怪.
【问题讨论】:
-
你目前的结构没问题。
-
@GordonLinoff 在我目前的结构中,
id是 PK。可以吗? -
谷歌“自然键与代理键”。两者各有优缺点,哪个更适合您的系统取决于您的具体要求。
-
如果自然键 (Id) 或代理键 (token) 都没有用作外键,那么使用代理键是一个有效的选项。它不会对性能产生太大影响。实际上,
select *可能会稍微快一点,只有一个代理键作为 PK(要选择的数据更少)。自然键的好处也是直观的,因为更容易看到记录的插入顺序(如果没有创建时间戳)。
标签: mysql sql database-design