我正在使用SQL服务器表来保存与URL相关的信息。所以有一个列作为“URL”,其类型是VARCHAR。在应用程序中,我们必须使用此URL作为查询信息的唯一键(我们使用类似SELECT * FROM Table WHERE URL =“www.google.com \ ig”)
将URL用作唯一键是否有任何缺点或已知缺点?
答案 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列上创建唯一索引。
但是,我无法理解为什么URL不是唯一的,并且所有URL都应该按原样运行。
答案 3 :(得分:0)
如果需要分页,您可能会受益于数字主键。但是你以后还可以添加数字索引器。因此,将URL设为PK是没有障碍的。