我需要存储多台计算机的服务列表。我想我应该创建一个表来保存所有可能的表的列表,一个用于所有可能的计算机的表,然后创建一个用于将服务链接到计算机的表。
我正在考虑保持完整服务列表的唯一性,我可以使用可执行文件的哈希值作为服务的主键,但我不确定这样做是否会有任何缺点(请注意,哈希值仅用于识别。不用于任何类型的安全目的)。我在想,我不是使用二进制字段作为主键/外键,而是将值存储为 Base 64 编码的 sha512,并使用 nvarchar(88)
。与此类似的东西:
CREATE TABLE Services
(
ServiceHash nvarchar(88) NOT NULL,
ServiceName nvarchar(256) NOT NULL,
ServiceDescription nvarchar(256),
PRIMARY KEY (ServiceHash)
)
此解决方案是否存在任何固有问题? (我将使用 SQL 2008 数据库并通常通过 C#.Net 访问它)。
最佳答案
问题在于,根据定义,哈希值不是唯一的。发生碰撞的可能性不大,但有可能发生。因此,你不能只使用 hash,这意味着整个 hash id 是一个死胡同。
使用普通 ID 字段,在 ServiceName 上使用带索引的唯一约束。
关于c# - 使用哈希作为主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11312207/