Мы создаем новое веб-приложение, которое будет иметь автономную версию приложения для iPad/Android на нескольких локальных устройствах, которые будут включать в себя вставки новых данных. Поэтому мы требуем использования UUID для обеспечения необходимой двухсторонней синхронизации с основной базой данных. Для этого мы будем хранить UUID в качестве первичного ключа BINARY(16)
.
Проблема, которую я узнал после исследования, заключается в том, что время, необходимое для несекретных вставок первичных ключей, со временем увеличится и что эти вставки приведут к фрагментации (как ответил здесь). Преимущество AUTO_INCREMENT
заключается в том, что новые строки обычно просто добавляются в конец таблицы и поэтому не будут сталкиваться с проблемами скорости с UUID.
Мой вопрос заключается в том, следует ли лучше использовать столбец AUTO_INCREMENT
в качестве первичного ключа, а затем использовать столбец UUID как непустой уникальный индекс? Предположительно, это будет иметь преимущества скорости последовательных вставок, сохраняя при этом необходимые UUID, необходимые для синхронизации распределенных баз данных.
Единственная проблема, которую я вижу в этом, заключается в том, что UUID необходимо использовать в качестве ссылки (используя ограничения внешнего ключа) для других таблиц (т.е. список проблем, связанных с проверкой, которая, в свою очередь, привязана к сайту, все из которых задействованы во вставках, и поэтому все они требуют UUID). Семантически, для первичного ключа более важно, чтобы ссылка была ссылкой, но в качестве распределенной системы мы не можем использовать для этого AUTO_INCREMENTS
. Есть ли недостатки в использовании уникального (а не нулевого) индекса, а не первичного ключа для этих ссылок (и, конечно же, JOIN
, который будет с ними)?
Можно также отметить, что основная (онлайн) база данных использует MySQL (InnoDB), а распределенные (автономные) базы данных используют SQLite.
Edit:
Учитывая, что, возможно, лучше иметь UUID в качестве первичного ключа (как это семантически, что это такое), мог бы я извлечь выгоду из последовательных вставок, если бы я установил UUID в качестве первичного ключа и столбца AUTO_INCREMENT
как однозначный уникальный индекс? Или это только первичный ключ, который имеет значение при определении, куда вставлять новую строку?