Поддерживать уникальный идентификатор в нескольких таблицах - PullRequest
2 голосов
/ 27 января 2010

Я хочу создать уникальный идентификатор для всей базы данных. Этот уникальный идентификатор должен быть одним полем каждой строки в каждой таблице этой базы данных.

Я рассмотрел несколько подходов:

  • Создайте одну мастер-таблицу с полем автоинкремента и триггером в любой другой таблице, например:

    "перед вставкой сюда, вставить в мастер-таблицу -> получить значение автоинкремента -> и использовать это значение в качестве первичного ключа здесь"

    Я видел это раньше, но вместо того, чтобы сделать один INSERT, он делает 2 INSERTS, которые, я ожидаю, не будут такими быстродействующими.

  • Добавьте поле uniqueId к каждой таблице и заполните это поле сгенерированным PHP целым числом ... что-то вроде unix-timestamp плюс случайное число.

    Но мне пришлось использовать BIGINT в качестве типа данных, что означает большой index_length и большой data_length.

  • Похоже на идею "uniqueId", но вместо BIGINT я использую VARCHAR и uniqid() для заполнения этого значения.

1 Ответ

2 голосов
/ 28 января 2010

Поскольку вы ищете мнения ... Из трех идей, которые вы даете, я бы "проголосовал" за решение uniqid().Кажется, это довольно низкая стоимость с точки зрения выполнения (но, возможно, не реализации).

Более простым решением (я думаю) было бы просто добавить поле в каждую таблицу для хранения guid и установить значение по умолчаниюполе, чтобы быть функцией MySQL, которая генерирует guid (я думаю, что это UUID).Это позволяет базе данных выполнять всю работу за вас.

И в духе выдвижения случайных идей ... Можно было бы иметь какой-то автономный процесс, который асинхронно заполнял бы идентификаторы.Убедитесь, что в каждой таблице есть соответствующее поле, и установите значение по умолчанию 0 / пусто.Тогда автономный процесс может просто выполнить запрос к каждой таблице, чтобы найти строки, которые еще не имеют уникального идентификатора, и заполнить их. Это позволит вам контролировать идентификатор и даже использовать какое-то возрастающее целое число.Это, конечно, требует, чтобы вам не требовался уникальный идентификатор сразу при каждой вставке записи.

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