Как сделать столбец таблицы b уникальным только для разных записей внешнего ключа в таблице a - PullRequest
0 голосов
/ 11 февраля 2019

Предположим, есть таблица с именем Emails

CREATE TABLE Emails (
    ID nvarchar(40) NOT NULL,
    Link_ID int NOT NULL,
        GROUP int NOT NULL,
    Email nvarchar(100) NOT NULL)

и таблица с именем Info

CREATE TABLE Info (
    CUST_ID int NOT NULL,
        Link_ID int NOT NULL)

Это упрощенное представление таблиц, и я не могу изменить столбцыим.

Моя цель такова:

Разрешено:

Cust_ID Group   Email
1       0   test1@allowed.com
1       1   test1@allowed.com

Запрещено:

Cust_ID Group   Email
1       0   test2@forbidden.com
1       0   test2@forbidden.com

Cust_ID Group   Email
1       0   test3@forbidden.com
2       1   test3@forbidden.com

Cust_ID Group   Email
1       0   test4@forbidden.com
2       0   test4@forbidden.com

Как мне достичь такого рода уникальности в MSSQL 2014?

РЕДАКТИРОВАТЬ: Моя цель такова:

  • У клиента может быть несколько адресов электронной почты
  • Адрес электронной почты должен быть уникальным для каждого клиента, но не для группы,поэтому один адрес электронной почты разрешен для нескольких групп ОДНОГО клиента, но один и тот же адрес электронной почты не разрешен для любого другого клиента

1 Ответ

0 голосов
/ 11 февраля 2019

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

  1. Вы можете использовать триггеры для проверки данных перед этимвставляется и выдает ошибку, если это запрещено.
  2. Во время вставки самого себя вы можете проверить, разрешены или нет данные, используя IF EXISTS.
  3. Создайте Indexed View и наложите на вас УНИКАЛЬНОЕ ограничение

Моя рекомендация - создать индексированное представление и наложить обязательное ограничение.Чтобы узнать больше об этом, вы можете проверить Применение сложных ограничений с индексированными представлениями

...