Postgresql 9.3.25 문서 | ||||
---|---|---|---|---|
이전 | 스포츠 토토 베트맨 : 문서 : 9.3 : 데이터 정의 | 5 장 데이터 정의 | PostgreSQL : 문서 : 9.3 : 스포츠 토토 베트맨 |
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');
우리는 데이터가 어떻게 든 라우팅되기를 바랍니다.캐피탈무지개 토토이지만 그렇지 않습니다 일어나다:삽입항상 정확히 삽입하십시오 지정된 무지개 토토. 경우에 따라 리디렉션 할 수 있습니다 규칙을 사용한 삽입 (PostgreSQL : 문서 : 9.3 : 사설 토토 시스템). 그러나 위의 경우에는 도움이되지 않습니다.이기 때문입니다.도시무지개 토토에는 포함되지 않습니다 열State규칙을 적용하기 전에 거부됩니다.
상위 무지개 토토의 모든 검사 제약 조건 및 널없는 제약 조건 아이들이 자동으로 상속받습니다. 다른 유형의 제약 조건 (고유, 기본 키 및 외국 키 제약)이 있습니다 상속되지 않았습니다.
무지개 토토은 하나 이상의 상위 무지개 토토에서 상속 될 수 있습니다. case it has the union of the columns defined by the parent tables. Child Table의 정의에서 선언 된 모든 열은 다음에 추가됩니다. 이것들. 동일한 열 이름이 여러 상위 무지개 토토에 나타나면 또는 부모 무지개 토토과 자녀의 정의에서 열은"합병"어린이 무지개 토토의 그러한 열만. 병합 되려면 열이 있어야합니다 동일한 데이터 유형이 있으면 오류가 발생합니다. 합병 열은 모든 수표 제약 조건의 사본이 있습니다. 열 정의 중 하나가 출신이며 표시됩니다. 그들 중 하나라도 널 그렇지 않다.
무지개 토토 상속은 일반적으로 아동 무지개 토토 일 때 설정됩니다 를 사용하여 생성됩니다.상속조항 그만큼PostgreSQL : 문서 : 9.3 : 스포츠 토토 작성진술. 또는 이미 호환 가능한 방식으로 정의 된 무지개 토토 를 사용하여 새로운 부모 관계가 추가 될 수 있습니다.상속변형Alter Table. 이를 위해 새로운 아이 무지개 토토은 이미 동일한 이름과 유형의 열을 포함해야합니다. 부모의 열. 또한 확인 제약 조건도 포함되어야합니다 부모의 이름과 동일한 이름과 점검 표현을 확인합니다. 마찬가지로 상속 링크는를 사용하여 어린이에서 제거 할 수 있습니다.상속 없음변형Alter Table. 동적으로 추가하고 제거합니다 상속 링크는 상속이있을 때 유용 할 수 있습니다. 관계가 무지개 토토 파티셔닝에 사용되고 있습니다 (참조섹션 5.9).
나중에 호환 가능한 무지개 토토을 만드는 편리한 방법 중 하나 새로운 아이가 만들어지는 것은를 사용하는 것입니다.좋아요조항무지개 토토 생성. 이것은 새로운 것을 만듭니다 소스 무지개 토토과 동일한 열이있는 무지개 토토. 있는 경우check소스에 정의 된 제약 조건 무지개 토토,제약 포함옵션좋아요새 자녀로 지정해야합니다 고려할 부모와 일치하는 제약 조건이 있어야합니다 호환.
자녀 중 누구라도 부모 무지개 토토을 떨어 뜨릴 수 없습니다. 유지하다. 어린이 무지개 토토의 칼럼이나 제약 조건을 확인할 수는 없습니다. 부모 무지개 토토에서 상속 된 경우 삭제 또는 변경. 만약에 당신은 무지개 토토과 모든 후손을 제거하고 싶습니다. 로 부모 무지개 토토을 떨어 뜨리는 것입니다.캐스케이드옵션.
토토 PostgreSQL전파 할 것입니다 열 데이터 정의의 변경 및 제약 조건을 확인합니다. 상속 계층. 다시 한 번, 열에 의존하는 열을 떨어 뜨 렸습니다 다른 무지개 토토은를 사용할 때만 가능합니다.캐스케이드옵션.Alter Table중복 열 병합 및 거부에 대한 동일한 규칙을 따릅니다. 그 동안 적용무지개 토토 생성.
무지개 토토 액세스 권한을 처리하는 방법에 유의하십시오. 부모를 쿼리합니다 무지개 토토은 추가없이 하위 무지개 토토의 데이터에 자동으로 액세스 할 수 있습니다. 액세스 권한 점검. 이것은 외관을 보존합니다 데이터는 부모 무지개 토토에 (또한)입니다. 어린이 무지개 토토에 액세스 그러나 직접 자동으로 허용되지 않으며 필요합니다 추가 특권이 부여됩니다.
모든 SQL 명령이 상속에 대해 작업 할 수있는 것은 아닙니다. 계층. 데이터 쿼리, 데이터에 사용되는 명령 수정 또는 스키마 수정 (예 :select, 업데이트, 삭제, 대부분의 변형Alter 무지개 토토, 그러나삽입또는Alter Table ... Rename) 일반적으로 기본값 자식 무지개 토토 포함 및 지원전용이를 제외하기위한 표기법. 명령 데이터베이스 유지 관리 및 튜닝 (예 :REINDEX, 진공) 일반적으로 개별, 물리적 무지개 토토 만 작동하며 지원하지 않습니다. 상속 계층에 대한 재발. 각각의 행동 각 개별 명령은 참조 페이지에 문서화되어 있습니다 (참조 I,SQL 명령).
상속 기능의 심각한 제한은 인덱스입니다. (고유 한 제약 포함) 및 외국 주요 제약 조건 만 상속 자녀가 아닌 단일 무지개 토토에 적용하십시오. 이것은 외국 키의 참조 및 참조 측면 모두에서 사실 강제. 따라서 위의 예에서 :
우리가 선언 한 경우도시.이름고유 한또는 A기본 키, 이것은를 멈추지 않을 것입니다캐피탈행이있는 무지개 토토 이름을 복제하는 행도시. 그리고 이 중복 행은 기본적으로 쿼리로 표시됩니다.도시. 사실, 기본적으로캐피탈전혀 고유 한 제약이 없을 것입니다. 그리고 같은 이름의 여러 행을 포함 할 수 있습니다. 당신은 할 수 있습니다 에 독특한 제약을 추가하십시오.캐피탈, 그러나 이것은에 비해 중복을 방해하지 않습니다.도시.
마찬가지로, 우리가 그것을 명시해야한다면도시.이름 참조다른 무지개 토토, 이것 제약 조건은 자동으로 전파되지 않습니다캐피탈. 이 경우 작업을 수행 할 수 있습니다 수동으로 동일한 추가참조제약 조건캐피탈.
다른 무지개 토토의 열 지정참조 도시 (이름)다른 무지개 토토을 허용합니다 도시 이름을 포함하지만 자본 이름은 포함되지 않습니다. 좋은 것은 없습니다 이 경우 해결 방법.
이러한 결함은 아마도 미래에 고정 될 것입니다 릴리스이지만 그 동안 상당한 치료가 필요합니다. 상속이 응용 프로그램에 유용한 지 여부를 결정합니다.