【问题标题】:How can I enforce uniqueness rules that include more than one table?如何强制执行包含多个表的唯一性规则?
【发布时间】:2011-05-17 00:42:54
【问题描述】:

例如,拥有表格:

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

定义了正确的关系后,我如何执行用户的用户名在其员工所在的公司中是唯一的这一断言

【问题讨论】:

    标签: sql-server database-design


    【解决方案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】:

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

      1. 对 Users 表进行一点反规范化,并将 CompanyID 添加到其中。

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

      【讨论】:

        【解决方案3】:

        您也可以考虑:

        并确保WorkerNo 在公司内是独一无二的:

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

        【讨论】:

          猜你喜欢
          • 2011-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-06
          • 1970-01-01
          • 1970-01-01
          • 2011-08-26
          • 1970-01-01
          相关资源
          最近更新 更多