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 表中。
在此先感谢您的帮助。
您可以使用索引视图作为外部约束:
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)您的数据中没有重复的。