이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 PostgreSQL : 문서 : 17 : 5.11. 계승버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

5.8. 계승

postgresql표현 젠 토토 데이터베이스 디자이너에게 유용한 도구가 될 수있는 상속. (SQL : 1999 및 나중에 유형 상속 기능을 정의합니다 여기에 설명 된 기능과 여러 측면에서 다릅니다.)

예로부터 시작합시다 : 우리가 구축하려고한다고 가정 해 봅시다. 도시의 데이터 모델. 각 주에는 많은 도시가 있지만 하나만 있습니다 수도. 우리는 수도를 빠르게 검색 할 수 있기를 원합니다. 특정 상태. 이것은 두 가지를 만들어 수행 할 수 있습니다 젠 토토, 하나는 주 수도 용 및 하나는 그렇지 않은 도시를위한 수도. 그러나 데이터를 요청하고 싶을 때 어떻게되는지 도시에 대해, 그것이 수도인지 여부에 관계없이? 그만큼 상속 기능은이 문제를 해결하는 데 도움이 될 수 있습니다. 우리는 정의합니다 그만큼캐피탈젠 토토이 있으므로 에서 상속도시:

젠 토토 도시 생성 (
    이름 텍스트,
    모집단 플로트,
    고도 int- 발
);

젠 토토 캐피탈 생성 (
    상태 문자 (2)
) 상속 (도시);

이 경우캐피탈젠 토토상속부모의 모든 열 젠 토토,도시. 주 수도 추가 열이 있습니다.State, 그 그들의 상태를 보여줍니다.

inpostgresql, 젠 토토이 가능합니다 0 이상의 다른 젠 토토에서 상속되고 쿼리가 참조 할 수 있습니다. 젠 토토의 모든 행 또는 젠 토토의 모든 행과 그 모든 행 후손 젠 토토. 후자의 동작은 기본값입니다. 을 위한 예를 들어 다음 쿼리는 모든 도시의 이름을 찾습니다. 고도에 위치한 주 수도를 포함하여 500 피트 :

이름, 고도를 선택하십시오
    도시에서
    고도 500;

PostgreSQL튜토리얼 (참조섹션 2.1), 이것은 반환됩니다 :

이름 | 고도
-----------+---------
 라스 베이거스 |     2174
 마리포사 |     1953
 매디슨 |      845

반면에 다음 쿼리는 모든 도시를 찾습니다. 주 수도가 아니며 고도에 위치하고 있습니다. 500 피트 :

이름, 고도를 선택하십시오
    도시에서만
    여기서 고도 500;

   이름 | 고도
-----------+---------
 라스 베이거스 |     2174
 마리포사 |     1953

여기전용키워드를 나타냅니다 쿼리는에만 적용되어야합니다.도시, 아래 젠 토토이 아님도시상속 계층에서. 많은 것들 우리가 이미 논의한 명령 -select, 업데이트and삭제- 지원전용키워드.

후행으로 젠 토토 이름을 쓸 수도 있습니다*자손 젠 토토을 명시 적으로 지정합니다 포함 :

이름, 고도를 선택하십시오
    도시에서*
    고도 500;

쓰기*그 이후로 필요하지 않습니다 이 동작은 기본값입니다 (설정을 변경하지 않는 한 의SQL_INHERITANCE구성 옵션). 그러나 쓰기*추가 젠 토토이 검색.

경우에 따라 특정 젠 토토을 알고 싶을 수도 있습니다. 행이 시작되었습니다. 라는 시스템 열이 있습니다.Tableoid각 젠 토토에서 원래 젠 토토 :

C.Tableoid, C.Name, C.Altitude를 선택하십시오
도시에서 c
여기서 c.altitude 500;

반환 :

Tableoid |   이름 | 고도
----------+----------+----------
   139793 | 라스 베이거스 |     2174
   139793 | 마리포사 |     1953
   139798 | 매디슨 |      845

(이 예제를 재현하려고하면 아마 다른 숫자 Oids.)와 함께pg_class실제 젠 토토을 볼 수 있습니다 이름 :

P.RelName, C.Name, C.Altitude를 선택하십시오
도시 C, pg_class p
여기서 c.altitude 500 및 c.tableoid = p.oid;

반환 :

Relname |   이름 | 고도
----------+----------+----------
 도시 | 라스 베이거스 |     2174
 도시 | 마리포사 |     1953
 수도 | 매디슨 |      845

상속은 데이터를 자동으로 전파하지 않습니다삽입또는copy상속 계층의 다른 젠 토토에 대한 명령. 우리에서 예, 다음삽입진술 실패 할 것입니다 :

도시에 삽입 (이름, 인구, 고도, 주)
값 ( 'New York', Null, Null, 'Ny');

우리는 데이터가 어떻게 든 라우팅되기를 바랍니다.캐피탈젠 토토이지만 그렇지 않습니다 일어나다:삽입항상 삽입하십시오 정확히 지정된 젠 토토. 어떤 경우에는 가능합니다 규칙을 사용하여 삽입을 리디렉션합니다 (참조제 36 장). 그러나 그것은 도움이되지 않습니다 위의 경우도시젠 토토 열이 포함되어 있지 않습니다State, 그리고 규칙이 될 수 있기 전에 명령이 거부됩니다. 적용된.

부모에 대한 모든 점검 제약 및 널없는 제약 조건 젠 토토은 아이들이 자동으로 상속됩니다. 다른 유형의 제약 조건 (고유 한 기본 키 및 외국 키 제약 조건) 상속되지 않았습니다.

젠 토토은 하나 이상의 상위 젠 토토에서 상속 될 수 있습니다. 사례는 부모가 정의한 열의 통합을 가지고 있습니다. 젠 토토. Child Table의 정의에서 선언 된 모든 열은 다음과 같습니다 이것들에 추가되었습니다. 동일한 열 이름이 다중에 나타나는 경우 부모 젠 토토 또는 부모 젠 토토과 자녀의 정의,이 열은입니다."합병"따라서 그러한 열만 하나만 있습니다 어린이 젠 토토. 병합하려면 열에 동일한 데이터가 있어야합니다 유형, 그렇지 않으면 오류가 발생합니다. 병합 된 열에는 모든 수표 제약 조건의 사본은 열 정의는 그 결과로 나왔고, 그럼에도 불구하고 null으로 표시됩니다. 그들 중 누구도.

젠 토토 상속은 일반적으로 아동이있을 때 설정됩니다 젠 토토은를 사용하여 생성됩니다.상속절의 조항PostgreSQL : 문서 : 8.4 : 롤 토토 작성진술. 또는 이미 젠 토토입니다 호환 가능한 방식으로 정의 된 새로운 부모 관계를 가질 수 있습니다. 추가, 사용상속변형사설 토토 PostgreSQL. 할 일 이것은 새 자식 젠 토토에 이미 열을 포함해야합니다. 부모의 열과 동일한 이름과 유형. 그것은 또한해야합니다 동일한 이름으로 확인 제약 조건을 포함하고 확인하십시오 부모의 표현. 마찬가지로 상속 링크 를 사용하여 어린이에서 제거 할 수 있습니다.아니오 상속변형Alter Table. 상속 링크를 동적으로 추가하고 제거 할 수 있습니다 상속 관계가 사용될 때 유용합니다. 젠 토토 파티셔닝 (참조PostgreSQL : 문서 : 8.4 : 젠 토토).

호환 가능한 젠 토토을 만드는 편리한 방법 중 하나 나중에 새로운 아이는 사용하는 것입니다.좋아요조항생성 젠 토토. 이것은 다음과 같은 열의 새 젠 토토을 만듭니다. 소스 젠 토토. 있는 경우check소스 젠 토토에 정의 된 제약 조건,제약 포함옵션Like새 자녀가 꼭 필요한 것처럼 지정해야합니다 고려할 부모와 일치하는 제약 조건이 있습니다 호환.

어린이 중 누구라도 부모 젠 토토을 떨어 뜨릴 수 없습니다. 유지하다. 어린이 젠 토토의 칼럼이나 제약 조건을 확인할 수 없습니다 부모로부터 상속 받으면 떨어 뜨리거나 변경됩니다. 젠 토토. 젠 토토과 모든 후손을 제거하려면 쉬운 방법 중 하나는로 부모 젠 토토을 떨어 뜨리는 것입니다.캐스케이드옵션.

사설 토토 PostgreSQL의지 열 데이터 정의의 변경 사항을 전파하고 확인하십시오 상속 계층 구조를 제한합니다. 다시, 떨어지는 다른 젠 토토에 의존하는 열만 가능합니다. 를 사용할 때캐스케이드옵션.Alter Table동일한 규칙을 따릅니다 중복 열 병합 및 거부 중젠 토토 생성.

5.8.1. 경고

젠 토토 액세스 권한은 자동으로 상속되지 않습니다. 따라서 부모 젠 토토에 액세스하려는 사용자는 모든 것에 대해 동일한 작업을 수행 할 권한이 있습니다. 자식 젠 토토도 있거나 사용해야합니다.전용표기법. 새 어린이 젠 토토을 추가 할 때 기존 상속 계층 구조, 모든 부여에주의하십시오. 그것에 대한 권한이 필요합니다.

보다 일반적으로 모든 SQL 명령이 상속 계층에 대한 작업. 사용되는 명령 데이터 쿼리, 데이터 수정 또는 스키마 수정 (예 :select, 업데이트, 삭제, 대부분 변형Alter Table그러나삽입또는변경 젠 토토 ... 이름 바꾸기) 일반적으로 자식을 포함시키는 기본값 젠 토토 및 지원전용표기법 그들을 배제하기 위해. 데이터베이스 유지 관리를 수행하는 명령 튜닝 (예 :Reindex, 진공) 일반적으로 개인 만 작동합니다. 물리적 젠 토토 및 상속에 대한 재귀를 지원하지 않습니다 계층. 각 개별 명령의 각 행동 참조 페이지 (에 문서화되어 있습니다.참조 I,SQL 명령).

상속 기능의 심각한 제한은 그 것입니다 인덱스 (고유 한 제약 포함) 및 외국 키 제약 조건은 단일 젠 토토에만 적용됩니다 상속 어린이. 이것은 참조와 모두에 해당됩니다 외국 키 제약 조건의 참조 측면. 따라서, 위의 예 :

  • 우리가 선언 한 경우도시.이름고유 한또는 A기본 키, 이것은을 멈추지 않을 것입니다.캐피탈행이있는 젠 토토 이름을 복제하는 행으로도시. 그리고 그 중복 행은 기본값은 쿼리에 나타납니다.도시. 사실, 기본적으로캐피탈고유 한 제약은 없습니다 전혀, 동일하게 여러 행을 포함 할 수 있습니다. 이름. 당신은에 독특한 제약을 추가 할 수 있습니다캐피탈그러나 이것은 방해하지 않습니다 에 비해 복제도시.

  • 마찬가지로, 우리가 그것을 명시해야한다면도시.이름 참조다른 젠 토토, 이것 제약 조건은 자동으로 전파되지 않습니다캐피탈. 이 경우 작업 할 수 있습니다 수동으로 동일한 것을 추가하여 주변참조제약 조건캐피탈.

  • 다른 젠 토토의 열 지정참조 도시 (이름)다른 젠 토토은 도시 이름을 포함하지만 자본 이름은 아닙니다. 이 경우에는 좋은 해결 방법이 없습니다.

이러한 결함은 아마도 어떤 미래에 고정 될 것입니다 릴리스이지만 그 동안 상당한 치료가 필요합니다. 상속이 귀하에게 유용한 지 여부를 결정합니다 애플리케이션.