#sql-server #database-design
#sql-server #база данных-дизайн
Вопрос:
Например, наличие таблиц:
Companies (CompanyID)
Workers (WorkerID, CompanyID)
Users (WorkerID, Username)
При правильно определенных связях, как мне обеспечить выполнение утверждения о том, что имя пользователя пользователя уникально в компании, в которой работает его сотрудник?
Ответ №1:
Для этого можно использовать индексированное представление
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 , они включены по умолчанию.
Ответ №2:
Вы не можете напрямую, но у вас есть пара вариантов:
-
Немного денормализуйте таблицу Users и добавьте в нее идентификатор компании.
-
Используйте триггер вставки / обновления для выполнения проверки.
Ответ №3:
Вы также можете рассмотреть:
и убедиться, что WorkerNo
это уникально в компании:
alter table Workers
add constraint un_co_wrk unique (CompanyID, WorkerNo) ;