我有一個要求來存儲多臺計算機的服務列表。我想我會創建一個表來保存所有可能的表的列表,一張表用於所有可能的計算機,然後是一張表來將服務鏈接到計算機。使用散列作爲主鍵?
我想保持完整的服務列表的唯一性,我可以使用可執行文件的哈希作爲服務的主鍵,但我不確定是否會有任何缺點(請注意,散列僅用於識別,不適用於任何類型的安全目的)。我想的不是使用二進制字段作爲主鍵/外鍵,而是將該值存儲爲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