2011-03-02 4 views
0

asp.net과 함께 SQL Server2005를 사용하고 있습니다. 서버 측에서 유효성을 검사하여 중복 항목을 제한하려면 여기에서 두 개의 테이블 회사와 지점을 사용하고 있습니다. 지점 테이블에서는 CompanyId의 외래 키를 유지 관리했습니다. 분기에서는 BranchName이 복제 될 수 있지만 특정 회사 ID에는 복제되지 않을 수 있습니다.동일한 외래 키 참조가 아닌 테이블에 중복 값을 허용하는 쿼리

Companies Table: 
     Columns: CompanyId (Primary Key), CompanyName 

Branches Table : 
     Columns: BranchId(Primary Key), BranchName, CompanyId (Foreign Key). 

회사 ID는 여러 번 반복 할 수 있습니다. 1 대 다수 관계. 동일한 CompanyId가 아닌 중복을 허용하는 쿼리는 무엇입니까?

답변

2
+0

ahhh 나를 이길 :) +1 –

+0

회사 ID는 여러 번 반복 할 수 있습니다. – Ritu

+0

@ Ritu : 네, 문제는 ... ?? 독특한 contsraints가있는 Damiens 솔루션이나 복합 기본 키가있는 내 솔루션을 사용할 수 있습니다. 둘 다 중복을 피할 것입니다 (동일한 CompanyID에 대해 동일한 BranchName). 귀하의 질문은 이제 주어진 조합이 이미 데이터베이스에 존재하는지 쿼리하는 방법입니까? 삽입하거나 가장 간단한 방법이 될 제약 조건 예외를 잡으려고 시도하거나 삽입 (느리게)하기 전에 테이블을 조사하는 쿼리를 작성할 수 있습니다. –

4

당신은 모두 회사 ID 및 BRANCHNAME 컬럼에 대한 고유성을 적용 제약 조건을합니다. 이 중 하나를 수행 할 수 있습니다 (팀 권장 것처럼) 테이블의 기본 키 또는 UNIQUE 제약 조건에 의해 : 당신이 수행하는 방법을 자주 검색을 기반으로, 제약 조건 내에서 열을 넣어 어떤 순서를 결정할 수 있습니다

ALTER TABLE Branches ADD 
    CONSTRAINT UQ_BranchNamesWithinCompanies UNIQUE (BranchName,CompanyID); 

두 개의 컬럼을 기반으로 한 테이블. 나는. 실제로 이러한 열에 대한 색인을 작성하기 때문에이를 사용하여 일부 조회 성능을 향상시킬 수 있습니다.

위의 순서는 특정 회사에 대한 참조없이 분기 이름을 검색 할 수 있다고 가정합니다. 회사 내에서 항상 검색하고 접두사 검색을 수행하는 경우 (예 : CompanyID=21 and BranchName like 'Lon%') 열의 순서를 반대로 바꾸고 싶을 수 있습니다.