| PostgreSQL 9.1.24 문서 | ||||
|---|---|---|---|---|
| 토토 핫 PostgreSQL : 문서 : 9.1 : Schemas | 토토 핫 : 문서 : 9.1 : 데이터 정의 | 제5장. 데이터 정의 | PostgreSQL : 문서 : 9.1 : 토토 베이 | |
포스트그레SQL토토 핫 구현 상속은 데이터베이스 디자이너에게 유용한 도구가 될 수 있습니다. (SQL:1999 이상에서는 유형 상속 기능을 정의합니다. 여기에 설명된 기능과 여러 측면에서 다릅니다.)
예를 들어 시작해 보겠습니다. 우리가 도시를 위한 데이터 모델. 각 주에는 여러 개의 도시가 있지만 단 하나의 도시만 있습니다. 자본. 우리는 수도를 빠르게 되찾고 싶습니다. 특정 주에 대해. 이는 두 개를 생성하여 수행할 수 있습니다. 토토 핫 중 하나는 주의 수도용이고 다른 하나는 주도가 아닌 도시용입니다. 수도. 하지만 데이터를 요청하면 어떻게 되나요? 수도인지 아닌지에 관계없이 도시에 대해? 는 상속 기능은 이 문제를 해결하는 데 도움이 될 수 있습니다. 우리는 정의합니다대문자토토 핫이 다음에서 상속됨도시:
토토 핫 도시 생성(
이름 텍스트,
인구 부동,
고도 int - 피트 단위
);
CREATE TABLE 대문자(
상태 문자(2)
) 상속(도시);
이 경우,대문자토토 핫상속상위 항목의 모든 열 토토 핫,도시. 주 수도 또한 추가 열이 있습니다.상태그건 상태를 보여줍니다.
에포스트그레SQL, 토토 핫은 다음을 수행할 수 있습니다. 0개 이상의 다른 토토 핫에서 상속되며 쿼리는 참조할 수 있습니다. 토토 핫의 모든 행 또는 토토 핫의 모든 행과 해당 토토 핫의 모든 행 하위 토토 핫. 후자의 동작이 기본값입니다. 에 대한 예를 들어, 다음 쿼리는 모든 도시의 이름을 찾습니다. 이상의 고도에 위치한 주도를 포함하여 500피트:
SELECT 이름, 고도
도시에서
고도 500;
다음의 샘플 데이터가 제공됩니다.PostgreSQL튜토리얼(참조섹션 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
상속은 다음의 데이터를 자동으로 전파하지 않습니다.삽입또는복사상속 계층의 다른 토토 핫에 명령합니다. 우리의 예를 들면 다음과 같습니다삽입문장 실패합니다:
도시에 삽입(이름, 인구, 고도, 주)
VALUES ('뉴욕', NULL, NULL, '뉴욕');
우리는 데이터가 어떻게든 다음으로 라우팅되기를 바랄 수 있습니다.대문자토토 핫이지만 이것은 그렇지 않습니다. 발생:삽입항상 삽입 정확히 지정된 토토 핫입니다. 어떤 경우에는 다음이 가능합니다. 규칙을 사용하여 삽입을 리디렉션합니다(참조37장). 그러나 그것은 에 도움이 되지 않습니다 위의 경우는 다음과 같습니다.도시토토 핫 열을 포함하지 않습니다.상태, 따라서 규칙이 적용되기 전에 명령이 거부됩니다. 적용되었습니다.
상위 항목에 대한 모든 검사 제약 조건 및 null이 아닌 제약 조건 토토 핫은 해당 자식에게 자동으로 상속됩니다. 다른 유형 제약 조건(고유 키, 기본 키, 외래 키 제약 조건) 상속되지 않습니다.
토토 핫은 하나 이상의 상위 토토 핫에서 상속될 수 있습니다. 상위 항목에 의해 정의된 열의 합집합이 있는 경우 토토 핫. 하위 토토 핫 정의에 선언된 모든 열은 다음과 같습니다. 이것들에 추가되었습니다. 동일한 컬럼명이 여러개 나타나는 경우 상위 토토 핫 또는 상위 토토 핫과 하위 토토 핫 모두 정의하면 이 열은"병합"따라서 다음에는 그러한 열이 하나만 있습니다. 아이 토토 핫. 병합하려면 열에 동일한 데이터가 있어야 합니다. 유형을 지정하지 않으면 오류가 발생합니다. 병합된 열에는 다음 중 하나에서 오는 모든 검사 제약 조건의 복사본 해당 열 정의는 null이 아닌 것으로 표시됩니다. 그 중 하나입니다.
토토 핫 상속은 일반적으로 하위 항목이 토토 핫은 다음을 사용하여 생성됩니다.상속의 절PostgreSQL : 문서 : 9.1 : 토토 사이트 추천 작성성명. 또는 이미 정의된 토토 핫 호환 가능한 방식으로 다음을 사용하여 새로운 상위 관계를 추가할 수 있습니다.상속변형토토 핫 변경. 그러기 위해서는 새로운 아이가 토토 핫에는 이름과 유형이 동일한 열이 이미 포함되어 있어야 합니다. 부모의 열로. 수표도 포함해야 함 동일한 이름과 검사 표현식을 가진 제약 조건 부모. 마찬가지로 상속 링크도 다음에서 제거될 수 있습니다. 어린이는상속 없음변형토토 핫 변경. 동적으로 추가하고 이와 같은 상속 링크를 제거하는 것은 다음과 같은 경우에 유용할 수 있습니다. 토토 핫 파티셔닝에 상속 관계가 사용되고 있습니다. (참조PostgreSQL : 문서 : 9.1 : 토토 베이).
호환되는 토토 핫을 생성하는 편리한 방법 중 하나는 다음과 같습니다. 나중에 새로운 자식을 만들려면좋아요절만들기 표. 그러면 다음과 동일한 열이 포함된 새 토토 핫이 생성됩니다. 소스 토토 핫. 있다면확인소스 토토 핫에 정의된 제약 조건,제약조건 포함옵션좋아요새 하위 항목이 다음과 같이 지정되어야 합니다. 고려할 상위 항목과 일치하는 제약 조건이 있음 호환됩니다.
상위 토토 핫은 하위 토토 핫이 있는 동안 삭제할 수 없습니다. 남아있다. 하위 토토 핫의 열이나 제약 조건을 확인할 수 없습니다. 부모로부터 상속된 경우 삭제되거나 변경됩니다. 토토 핫. 토토 핫과 그 하위 항목을 모두 제거하려면 다음을 수행하십시오. 한 가지 쉬운 방법은를 사용하여 상위 토토 핫을 삭제하는 것입니다.캐스케이드옵션.
토토 사이트 PostgreSQL : 문서 : 9.1 : Alter Table전파됩니다 열 데이터 정의의 변경 사항 및 제약 조건 확인 상속 계층. 다시 한 번 다음과 같은 열을 삭제합니다. 다른 토토 핫에 의존하는 것은를 사용할 때만 가능합니다.캐스케이드옵션.토토 핫 변경중복에 대해서도 동일한 규칙을 따릅니다. 동안 적용되는 열 병합 및 거부토토 핫 생성.
토토 핫 액세스 권한이 어떻게 처리되는지 참고하세요. 쿼리 중 상위 토토 핫은 자동으로 하위 토토 핫의 데이터에 액세스할 수 있습니다. 추가 액세스 권한 확인 없이. 이는 데이터가 상위 토토 핫에도 있는 것처럼 보입니다. 접근 중 그러나 하위 토토 핫은 직접적으로 허용되지 않습니다. 부여하려면 추가 권한이 필요합니다.
모든 SQL 명령이 작동할 수 있는 것은 아닙니다. 상속 계층. 데이터에 사용되는 명령 쿼리, 데이터 수정 또는 스키마 수정(예:선택, 업데이트, 삭제, 대부분 의 변형토토 핫 변경하지만 아님삽입또는변경 토토 핫 ... 이름 바꾸기) 일반적으로 기본적으로 하위 항목을 포함합니다. 토토 핫을 지원하고만표기법 그들을 제외합니다. 데이터베이스 유지 관리를 수행하는 명령 및 튜닝(예:REINDEX, 진공)는 일반적으로 개인에게만 작동합니다. 물리적 토토 핫이며 상속에 대한 반복을 지원하지 않습니다. 계층. 각 개별 명령의 해당 동작 참조 페이지()에 설명되어 있습니다.참조 I,SQL 명령).
상속 기능의 심각한 제한은 다음과 같습니다. 인덱스(고유 제약 조건 포함) 및 외래 키 제약 조건은 단일 토토 핫에만 적용되며 해당 토토 핫에는 적용되지 않습니다. 상속 자녀. 이는 참조 및 참조 모두에 해당됩니다. 외래 키 제약 조건의 참조 측면. 따라서, 위 예의 조건:
우리가 선언했다면도시.이름되다고유또는 a기본 키, 이것은 멈추지 않을 것입니다.대문자행이 있는 토토 핫 이름이 행을 복제하는 경우도시. 그리고 그 중복 행은 기본적으로 다음의 쿼리에 표시됩니다.도시. 실제로 기본적으로대문자고유 제약조건이 없습니다. 따라서 동일한 내용을 가진 여러 행이 포함될 수 있습니다. 이름. 고유 제약 조건을 추가할 수 있습니다.대문자, 하지만 이것이 방해가 되지는 않습니다. 중복과 비교도시.
마찬가지로, 우리가 그것을 지정한다면도시.이름 참조다른 토토 핫, 이것은 제약 조건이 자동으로 전파되지 않습니다.대문자. 이 경우에는 일할 수 있습니다. 수동으로 추가하여 주변에 동일한 내용을 추가합니다.참조다음으로 제한대문자.
다른 토토 핫의 열을 지정참조 도시(이름)허용할 것입니다 다른 토토 핫에는 도시 이름이 포함되지만 대문자 이름은 포함되지 않습니다. 이 경우에는 좋은 해결 방법이 없습니다.
이러한 결함은 아마도 미래에 수정될 것입니다 하지만 그 동안에는 상당한 주의가 필요합니다. 상속이 귀하에게 유용한지 여부를 결정합니다. 신청합니다.