nvarchar 类型的唯一列

Ili*_*hev 3 sql sql-server nvarchar unique linq-to-sql

我有一个简单的表:

Filepath | deleted | categories | description

我想将该表用于 Linq to SQL 实体模型。在模型上,该列pathnvarchar数据库中的字符串)可以设置为主键,但 Visual Studio 表设计器不是这种情况。

路径是使一个文件独一无二的原因,因此我必须确保表中没有重复的路径。如何做到这一点?谢谢你的时间。

Mik*_*ll' 5

您可以使用 SQL 中的 UNIQUE 约束、NOT NULL UNIQUE 约束或 PRIMARY KEY 约束使列唯一。但是,我能想到的每个当前 dbms 都对 columnm 的长度有一个或多个限制,可以通过这种方式进行约束。

这意味着在最一般的情况下,有一个相当引人注目的问题。例如,Windows 上UNC 路径的长度约为 32,767 个字符。

Linux 系统差异很大。根据 Google 的快速研究,1024 和 4096 似乎很常见。

我认为您将不得不仅对代理键施加唯一约束。(你知道这样说对数据库人员有多大伤害。)问题是你可以在代理上强制唯一性,但不能在它取代的东西上。它所取代的东西是重要的部分。

身份证号码在一般情况下不起作用;你很容易得到 {1, /etc/adjtime}, {2, /etc/adjtime}, {3, /etc/adjtime}。您需要某种方式将真实数据与代理键的值联系起来。像hashbytes () 这样的东西会在 T-SQL 中“工作”;linq 也有类似的功能。(但是你可以有冲突,就像你可以与几乎所有的散列函数一样。)