表中的主键

时间:2016-10-20 07:29:07

标签: sql-server database-design composite-primary-key

我的表格USERLIST包含[UserName][AppId],数据就像

UserName  AppId
--------  -----
abc           1
abc          18
abc           2
abc          24
abc          29
abc          30
abc          33
abc           4
abc           5
abc           6
abc           8
xyz           1
xyz          18
xyz           2

我的查询主要在USERNAME

select applist.APPID
      ,applist.APPDESC
      ,applist.APPTHUMB
      ,applist.APPURL
      ,applist.APPTTILE
      ,applist.UNIQUEID
      ,applist.Domain
      ,RANK
from APPLICATIONLIST applist, USERLIST du 
where  du.APPID = applist.APPID 
       and upper(du.USERNAME) = upper(''' +@userName + ''')

我想知道我应该使用什么主键,代理键还是将列作为主键(复合键)?

1 个答案:

答案 0 :(得分:2)

我的想法是制作[AppId,UserName]的复合键。

  • 首先,UserName与AppId无关,因此将始终使用AppId,因此无论如何它都是密钥中的第一列。
  • 创建用户不是一种机械操作,并且当时只发生一次,因此插入速度减慢并不是一个问题。
  • 取决于您对每个应用的用户的估算,随着您使用复合PK增加数据,上面的查询可能会运行得更快。
  • Tony添加:复合键还可以防止重复行,而无需在两个字段上添加其他唯一索引。