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

5.8. 상속

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

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

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

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

이 경우,대문자토토 결과상속상위 항목의 모든 열 토토 결과,도시. 주 수도 또한 추가 열이 있습니다.상태, 그거 상태를 보여줍니다.

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

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

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

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

반면에 다음 쿼리는 모든 도시를 찾습니다. 주도가 아니고 고도가 높은 곳에 위치한 곳 500피트:

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

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

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

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

SELECT c.tableoid, c.이름, c.고도
도시에서 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 및 c.tableoid = p.oid;

반환:

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

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

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

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

검사 제약 조건은 다음 내의 토토 결과에 정의될 수 있습니다. 상속 계층. 상위 토토 결과의 모든 검사 제약 조건 모든 하위 항목에 자동으로 상속됩니다. 다른 유형 그러나 제약 조건은 상속되지 않습니다.

토토 결과은 둘 이상의 상위 토토 결과에서 상속될 수 있습니다. 상위 항목에 의해 정의된 열의 합집합이 있는 경우 토토 결과. 하위 토토 결과 정의에 선언된 모든 열은 다음과 같습니다. 이것들에 추가되었습니다. 동일한 컬럼명이 여러개 나타나는 경우 상위 토토 결과 또는 상위 토토 결과과 하위 토토 결과 모두 정의하면 이 열은"병합"그러므로 다음 열에는 단 하나의 열만 있습니다. 아이 토토 결과. 병합하려면 열에 동일한 데이터가 있어야 합니다. 유형을 지정하지 않으면 오류가 발생합니다. 병합된 열에는 다음 중 하나에서 오는 모든 검사 제약 조건의 복사본 열 정의가 나온 것입니다.

토토 결과 상속은 현재 다음을 사용하여만 정의할 수 있습니다.PostgreSQL : 문서 : 8.1 : 토토 사이트 추천 작성성명. 관련 진술토토 결과 생성 그대로상속 지정을 허용하지 않습니다. 없다 기존 토토 결과을 토토 결과로 만들기 위해 상속 링크를 추가하는 방법 어린이 토토 결과. 마찬가지로 상속을 제거할 방법도 없습니다. 정의된 하위 토토 결과의 링크 토토 결과을 완전히 떨어뜨렸습니다. 상위 토토 결과을 삭제할 수 없습니다. 하위 항목은 그대로 유지됩니다. 토토 결과을 제거하고 싶다면 모든 하위 항목을 삭제하는 쉬운 방법 중 하나는 상위 항목을 삭제하는 것입니다. 가 있는 토토 결과캐스케이드옵션.

PostgreSQL : 문서 : 8.1 : 윈 토토 Table할 것이다 열 데이터 정의의 변경 사항을 전파하고 확인합니다. 상속 계층 구조를 제한합니다. 또, 하락 상위 토토 결과의 열이나 제약 조건은 다음 경우에만 가능합니다. 를 사용하여캐스케이드옵션.토토 결과 변경중복에 대해서도 동일한 규칙을 따릅니다. 동안 적용되는 열 병합 및 거부토토 결과 생성.

5.8.1. 주의사항

토토 결과 액세스 권한은 자동으로 상속되지 않습니다. 따라서 상위 토토 결과에 액세스하려는 사용자는 다음을 수행해야 합니다. 모든 하위 항목에 대해 작업을 수행할 수 있는 권한이 있거나 토토 결과도 마찬가지입니다. 그렇지 않으면표기법. 기존 토토 결과에 새 하위 토토 결과을 추가하는 경우 상속 계층 구조, 필요한 모든 항목을 부여하도록 주의하세요. 그것에 대한 권한이 있습니다.

상속 기능의 심각한 제한은 다음과 같습니다. 인덱스(고유 제약 조건 포함) 및 외래 키 제약 조건은 단일 토토 결과에만 적용되며 해당 토토 결과에는 적용되지 않습니다. 상속 자녀. 이는 참조 및 참조 모두에 해당됩니다. 외래 키 제약 조건의 참조 측면. 따라서, 위 예의 조건:

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

  • 마찬가지로 우리가 그것을 지정한다면도시.이름 참조다른 토토 결과, 이것은 제약 조건이 자동으로 전파되지 않습니다.대문자. 이 경우에는 일할 수 있습니다. 수동으로 추가하여 주변에 동일한 내용을 추가합니다.참조다음으로 제한대문자.

  • 다른 토토 결과의 열을 지정참조 도시(이름)다음을 허용할 것입니다. 다른 토토 결과에는 도시 이름이 포함되지만 대문자 이름은 포함되지 않습니다. 이 경우에는 좋은 해결 방법이 없습니다.

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

지원 중단됨:이전 버전에서토토 결과, 기본 동작은 다음과 같습니다. 쿼리에 하위 토토 결과을 포함하지 마십시오. 이는 다음과 같은 것으로 밝혀졌습니다. 오류가 발생하기 쉽고 SQL을 위반합니다. 표준. 이전 구문에서 하위 토토 결과을 포함하려면 당신은 추가합니다*토토 결과 이름에. 예를 들면:

SELECT * 도시에서*;

당신은 여전히 하위 토토 결과 스캔을 명시적으로 지정할 수 있습니다 추가하여*뿐만 아니라 다음을 작성하여 하위 토토 결과을 스캔하지 않도록 명시적으로 지정. 하지만 버전부터 시작하면 7.1에서 장식되지 않은 토토 결과 이름의 기본 동작은 다음과 같습니다. 하위 토토 결과도 스캔하는 반면 기본값 이전에는 그러지 말라는 것이었습니다. 이전 기본 동작을 얻으려면 비활성화하십시오.sql_inheritance구성 옵션.