簡體   English   中英

如何使用另一個表中的列添加唯一約束?

[英]How to add a unique constraint using a column from another table?

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

數據庫模型

公司可能有許多LSP。 LSP可能有許多服務。

我需要確保SERVICE_CODE唯一標識公司內的SERVICE記錄。 換句話說,COMPANY_ID + SERVICE_CODE應該唯一地標識整個系統中的SERVICE記錄。

例如:COMPANY-A可能沒有2個具有相同SERVICE_CODE的服務(具有2個不同的SERVICE_ID)。 但是COMPANY-A和COMPANY-B可能都有2個單獨的服務(同樣,具有不同的SERVICE_ID),其中SERVICE_CODE =“PREMIUM”。

我需要這樣的東西:

alter table "SERVICE" 
add constraint "SERVICE_Index01" 
unique ("COMPANY_ID", "SERVICE_CODE") 

但(顯然)這會失敗,因為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);

索引將確保您的數據中沒有(COMPANY_ID, SERVICE_CODE)重復項。

每個公司是否僅限於一個LSP? Service_Code是唯一的(或者可能有兩個服務代碼“PREMIUM”具有不同的Service_ID)?

CREATE TABLE dbo.Company
(
  CompanyID INT PRIMARY KEY
  -- , ...
);

CREATE TABLE dbo.LSP
(
  LSPID      INT PRIMARY KEY, 
  CompanyID  INT FOREIGN KEY REFERENCES dbo.Company(CompanyID) -- UNIQUE?
  -- , ...
);

CREATE TABLE dbo.Service
(
  ServiceID    INT PRIMARY KEY
  -- , ...
);

CREATE TABLE dbo.LSP_Service
(
  LSPID        INT FOREIGN KEY REFERENCES dbo.LSP(LSPID), 
  ServiceID    INT FOREIGN KEY REFERENCES dbo.Service(ServiceID), 
  PRIMARY KEY (LSPID, ServiceID)
);

將COMPANY_ID添加到服務表。

如果您需要Service表中的行由此id唯一,那么在此表中保留外鍵引用是有意義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM