SQL Server String列作为唯一键

时间:2009-11-20 07:46:47

标签: sql-server database

我正在使用SQL服务器表来保存与URL相关的信息。所以有一个列作为“URL”,其类型是VARCHAR。在应用程序中,我们必须使用此URL作为查询信息的唯一键(我们使用类似SELECT * FROM Table WHERE URL =“www.google.com \ ig”)

将URL用作唯一键是否有任何缺点或已知缺点?

4 个答案:

答案 0 :(得分:4)

通常最好将数值而不是字符串作为表键。请在此处查看有关此主题的讨论:Database Primary Key C# mapping - String or int

至于使用URL,如果你有一些基本规则可以避免两次插入相同的(等效的)URL,它不会给你带来任何问题。也就是说,数据库会将“www.google.com”http://www.google.com解释为不同的字符串,因此您应该有一个类似“URL将会”的规则从来没有协议标识符“或”URL永远不会以斜杠结尾“,或者对您的设计有意义的任何内容。

答案 1 :(得分:1)

正如其他人所说的那样 - 我绝对不会像URL一样使用长字符串作为SQL Server表上的主要/集群键 - 但当然,您应该随意对该列添加唯一约束,确保你没有得到任何重复!

您可以执行UNIQUE CONSTRAINT或UNIQUE INDEX - 最终结果几乎相同(唯一约束也将在幕后使用索引)。 UNIQUE INDEX的优点是你可以在一个单独的表中将它作为外键引用,所以我几乎总是使用这种方法:

CREATE UNIQUE NONCLUSTERED INDEX UIX_YourTable_URL ON dbo.YourTable(urlField) 

如果您应该尝试插入已经存在于表中的值,那么该插入语句将被SQL错误拒绝,并且不会发生任何错误。

答案 2 :(得分:0)

如果需要分页,您可能会受益于数字主键。但是你以后还可以添加数字索引器。因此,将URL设为PK是没有障碍的。

答案 3 :(得分:0)

我仍然会在桌面上创建一个群集列密钥,例如自动编号,然后在URL列上创建唯一索引。

但是,我无法理解为什么URL不是唯一的,并且所有URL都应该按原样运行。