Диапазон первичных ключей в зависимости от типа строки в SQL Server - PullRequest
0 голосов
/ 07 ноября 2019

Я использую SQL Server вместе с Entity Framework. У меня есть таблица с несколькими тысячами строк.

Клиент хочет добавить новый тип данных в эту таблицу. Оба типа различаются по столбцу MainType.

Клиент также хочет, чтобы строки типа A имели значение PK до 1000000, а строки типа B выше 1000000.

Я думал об использовании триггера INSTEAD OF INSERT, но это было былучше не указывать имя каждого столбца в теле триггера, так как они могут измениться.

Можно ли создать триггер, который изменяет столбец первичного ключа?

Я знаю, что это не может бытьлучший вариант манипулировать на ПК колонке. Может быть, есть способ сделать это на стороне Entity Framework?

1 Ответ

2 голосов
/ 08 ноября 2019

Лучшей практикой для ситуаций такого типа не является автоматическое создание столбца, а автоматическое создание чисел. Таким образом, вы можете убедиться, что они уникальны. SQL Server (и другие платформы) предоставляют для этого объекты последовательности.

https://docs.microsoft.com/en-us/sql/relational-databases/sequence-numbers/sequence-numbers?view=sql-server-ver15

В этом случае вы должны создать два объекта последовательности с описанными вами начальными точками. Когда вам нужен идентификатор одного типа, вы извлекаете его из этой последовательности, а когда вам нужен идентификатор другого типа, вы извлекаете его из генератора последовательности этого типа. четные числа (начиная с 2), а другие нечетные числа (начиная с 1). Но я также видел действительно высокий 2-й сет, который вы описываете.

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

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