SQL Server의 뷰에서 열을 참조하는 외래 키를 가질 수 있습니까?
SQL Server 2008에서
TableA(A_ID, A_Data)
TableB(B_ID, B_Data)
ViewC(A_or_B_ID, A_or_B_Data)
그것을 정의 할 수 TableZ(A_or_B_ID, Z_Data)
있도록 Z.A_or_B_ID
열이 검색된 값으로 제한된다 ViewC
? 뷰에 대한 외래 키로이 작업을 수행 할 수 있습니까?
외래 키에서 뷰를 참조 할 수 없습니다.
이전 SQL Server 버전에서는 외래 키가 트리거를 통해서만 가능했습니다. 삽입 된 값이 관련 테이블 중 하나에 표시되는지 여부를 확인하는 삽입 트리거를 만들어 사용자 지정 외래 키를 모방 할 수 있습니다.
A_or_B_ID
TableZ에서 정말 필요한 경우 두 가지 유사한 옵션이 있습니다.
1) 널 추가 A_ID
및 B_ID
테이블 (Z)에 열이 만들어 A_or_B_ID
이들 두 열에 ISNULL을 사용하여 계산 된 열을, 단지 하나되도록 CHECK 제약 조건을 추가 A_ID
하거나 B_ID
null이 아니고
2) 현재 A 또는 B 중 어느 하나를 포함하는 제약 생성 테이블 (Z)에 TABLENAME 열을 추가 A_ID
하고 B_ID
그들의 적절한 테이블 () CASE 식을 사용하여 이름이 유일한 비 - 널이다 계산 열로. 그들도 계속 유지하십시오
두 경우 모두 기본 테이블에 대한 적절한 외래 키를 가질 수있는 A_ID
및 B_ID
열이 있습니다. 차이점은 계산되는 열에 있습니다. 너무 오래 도메인이 결정할 수있는 경우의 표현으로 - 2 개 ID 컬럼의 도메인이 아닌 중첩 할 경우 위 또한, 옵션 2 TABLENAME 필요하지 않습니다 A_or_B_ID
에 빠져
(내 서식 수정에 대한 의견에 감사드립니다)
죄송합니다. SQL Server의 뷰로 FK 할 수 없습니다.
다른 옵션이 있습니다. TableA 및 TableB를 TablePrime이라는 새 테이블의 하위 클래스로 취급합니다. TableB의 ID 값이 TableA의 ID 값과 일치하지 않도록 조정합니다. TablePrime의 ID를 PK로 만들고 TableA 및 TableB의 모든 (조정 된) ID를 TablePrime에 삽입합니다. TableA와 TableB가 PK에서 TablePrime의 동일한 ID에 대한 FK 관계를 갖도록합니다.
이제 상위 유형 / 하위 유형 패턴이 있으며 TablePrime (-A- 또는 -B 중 하나 를 원하는 경우 ) 또는 개별 테이블 중 하나 ( A 만 또는 B 만 원하는 경우)에 제약 조건을 만들 수 있습니다 .
더 자세한 정보가 필요하면 문의하십시오. A와 B가 상호 배타적인지 또는 작업중인 것이 동시에 둘 다일 수 있도록하는 변형이 있습니다. 가능하면 FK에서 형식화하는 것이 가장 좋습니다.
값이 존재하면 true를 반환하고 그렇지 않으면 false를 반환하는 fCheckIfValueExists (columnValue)를 확인하는 사용자 정의 함수를 참조하는 제약 조건을 추가하는 것이 더 쉽습니다.
장점은 여러 열을 수신하고, 계산을 수행하고, null을 허용하고, 기본 키에 정확하게 일치하지 않는 값을 허용하거나, 조인 결과와 비교할 수 있다는 것입니다.
단점은 옵티마이 저가 모든 외래 키 트릭을 사용할 수 없다는 것입니다.
죄송합니다. 엄밀히 말하면 뷰에 외래 키를 설정할 수 없습니다. 그 이유는 다음과 같습니다.
InnoDB는 외래 키를 특징으로하는 MySQL 용 내장 스토리지 엔진입니다. 모든 InnoDB 테이블은 engine = 'InnoDB'로 information_schema.tables에 등록됩니다.
information_schema.tables에 등록 된 뷰에는 NULL 스토리지 엔진이 있습니다. MySQL에는 정의되지 않은 스토리지 엔진이있는 테이블에 외래 키를 포함하는 메커니즘이 없습니다.
감사!
'developer tip' 카테고리의 다른 글
내 앱이 광고 지원 프레임 워크를 사용하여 거부되었습니다. (0) | 2020.10.05 |
---|---|
두 화면 중 하나에서 DataGridView의 끔찍한 다시 그리기 성능 (0) | 2020.10.05 |
ASP.NET Web API를 사용하여 이미지를 반환하는 권장 방법이 있습니까? (0) | 2020.10.05 |
하나의 양식에 여러 라디오 버튼 그룹 (0) | 2020.10.05 |
설치된 React-Native 버전을 확인하는 방법 (0) | 2020.10.05 |