2010-05-20 2 views
1

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

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

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

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

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

ответ

1

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

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

+0

Это было бы в одну сторону, правильно, поэтому мне нужно было бы сохранить значение в базе данных, поэтому почему бы не использовать GUID (так как MD5 в итоге приведет к 16 байтам). – Alan

+1

Поскольку идентификатор GUID можно вычислить из идентификатора и таблицы (как компонент «пространства имен» VID GUID), вам не нужно хранить или передавать его, когда он не имеет отношения к внешнему миру. Индексированный вычисленный столбец (если ваша RDBMS поддерживает его), то гарантирует, что поисковые запросы все еще бывают быстрыми. – Lucero

+0

Спасибо. Ваши идеи интригуют меня, и я хочу подписаться на ваш информационный бюллетень. – Alan