Как я могу применить правила уникальности, которые включают более одной таблицы? - PullRequest
2 голосов
/ 16 мая 2011

Например, имея таблицы:

Companies (CompanyID)
Workers (WorkerID, CompanyID)
Users (WorkerID, Username)

Если определены правильные отношения, как мне применить предикат, что Имя пользователя пользователя уникально в компании, где его работник находится в * * 1006

Ответы [ 3 ]

3 голосов
/ 16 мая 2011

Вы можете использовать индексированное представление для этого

CREATE VIEW dbo.EnforceConstraint
WITH SCHEMABINDING
AS
SELECT CompanyID, Username
FROM dbo.Users u 
    JOIN dbo.Workers w ON w.WorkerID = u.WorkerID

GO

CREATE UNIQUE CLUSTERED INDEX ix ON dbo.EnforceConstraint(CompanyID, Username)

Существуют определенные опции SET, которые необходимо включить для изменения базовых таблиц индексированных представлений, но если вы используете SQL Server 2005+, они включены по умолчанию.

0 голосов
/ 16 мая 2011

Вы также можете рассмотреть:

enter image description here

и убедиться, что WorkerNo является уникальным в компании:

alter table Workers
add constraint un_co_wrk unique (CompanyID, WorkerNo) ;
0 голосов
/ 16 мая 2011

Вы не можете напрямую, но у вас есть пара вариантов:

  1. Немного денормализуйте таблицу Users и добавьте в нее CompanyID.

  2. Используйте триггер вставки / обновления для проверки.

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