SQL, как мне создать 2 вычисляемых ключа, которые создают 1 составной ключ? - PullRequest
0 голосов
/ 19 ноября 2011

Я хочу создать таблицу, которая выглядит примерно так:

avaya nchar(6) NOT NULL,<br> startDate datetime NOT NULL,<br> endDate datetime NOT NULL,<br> sup_assigned nvarchar(255) NOT NULL,<br> myID int NOT NULL IDENTITY (1, 1)

Но я хочу, чтобы таблица остановила любые вставки / обновления, где avaya, startDateи sup_assigned одинаковы в любой записи ИЛИ avaya, endDate и sup_assigned одинаковы в любой записи.

Как мне лучше всего поступить так?

Я подумал о преобразовании набора из 3 столбцов, которые включают startDate, в шестнадцатеричный код, а затем добавил их, создав столбец Key1, проделав то же самое с остальными 3 столбцами, которые включают endDate и имеют Key2колонка.Затем установите Key1 и Key2 в качестве составного ключа.

Но я получаю эту ошибку:

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

Как мне это сделать с помощью MS SQL 2005?

1 Ответ

5 голосов
/ 19 ноября 2011

Лучший способ - использовать только пару уникальных ключей на самих полях, а не отменять нормализацию таблицы путем создания этих производных полей:

UNIQUE KEY key_a (avaya, startDate, sup_assigned)
UNIQUE KEY key_b (avaya, endDate, sup_assigned)

Это предотвратит вставку любой записигде любая из этих трехсторонних группировок идентична некоторой другой записи в БД

...