我有套设置用户表,它有以下栏目:SQL:主键还是不主键?
UserID INT
Set VARCHAR(50)
Key VARCHAR(50)
Value NVARCHAR(MAX)
TimeStamp DATETIME
用户名与SET键和键一起是唯一的。因此,特定用户不能在特定的一组设置中拥有两个相同的密钥。这些设置是通过set来检索的,所以如果用户请求某个特定集合中的某个特定的密钥,那么整个集合将被下载,以便下一次需要来自同一集合的密钥时,它不必访问数据库。
我应该在所有三列(userid,set和key)上创建一个主键还是应该创建一个具有主键的额外字段(例如一个名为SettingID的自动增量整数,我想是坏主意),或者不创建主键,只创建一个唯一的索引?
----- ----- UPDATE
只是为了澄清一些事情:这是行表的末端,这是无论如何也不能加入。用户ID是用户表的FK。 Set不是FK。它几乎是我的GUI的帮助表。举个例子:用户第一次访问网站的某些部分时,可以找到一个帮助气球,如果他们想要的话,他们可以关闭它。一旦他们点击它,我会添加一些设置到“GettingStarted”设置,它将声明他们helpballoon X已被禁用。下次用户进入同一页面时,该设置将声明帮助气球X不应再显示。
你说这是一个“设置”表。我们可以假设这张表是一个“行尾”表,并且你在这个表中的关键字不会被用作任何其他表中的外键? – Jonathan 2009-05-06 08:39:45
小心:您在概念上仍然有一个连接:与GUI的连接。因此,拥有自然主键的风险可能仍然适用。 – 2009-12-22 07:52:20