2012-05-31 1 views
4

나는 다음과 같이 SQL Server 2008 R2의 3 개 테이블이있다. LSP에는 많은 SERVICE가있을 수 있습니다.다른 테이블의 열을 사용하여 고유 제한 조건을 추가하는 방법은 무엇입니까?</p> <p><img src="https://i.stack.imgur.com/IDFG4.gif" alt="DB Model"></p> <p>기업이 많은 LSP가 포함될 수 있습니다

그리고 SERVICE_CODE가 회사 내의 SERVICE 레코드를 고유하게 식별하는지 확인해야합니다. 즉, COMPANY_ID + SERVICE_CODE는 전체 시스템에서 SERVICE 레코드를 고유하게 식별해야합니다.

예 : COMPANY-A에는 동일한 SERVICE_CODE를 사용하는 2 개의 SERVICE_ID가있는 2 개의 서비스가 없을 수 있습니다. 그러나 COMPANY-A와 COMPANY-B는 둘 다 SERVICE_CODE = "PREMIUM"인 두 개의 별도 SERVICES (다시 SERVICE_ID가 다릅니다)를 가질 수 있습니다.

는이 같은 뭔가가 필요 :

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

그러나 COMPANY_ID 열이 서비스 테이블에 있지 않기 때문에 (분명히)이 실패합니다.

미리 도움을 청하십시오.

+0

Service_Code가 고유합니까? 처음에는 Service_ID가 자연어 Service_Code의 대용 키라고 생각했습니다. 그러나 두 회사가 서비스 코드가 '프리미엄'인 다른 서비스 ID를 가질 수 있다면 그렇지 않다는 것을 의미합니다. – 8kb

답변

4

당신은 외부 제약 등의 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) 전혀 중복이 없다 있는지 확인합니다.

+0

이것은 멋지게 보입니다! 그것이 어떻게되었는지 알려주십시오. –

+0

그것은 작동합니다. 감사합니다! –

1

각 회사는 단일 LSP로 제한됩니까? Service_Code는 고유합니까 (아니면 Service_ID가 다른 두 개의 서비스 코드 "PREMIUM"이있을 수 있습니까)?

+0

회사에는 많은 LSP가있을 수 있습니다. 2 개의 다른 회사에 속해있는 한 동일한 SERVICE_CODE를 가진 2 개의 SERVICE (ID가 서로 다른)가있을 수 있습니다. 이 예제를 명확하게하기 위해이 예제를 업데이트 할 것이다. 감사. –

-1

서비스 테이블에 COMPANY_ID를 추가하십시오.

이 ID로 고유 한 Service 테이블의 행이 필요한 경우이 테이블에 외래 키 참조를 유지하는 것이 좋습니다.

+1

Company_ID가 LSP 테이블에 이미 있으므로 중복 될 수 있습니다. –

+0

고마워,하지만 나는 테이블을 바꾸지 않고 이것을 할 수있는 방법이있다. –

+0

테이블을 변경할 수 없다면 테이블이 올바르게 모델링되지 않았기 때문에 구속 조건을 사용하여 목표를 달성 할 수 있다고 생각하지 않습니다. 모든 비즈니스 규칙을 선언적 제약 조건을 사용하여 쉽게 적용 할 수있는 것은 아니기 때문에 트리거를 사용해야 할 수 있습니다. 나는 100 % 확신하기에 충분한 시간을 보냈지 만 그것이 나의 초기 인상이다. –