我有一个要求来存储多台计算机的服务列表。我想我会创建一个表来保存所有可能的表的列表,一张表用于所有可能的计算机,然后是一张表来将服务链接到计算机。使用散列作为主键?
我想保持完整的服务列表的唯一性,我可以使用可执行文件的哈希作为服务的主键,但我不确定是否会有任何缺点(请注意,散列仅用于识别,不适用于任何类型的安全目的)。我想的不是使用二进制字段作为主键/外键,而是将该值存储为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访问它)。
哈希不保证是唯一的。只需使用一个GUID – Chris
'Nvarchar(88)' - 这是一个潜在的非常宽(可变长度)的密钥;如果你使用它作为你桌面上的集群密钥(默认情况下是PK),那么你将不会对该表的表现感到满意! –
@marc_s变得更好。由于atat是散列中的base64编码数字,因此varchar的N部分从未被定义使用,所以您将存储空间加倍完全无用。好点,我忽略了这一点。 – TomTom