이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.토토 PostgreSQL : 문서 : 17 : 5.11. 계승버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

5.8. 상속

포스트그레SQL무지개 토토 구현 상속은 데이터베이스 디자이너에게 유용한 도구가 될 수 있습니다. (SQL:1999 이상에서는 유형 상속 기능을 정의합니다. 여기에 설명된 기능과 여러 측면에서 다릅니다.)

예를 들어 시작해 보겠습니다. 우리가 도시를 위한 데이터 모델. 각 주에는 여러 개의 도시가 있지만 단 하나의 도시만 있습니다. 자본. 우리는 수도를 빠르게 되찾고 싶습니다. 특정 주에 대해. 두 개의 무지개 토토을 생성하면 이 작업을 수행할 수 있습니다. 하나는 주의 수도용이고 다른 하나는 수도가 아닌 도시용입니다. 하지만 도시에 대한 데이터를 요청하려는 경우에는 어떻게 되나요? 자본인지 아닌지에 관계없이? 상속 기능을 사용하면 이 문제를 해결하는 데 도움이 될 수 있습니다. 우리는 다음을 정의합니다.대문자다음에서 상속되도록 무지개 토토도시:

무지개 토토 도시 생성(
    이름 텍스트,
    인구 부동,
    고도 int - 피트 단위
);

CREATE TABLE 대문자(
    상태 문자(2)
) 상속(도시);

이 경우,대문자무지개 토토상속상위 항목의 모든 열 무지개 토토,도시. 주 수도에는 또한 추가 열,상태, 즉 그들의 상태.

PostgreSQL, 무지개 토토은 다음을 수행할 수 있습니다. 0개 이상의 다른 무지개 토토에서 상속되며 쿼리는 참조할 수 있습니다. 무지개 토토의 모든 행 또는 무지개 토토의 모든 행과 해당 무지개 토토의 모든 행 하위 무지개 토토. 후자의 동작이 기본값입니다. 예를 들어, 다음 쿼리는 주를 포함한 모든 도시의 이름을 찾습니다. 500피트 이상의 고도에 위치한 수도:

SELECT 이름, 고도
    도시에서
    고도  500;

다음의 샘플 데이터가 제공됩니다.포스트그레SQL튜토리얼(참조섹션 2.1), 이는 다음을 반환합니다.

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

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

SELECT 이름, 고도
    도시에서만
    고도  500인 곳;

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

여기키워드는 다음을 나타냅니다. 쿼리는 다음에만 적용되어야 합니다.도시, 아래에는 무지개 토토이 없습니다.도시에 상속 계층. 우리가 이미 가지고 있는 많은 명령 논의됨 —선택, 업데이트그리고삭제— 지원키워드.

또한 무지개 토토 이름을 뒤에 붙여 쓸 수 있습니다.*하위 무지개 토토이 다음과 같이 명시적으로 지정됩니다. 포함됨:

SELECT 이름, 고도
    도시에서*
    고도  500;

쓰기*필요하지 않습니다. 왜냐하면 이것은 동작이 기본값입니다(설정을 변경하지 않은 경우sql_inheritance구성 옵션). 그러나 쓰기*추가 무지개 토토이 추가될 것임을 강조하는 데 유용할 수 있습니다. 검색했습니다.

어떤 경우에는 특정 무지개 토토이 어떤 것인지 알고 싶을 수도 있습니다. 행이 시작되었습니다. 라는 시스템 열이 있습니다.무지개 토토로이드각 무지개 토토에 있는 내용을 통해 원본 무지개 토토:

SELECT c.tableoid, c.name, c.altitude
도시에서 c
c.altitude  500;

반환:

무지개 토토로이드 |   이름 | 고도
--------+------------+----------
   139793 | 라스베가스 |     2174
   139793 | 마리포사 |     1953년
   139798 | 매디슨 |      845

(이 예를 재현하려고 하면 아마도 다음과 같은 결과를 얻게 될 것입니다. 다른 숫자 OID.) 다음과 조인을 수행하여pg_class실제 무지개 토토 이름을 볼 수 있습니다:

SELECT p.relname, c.name, c.altitude
도시 c, pg_class p에서
여기서 c.altitude  500 AND c.tableoid = p.oid;

반환:

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

상속은 다음의 데이터를 자동으로 전파하지 않습니다.삽입또는복사상속 계층의 다른 무지개 토토에 명령합니다. 우리의 예를 들면 다음과 같습니다삽입문장 실패합니다:

INSERT INTO 도시(이름, 인구, 고도, 주)
VALUES ('뉴욕', NULL, NULL, '뉴욕');

우리는 데이터가 어떻게든 다음으로 라우팅되기를 바랍니다.대문자무지개 토토이지만 이것은 그렇지 않습니다. 발생:삽입항상 정확하게 삽입됩니다. 지정된 무지개 토토. 어떤 경우에는 리디렉션이 가능합니다. 규칙을 사용한 삽입(참조PostgreSQL : 문서 : 9.3 : 사설 토토 시스템). 그러나 위의 경우에는 도움이 되지 않습니다. 왜냐하면도시무지개 토토에 다음이 포함되어 있지 않습니다. 열상태, 따라서 명령은 규칙이 적용되기 전에 거부됩니다.

상위 무지개 토토의 모든 검사 제약 조건 및 null이 아닌 제약 조건 자식에게 자동으로 상속됩니다. 다른 유형 제약 조건(고유 키, 기본 키, 외래 키 제약 조건)은 다음과 같습니다. 상속되지 않았습니다.

무지개 토토은 둘 이상의 상위 무지개 토토에서 상속될 수 있습니다. 경우에는 상위 무지개 토토에 의해 정의된 열의 통합이 있습니다. 하위 무지개 토토의 정의에 선언된 모든 열은 다음에 추가됩니다. 이것들. 여러 상위 무지개 토토에 동일한 열 이름이 나타나는 경우 또는 상위 무지개 토토과 하위 정의 모두에서 다음은 열은"병합"그래서 하위 무지개 토토에는 그러한 열이 하나만 있습니다. 병합하려면 열이 다음과 같아야 합니다. 동일한 데이터 유형을 갖고 있으면 오류가 발생합니다. 병합된 열에는 다음에서 오는 모든 검사 제약 조건의 복사본이 있습니다. 해당 열 정의 중 하나가 표시되며 표시됩니다. 그 중 하나라도 있으면 null이 아닙니다.

무지개 토토 상속은 일반적으로 하위 무지개 토토이 을 사용하여 생성됩니다.상속됨PostgreSQL : 문서 : 9.3 : 스포츠 토토 작성문장. 또는 이미 호환 가능한 방식으로 정의된 무지개 토토 다음을 사용하여 새로운 상위 관계를 추가할 수 있습니다.상속변형무지개 토토 변경. 그러기 위해서는 새로운 아이가 무지개 토토에는 이름과 유형이 동일한 열이 이미 포함되어 있어야 합니다. 부모의 열. 또한 검사 제약 조건도 포함해야 합니다. 상위 항목과 이름 및 확인 표현식이 동일합니다. 마찬가지로, 다음을 사용하여 상속 링크를 하위 항목에서 제거할 수 있습니다.상속 없음변형무지개 토토 변경. 동적으로 추가 및 제거 이와 같은 상속 링크는 상속이 이루어질 때 유용할 수 있습니다. 무지개 토토 파티셔닝에 관계가 사용되고 있습니다(참조섹션 5.9).

나중에 호환되는 무지개 토토을 생성하는 편리한 방법 중 하나 새로운 자녀를 만들려면 다음을 사용하세요.좋아요무지개 토토 생성. 이는 새로운 소스 무지개 토토과 동일한 열이 있는 무지개 토토입니다. 있다면확인소스에 정의된 제약조건 무지개 토토,제약조건 포함옵션좋아요새 하위 항목으로 지정되어야 합니다. 고려할 상위 항목과 일치하는 제약 조건이 있어야 합니다. 호환됩니다.

상위 무지개 토토은 하위 무지개 토토이 있는 동안 삭제할 수 없습니다. 남아있다. 하위 무지개 토토의 열이나 검사 제약 조건도 마찬가지입니다. 상위 무지개 토토에서 상속된 경우 삭제되거나 변경됩니다. 만약에 한 가지 쉬운 방법으로 무지개 토토과 그 하위 항목을 모두 제거하려는 경우 를 사용하여 상위 무지개 토토을 삭제하는 것입니다.캐스케이드옵션.

토토 PostgreSQL : 문서 : 9.3 : Alter Table모든 것을 전파합니다 열 데이터 정의의 변경 사항 및 제약 조건 확인 상속 계층. 다시 말하지만, 의존하는 열을 삭제하면 다른 무지개 토토을 사용하는 경우에만 가능합니다.캐스케이드옵션.무지개 토토 변경중복 열 병합 및 거부에 대해 동일한 규칙을 따릅니다. 해당 기간 동안 적용됨무지개 토토 생성.

무지개 토토 액세스 권한이 어떻게 처리되는지 참고하세요. 상위 쿼리 무지개 토토은 추가 작업 없이 자동으로 하위 무지개 토토의 데이터에 액세스할 수 있습니다. 접근권한 확인. 이는 다음과 같은 외관을 유지합니다. 데이터는 (또한) 상위 무지개 토토에 있습니다. 하위 무지개 토토에 액세스 그러나 직접적으로는 자동으로 허용되지 않으며 다음이 필요합니다. 추가 권한이 부여됩니다.

5.8.1. 주의사항

모든 SQL 명령이 상속에 대해 작동할 수 있는 것은 아닙니다. 계층. 데이터 쿼리에 사용되는 명령, 데이터 수정 또는 스키마 수정(예:선택, 업데이트, 삭제, 대부분의 변형변경 표하지만 아님삽입또는무지개 토토 변경 ... 이름 바꾸기) 일반적으로 기본값은 하위 무지개 토토을 포함하고 다음을 지원합니다.표기하여 제외합니다. 다음을 수행하는 명령 데이터베이스 유지 관리 및 조정(예:REINDEX, 진공) 일반적으로 개별적인 물리적 무지개 토토에서만 작동하며 지원하지 않습니다. 상속 계층 구조에 대해 반복됩니다. 각각의 행동 각 개별 명령은 참조 페이지에 문서화되어 있습니다. (참조 I,SQL 명령).

상속 기능의 심각한 제한 사항은 색인이 (고유 제약 조건 포함) 및 외래 키 제약 조건만 상속된 하위 항목이 아닌 단일 무지개 토토에 적용됩니다. 이것은 외래 키의 참조 측과 참조 측 모두에서 true 제약. 따라서 위 예의 관점에서 보면 다음과 같습니다.

  • 우리가 선언한다면도시.이름되다고유또는기본 키, 이것은 멈추지 않을 것입니다.대문자무지개 토토의 행이 다음과 같습니다. 행을 복제하는 이름도시. 그리고 해당 중복 행은 기본적으로 다음의 쿼리에 표시됩니다.도시. 실제로 기본적으로대문자고유 제약조건이 전혀 없을 것입니다. 따라서 동일한 이름을 가진 여러 행이 포함될 수 있습니다. 당신은 할 수 고유 제약 조건을 추가합니다.대문자, 하지만 이는 다음과 비교하여 중복을 방지하지 못합니다.도시.

  • 마찬가지로 우리가 그것을 지정한다면도시.이름 참조다른 무지개 토토, 이것은 제약 조건이 자동으로 전파되지 않습니다.대문자. 이 경우에는 문제를 해결할 수 있습니다. 수동으로 추가하여참조제한사항대문자.

  • 다른 무지개 토토의 열을 지정참조 도시(이름)다른 무지개 토토을 허용하겠습니다 도시 이름은 포함하지만 대문자 이름은 포함하지 않습니다. 좋은 게 없어 이 경우의 해결 방법입니다.

이러한 결함은 아마도 미래에 수정될 것입니다 하지만 그 동안에는 상당한 주의가 필요합니다. 상속이 애플리케이션에 유용한지 여부를 결정합니다.