база данных, в которой хранятся данные нескольких типов, но нужны глобальные уникальные идентификаторы - PullRequest
1 голос
/ 15 июля 2011

некоторое время назад я спросил о том, как реализовать REST API.с тех пор я добился успехов в этом, но пытаюсь приспособить свой мозг к другой идее.

в моем API, у меня будет несколько типов данных, таких как люди, события, новости и т. д.

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

, не должно быть человека с идентификатором # 1 и новости с идентификатором #1.в конечном счете, эти две вещи будут иметь разные идентификаторы: лицо № 1 с уникальным идентификатором № 1 и новость № 1 с уникальным идентификатором № 2, так как № 1 был взят человеком.

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

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

Ответы [ 3 ]

1 голос
/ 15 июля 2011

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

http://en.wikipedia.org/wiki/Globally_unique_identifier

0 голосов
/ 15 июля 2011

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

Это просто неправда.Каждый ресурс должен иметь уникальный идентификатор , да, но в системе HTTP, например, это означает уникальный URI./people/1 и /news/1 являются уникальными URI. нет пользы (и, как вы обнаруживаете, довольно много боли) от ограничения системы таким образом, что вместо этого /news/1 должен быть /news/0983240-2309843-234802/, чтобы избежать конфликта.

0 голосов
/ 15 июля 2011

+ 1 для UUID (обратите внимание, что GUID - это конкретная реализация Microsoft UUID стандарта )

Существует встроенная функция uuid () длягенерация UUID в виде текста.Возможно, вы добавите к имени таблицы префикс, чтобы потом было легче его распознать.

Каждый вызов uuid() будет генерировать новое новое значение (в виде текста).Таким образом, с указанным выше методом префикса запрос INSERT может выглядеть следующим образом:

INSERT INTO my_table VALUES (CONCAT('my_table-', UUID()), ...)

И не забудьте сделать этот столбец varchar достаточно большого размера и, конечно, создать для него индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...