如何使用另一个表中的列添加唯一约束?

Ces*_*iel 4 sql sql-server unique-constraint sql-server-2008-r2

我在 SQL Server 2008 R2 中有 3 个表,如下所示:

数据库模型

一个公司可能有许多 LSP。一个 LSP 可能有许多 SERVICE。

而且我需要确保 SERVICE_CODE 唯一标识公司内的服务记录。换句话说,COMPANY_ID + SERVICE_CODE 应该在整个系统中唯一标识一条SERVICE 记录。

例如:COMPANY-A 可能没有具有相同 SERVICE_CODE 的 2 个服务(具有 2 个不同的 SERVICE_ID)。但是 COMPANY-A 和 COMPANY-B 可能都有 2 个独立的 SERVICES(同样,具有不同的 SERVICE_ID),SERVICE_CODE = "PREMIUM"。

我需要这样的东西:

alter table "SERVICE" 
add constraint "SERVICE_Index01" 
unique ("COMPANY_ID", "SERVICE_CODE") 
Run Code Online (Sandbox Code Playgroud)

但是(显然)这会失败,因为 COMPANY_ID 列不在 SERVICE 表中。

在此先感谢您的帮助。

And*_*y M 5

您可以使用索引视图作为外部约束:

CREATE VIEW dbo.CompanyServices
WITH SCHEMABINDING
AS
SELECT
  c.COMPANY_ID,
  s.SERVICE_CODE
FROM       dbo.COMPANY c
INNER JOIN dbo.LSP     l ON c.COMPANY_ID = l.COMPANY_ID
INNER JOIN dbo.SERVICE s ON l.LSP_ID     = s.LSP_ID
GO

CREATE UNIQUE CLUSTERED INDEX UQ_CompanyServices
ON dbo.CompanyServices (COMPANY_ID, SERVICE_CODE);
Run Code Online (Sandbox Code Playgroud)

该索引将确保(COMPANY_ID, SERVICE_CODE)您的数据中没有重复的。