gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:46:54 25 4
gpt4 key购买 nike

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

DB Model

一家公司可能有许多 LSP。一个LSP可能有很多服务。

我需要确保 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")

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

预先感谢您的帮助。

最佳答案

您可以使用indexed view作为外部约束:

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);

索引将确保您的数据中不存在重复的 (COMPANY_ID, SERVICE_CODE)

关于sql - 如何使用另一个表中的列添加唯一约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com