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

5.8. 계승

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

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

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

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

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

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

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

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

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

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

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

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

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

경우에 따라 특정 범퍼카 토토을 알고 싶을 수도 있습니다. 행이 시작되었습니다. 라는 시스템 열이 있습니다.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');

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

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

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

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

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

자녀 중 누구라도 부모 범퍼카 토토을 떨어 뜨릴 수 없습니다. 유지하다. 어린이 범퍼카 토토의 열을 떨어 뜨리거나 변경할 수 없습니다. 부모 범퍼카 토토에서 상속 된 경우. 당신이 원한다면 범퍼카 토토과 모든 자손을 제거하십시오. 쉬운 방법 중 하나는 로 부모 범퍼카 토토을 떨어 뜨립니다.캐스케이드옵션.

토토 사이트 추천 PostgreSQL의지 열 데이터 정의의 변경 사항을 전파하고 확인하십시오 상속 계층 구조를 제한합니다. 다시, 떨어지는 부모 범퍼카 토토의 열 또는 제약은 사용 사용캐스케이드옵션.Alter Table동일한 규칙을 따릅니다 중간에 적용되는 열 병합 및 거부범퍼카 토토 생성.

5.8.1. 경고

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

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

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

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

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

이러한 결함은 아마도 어떤 미래에 고정 될 것입니다 릴리스이지만 그 동안 상당한 치료가 필요합니다. 상속이 문제에 유용한 지 결정합니다.

감가 상각 :릴리스PostgreSQL7.1 이전에 기본값 행동은 쿼리에 어린이 범퍼카 토토을 포함하지 않는 것이 었습니다. 이것 오류가 발생하기 쉬운 것으로 밝혀졌으며 SQL 표준. 회전하여 7.1 이전 동작을 얻을 수 있습니다 ~SQL_INHERITANCE구성 옵션.