在密钥重复和使用主键的位置存储密钥值

时间:2014-01-30 14:33:38

标签: mysql database-normalization

我处于这样一种情况:我必须在表格中存储key -> value对,表示已投票选定某些产品的用户。

UserId    ProductID
1         2345
1         1786
6         657
2         1254
1         2187

正如您所看到的那样userId不断重复,productId也是如此。我想知道什么是表示这些数据的最佳方式。此处还需要使用主键。我搜索了很多,但无法找到关于我的问题的确切规范。任何帮助,将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

如果您想强制某个用户最多只能投票给定一个产品一次,请在两列上创建一个唯一约束:

ALTER TABLE mytable ADD UNIQUE INDEX (UserId, ProductID);

虽然您可以将这两个列一起用作键,但是如果您定义一个单独的,通常是自动增量的键列,则应用程序代码通常更简单,但执行此操作的决定取决于您使用的应用程序代码语言/库

如果你有任何表持有对该表的外键引用,并且你打算使用引用完整性,那么如果你创建一个单独的键列,这些表和用于定义关系的SQL也会更简单 - 你只是结束了多个列而不是一个列。