Вопрос проектирования базы данных: GUID + натуральные числа - PullRequest
1 голос
/ 21 мая 2010

Для базы данных, которую я создаю, я решил использовать натуральные числа в качестве первичного ключа. Я знаю о преимуществах, которые допускают GUID, но, глядя на данные, основная часть данных строки представляла собой ключи GUID.

Я хочу сгенерировать записи XML из данных базы данных, и одна проблема с натуральными числами заключается в том, что я не хочу раскрывать ключи своей базы данных внешнему миру и позволять пользователям угадывать «ключи». Я считаю, что GUID решают эту проблему.

Итак, я думаю, что решение состоит в том, чтобы сгенерировать редкий, уникальный iD, полученный из естественного идентификатора (надеюсь, это будет 2-сторонний), или просто добавить дополнительный столбец в базу данных и сохранить guid (или некоторый другой многобайтовый ID)

Производное значение лучше, потому что нет потери памяти, но было бы легче изменить и угадать по сравнению с GUID.

Мне (купить) любопытно, что сделали другие на SO и какие у них идеи.

1 Ответ

1 голос
/ 21 мая 2010

Что вы можете сделать, чтобы вычислить «GUID», это вычислить MD5-хеш идентификатора с некоторой солью (например, именем таблицы), загрузить его в GUID и установить несколько битов, чтобы он был действительным GUID версии 3 (MD5) .

Это почти двухсторонний процесс, поскольку вы можете иметь вычисляемый в SQL столбец (который также может быть проиндексирован в некоторых случаях), содержащий GUID, не сохраняя его в таблице, и вы всегда можете пересчитать GUID с правильным идентификатором. и соль, которая должна быть труднее для пользователей, так как они не знают ни соли, ни фактического идентификатора.

...