У меня есть требование хранить список услуг для нескольких компьютеров. Я думал, что создам одну таблицу для хранения списка всех возможных таблиц, таблицы для всех возможных компьютеров, а затем таблицы для привязки службы к компьютеру.Использование хеша в качестве первичного ключа?
Я думал, чтобы список полного сервиса был уникальным, я мог бы использовать хэш исполняемого файла в качестве первичного ключа для службы, но я не уверен, будут ли какие-либо недостатки (см. хеширование - только для идентификации. Не для каких-либо целей безопасности). Я думал, а не использовал двоичное поле в качестве основного/внешнего ключа, чтобы сохранить значение в качестве базового 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 становится лучше. Поскольку theat является кодированным в base64 номером в хэше, N-часть varchar никогда не используется по определению, поэтому вы вдвое хранилище полностью бесполезны. Хороший момент, я забыл об этом. – TomTom