【发布时间】:2011-05-17 00:42:54
【问题描述】:
例如,拥有表格:
Companies (CompanyID)
Workers (WorkerID, CompanyID)
Users (WorkerID, Username)
定义了正确的关系后,我如何执行用户的用户名在其员工所在的公司中是唯一的这一断言?
【问题讨论】:
标签: sql-server database-design
例如,拥有表格:
Companies (CompanyID)
Workers (WorkerID, CompanyID)
Users (WorkerID, Username)
定义了正确的关系后,我如何执行用户的用户名在其员工所在的公司中是唯一的这一断言?
【问题讨论】:
标签: sql-server database-design
您可以为此使用索引视图
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+,则默认情况下这些选项处于打开状态。
【讨论】:
你不能直接,但你有几个选择:
对 Users 表进行一点反规范化,并将 CompanyID 添加到其中。
使用插入/更新触发器进行验证。
【讨论】:
您也可以考虑:
并确保WorkerNo 在公司内是独一无二的:
alter table Workers
add constraint un_co_wrk unique (CompanyID, WorkerNo) ;
【讨论】: