Уникальные, но простые идентификаторы в базе данных в SQL Server - PullRequest
47 голосов
/ 06 апреля 2009

Во-первых, я знаю этот вопрос , и предложение (с использованием GUID) не применимо в моей ситуации.

Мне нужны простые UID, чтобы мои пользователи могли легко передавать эту информацию по телефону:

Здравствуйте, у меня проблема с заказом 1584

в отличие от

привет, у меня проблема с заказом 4daz33-d4gerz384867-8234878-14

Я хочу, чтобы они были уникальными (для всей базы данных), потому что у меня есть несколько различных видов «объектов» ... есть идентификаторы заказов, и идентификаторы доставки, и идентификаторы выставления счетов, и так как нет отношения один к одному между ними я не могу угадать, к какому объекту относится идентификатор.

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

Моя текущая идея состоит в том, чтобы использовать столбцы идентификаторов с различными начальными значениями 1, 2, 3 и т. Д. И значением приращения 100.

Это поднимает несколько вопросов:

  • Что если я в итоге получу более 100 типов объектов? Конечно, я могу использовать 1000 или 10000, но что-то, что плохо масштабируется, "пахнет"

  • Существует ли вероятность того, что начальное число "потеряно" (во время репликации, проблемы с базой данных и т. Д.)

  • в целом, есть ли другие проблемы, о которых мне следует знать?

  • возможно ли использовать нецелое число (в настоящее время я использую bigints) в качестве столбцов идентификаторов, чтобы я мог добавить к идентификатору идентификатор, представляющий тип объекта? (например, столбец varchar)

  • было бы неплохо использовать «основную таблицу», содержащую только столбец идентификаторов, и, возможно, тип объекта, чтобы я мог просто вставить в нее строку всякий раз, когда потребуется новая идея. Я чувствую, что это может быть немного излишним, и я боюсь, что это усложнит все мои запросы на вставку. Плюс тот факт, что я не смогу определить тип объекта, не глядя на базу данных

  • Существуют ли другие умные способы решения моей проблемы?

Ответы [ 11 ]

0 голосов
/ 06 апреля 2009

Вы можете создать главную таблицу UniqueObject с вашим именем и полем подтипа. Подтаблицы (Заказы, Пользователи и т. Д.) Будут иметь FK для UniqueObject. INSTEAD OF INSERT триггеры должны сводить боль к минимуму.

...