Использование Генератора идентификатора приложения или Генератора идентификатора базы данных - PullRequest
10 голосов
/ 31 августа 2009

Какова лучшая стратегия для генерации идентификаторов базы данных? Использование генераторов базы данных? Используете собственный генератор? Каковы преимущества и недостатки каждого?

Ответы [ 3 ]

11 голосов
/ 31 августа 2009

Генератор БД:

  • Легко убедиться, что он уникален
  • Требуется дополнительная передача туда и обратно (вы должны прочитать сгенерированный идентификатор обратно)
  • Часто довольно просто (последовательность)
  • При откате транзакций в последовательности могут появляться пропуски (спасибо Кристен за указание на это).

Генератор идентификаторов приложений

  • Может быть настолько сложным, насколько вам нужно (например, вы можете закодировать тип объекта в ID, если хотите)
  • Трудно сделать уникальным (если вы не используете UUID)
  • Вы можете назначить идентификатор, даже не разговаривая с БД

[РЕДАКТИРОВАТЬ] Поскольку UUID довольно дороги (нет встроенной поддержки во многих БД, фрагментации индекса и т. Д.), Большинство приложений используют генератор на основе БД.

8 голосов
/ 31 августа 2009

Также следует помнить, что не все вставки в базы данных происходят из приложения. Использование руководств, управляемых приложениями, будет очень больно, когда вы получите нового клиента и вам придется перенести 100 000 записей от их последнего поставщика.

2 голосов
/ 31 августа 2009

Я думаю, что наиболее важным является то, что вы выбираете что-то, что может быть полезным для вашего бизнеса в качестве идентификатора. Например, DMV помещает номер вашей лицензии прямо на карту, и если вы забудете свой кошелек и запомните номер, его можно использовать для проверки вашей личности (например, когда его остановит полицейский). Вы не поместите UUID на карту.

Скрытие идентификаторов от вашего бизнеса может привести к путанице, поэтому выберите что-то, о чем вы не прочь рассказать клиенту, клиенту или деловому партнеру. Я не говорю, что каждый должен иметь возможность запомнить его, но вы, по крайней мере, должны быть в состоянии прочитать его кому-то по телефону, если вы просматриваете квитанцию ​​(например).

Конечно, существуют исключения для производительности, но их следует использовать с осторожностью, а не с бизнес-видимым идентификатором.

Смотрите мой связанный пост в блоге

...