2011-01-31 2 views
0

Есть ли конкретная причина, почему вы не использовали бы естественный идентификатор, например, адрес электронной почты?Использование натуральных идентификаторов (например, адрес электронной почты)

В настоящее время я использую класс UUID Java для создания уникальных идентификаторов, но для некоторых объектов у них есть естественный ключ - как пользователь и его адрес электронной почты. Было бы лучше (и сделать мой код чище), если бы я использовал их адрес электронной почты, но я задавался вопросом, есть ли какая-то конкретная причина, по которой вы не должны?

Благодаря

UPDATE

Я использую MongoDB в данном конкретном случае.

ответ

3

Естественные идентификаторы часто не являются постоянными. Например, я обновил свой адрес электронной почты несколько раз за последние 20 или около того лет, но я все тот же человек. Это : разумно иметь индекс в столбце адреса электронной почты; в конце концов, люди не меняют их очень часто ...

1

Одна из причин, по которой я могу думать, заключается в том, что естественный идентификатор не всегда постоянный. Например, пользователь может в какой-то момент захотеть изменить свой адрес электронной почты. Использование его в качестве ключа не обязательно исключало бы это, но это сделало бы изменение намного сложнее и сложнее.

2

Изменения не только меняются пользователями (это означает, что вам придется менять все связанные дочерние записи, которые могут быть в тысячах или миллионах, вызывая серьезные проблемы с производительностью), они повторно используются компаниями, поскольку люди приходят и уходят. Они даже иногда используются несколькими людьми. Они являются очень плохим выбором для естественного ключа.

Природные ключи должны быть уникальными и неизменными, и чем короче, тем лучше для соединения. В большинстве случаев целочисленный ключ с уникальным индексом на натуральном ключе будет лучше работать и быть более легким для maintian перед лицом изменения ключа. Ключ GUID может быть приемлемым, если вы выполняете репликацию, или если вам нужна нейтральная база данных, но она обычно не будет работать так же, как целочисленный ключ.

Смежные вопросы