2009-05-01 2 views
1

Я в ситуации, когда у нас появился новый выпуск программного обеспечения, который будет использовать отдельную базу данных (значительные изменения в схеме) из старого. Произойдет значительный промежуток времени, когда будут созданы как новая, так и старая система, и нам нужно убедиться, что между этими двумя базами данных создаются уникальные идентификаторы (нам не нужна строка в базе данных A иметь тот же идентификатор, что и строка в базе данных B). Базы данных - Sybase.Предотвращение дублирования ключей между несколькими базами данных

Возможные решения я придумал:

  1. Используйте тип данных, который поддерживает очень большое количество и выделить диапазон для каждого, надеясь, что они никогда не переполнения.
  2. Используйте отрицательные значения для одной базы данных, а положительные значения - другую.
  3. Добавить дополнительный столбец, который идентифицирует базу данных, и использовать комбинацию этого и текущего идентификатора в качестве ключа.
  4. Плач.

Что еще я мог сделать? Есть ли более элегантные решения, так как две базы данных работают вместе? Я считаю, что две базы данных будут на одном сервере, если это имеет значение.

+0

Готовы ли вы внести изменения в ПК на старые, новые и/или обе базы данных? Сколько таблиц связано с проблемой ПК? Могут ли ПК быть разными типами данных в разных БД или они должны быть одинаковыми? Легко рекомендовать использовать GUID, но если вам нужно сделать большие изменения в обеих БД для достижения этого, то действительно ли это лучший подход? –

ответ

5

Я видел, как это случалось несколько раз. На тех, с которыми я был связан, мы просто выделили достаточно большое пространство ID для старого (так как он работал некоторое время, и мы знали, сколько ключей оно использовало, мы могли бы вычислить, сколько еще ключей оно 'd требуется для указанной «продолжительности жизни») и начал «ID SEQUENCE» новой базы данных выше этого.

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

6

GUID или глобально уникальные идентификаторы могут быть удобными первичными ключами в этом случае. Я считаю, что Sybase поддерживает их.

Редакция: Хотя вся ваша база данных уже основана на целых первичных ключах, переход на GUID может быть не очень практичным - в этом случае просто разделите целочисленное пространство между базами данных, как предложили GWLlosa и другие.

2

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

Я сделал это в прошлом, и объем записей был достаточно низким, поэтому я начал свою новую базу данных на 200 000 в качестве начального номера записи. то, когда пришло время, я просто перенес все старые записи в новую систему.

Выполнено отлично!

2

GUID предназначены для этой ситуации.

3

В вашем случае я бы рассмотрел использование uniqueidentifier (GUID) в качестве типа данных. Они считаются уникальными при создании их с использованием system function newid().

CREATE TABLE customer (
    cust_key UNIQUEIDENTIFIER NOT NULL 
      DEFAULT NEWID(), 
    rep_key VARCHAR(5), 
    PRIMARY KEY(cust_key)) 
2

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

Смежные вопросы