如何实施包含多个表的唯一性规则?

时间:2011-05-16 16:12:56

标签: sql-server database-design

例如,拥有表格:

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

如果定义了正确的关系,我如何强制执行用户的用户名在其员工所在的公司中唯一的预测?

3 个答案:

答案 0 :(得分:3)

您可以为此

使用索引视图
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+,则这些选项默认启用。

答案 1 :(得分:0)

你不能直接,但你确实有几个选择:

  1. 对Users表进行非规范化并将CompanyID添加到其中。

  2. 使用插入/更新触发器进行验证。

答案 2 :(得分:0)

您也可以考虑:

enter image description here

并确保WorkerNo在公司内是唯一的:

alter table Workers
add constraint un_co_wrk unique (CompanyID, WorkerNo) ;