Как избежать столкновений первичных ключей при объединении двух идентичных таблиц с представлением - PullRequest
0 голосов
/ 18 августа 2011

У меня есть центральная база данных и уникальная база данных для проекта, над которым я работаю. Центральная база данных позволяет мне предоставлять пользователям параметры и данные по умолчанию.

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

Поле «первичный ключ» в каждом представлении устанавливается как первичный ключ в используемом мной dbml-файле (Linq-to-sql). Затем я добавляю ассоциации в другие таблицы в dbml.

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

Поэтому в представлении мне нужно, чтобы все записи из каждой пары таблиц имели уникальный первичный ключ.

Я думал об установке уникального базового номера pk базы данных на 1000000 или что-то в этом роде, но в конечном итоге это может иметь неприятные последствия для меня, когда глобальная база данных (0 base) догнала.

Я также хотел бы добавить к каждому префиксу номер в представлении, например,

Global: 11, 12, 13, 14, 15, 16, 17, 18, 19, 110, 111 Уникальный: 21, 22, 23, 24, 25, 26, 27, 28, 29, 210, 211

Меня беспокоит, как это может повлиять на производительность при запросах, это должно быть максимально эффективным.

Не уверены в лучшем методе?

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

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

Люди иногда обходят эту проблему, используя GUID для ключа-кандидата.Таким образом, ваши исходные БД имеют столбцы IDENTITY в виде PK, а также GUID, который является уникальным, но не первичным в исходных базах данных.Однако в объединенном представлении PK является GUID, и исходные ключи источника (IDENTITY) приводятся для поездки, но фактически не используются в отношениях PK / FK.

В этом типе модели объединенное представление обычно также включает в себя некоторый столбец исходного кода, который сообщает вам, откуда появилась строка.Если вы сделаете это, то исходный код + ключ идентификации также будет ключом-кандидатом в объединенном представлении.

0 голосов
/ 18 августа 2011

Просто на самом деле была другая идея:

Я мог бы установить уникальное значение с шагом 1 базы 2 и глобальным шагом 2 базы 2. Таким образом, сумасшедшего взлома не будет, и ПК никогда не столкнется

...