c# - 使用哈希作为主键?

标签 c# database sql-server-2008

我需要存储多台计算机的服务列表。我想我应该创建一个表来保存所有可能的表的列表,一个用于所有可能的计算机的表,然后创建一个用于将服务链接到计算机的表。

我正在考虑保持完整服务列表的唯一性,我可以使用可执行文件的哈希值作为服务的主键,但我不确定这样做是否会有任何缺点(请注意,哈希值仅用于识别。不用于任何类型的安全目的)。我在想,我不是使用二进制字段作为主键/外键,而是将值存储为 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/

相关文章:

c# - 如何为富文本框中的某些文本设置字体样式?

c# - 在 C# 的 Dynamic Linq 中使用 "Contains"关键字查询数据

php - MySQL引用INNER JOIN并到达数据

java - 创建preparedstatement的多个实例

sql-server-2008 - #temporary table Microsoft SQL 似乎迷路了

c# - 如何使用 C# 为 sql server express 添加异常到 Windows 防火墙

c# - SQL Server 始终在插入时加密排序规则不兼容

java - 寻找 FTP 服务器 Java 库

sql - 如何避免在很多列上分组

sql-server-2008 - Powershell将字符转换为ASCII