"테이블 상속" 은 "클래스 상속"과 다른 것을 의미 하며 다른 용도로 사용됩니다.
Postgres는 데이터 정의에 관한 것입니다. 때때로 정말 복잡한 데이터 정의. OOP (일반적인 Java 색상 의미에서)는 단일 원자 구조의 데이터 정의에 동작을 종속시키는 것입니다. 여기서 "상속"이라는 단어의 목적과 의미는 크게 다릅니다.
OOP 영역에서 정의 할 수 있습니다 (여기서 구문과 의미론이 매우 느슨 함).
import life
class Animal(life.Autonomous):
metabolism = biofunc(alive=True)
def die(self):
self.metabolism = False
class Mammal(Animal):
hair_color = color(foo=bar)
def gray(self, mate):
self.hair_color = age_effect('hair', self.age)
class Human(Mammal):
alcoholic = vice_boolean(baz=balls)
이에 대한 표는 다음과 같습니다.
CREATE TABLE animal
(name varchar(20) PRIMARY KEY,
metabolism boolean NOT NULL);
CREATE TABLE mammal
(hair_color varchar(20) REFERENCES hair_color(code) NOT NULL,
PRIMARY KEY (name))
INHERITS (animal);
CREATE TABLE human
(alcoholic boolean NOT NULL,
FOREIGN KEY (hair_color) REFERENCES hair_color(code),
PRIMARY KEY (name))
INHERITS (mammal);
그러나 행동은 어디에 있습니까? 그들은 어디에도 맞지 않습니다. 데이터베이스는 절차 적 코드가 아니라 데이터와 관련되기 때문에 이것은 데이터베이스 세계에서 논의되는 "객체"의 목적이 아닙니다. 계산을 수행하기 위해 데이터베이스에 함수를 작성할 수 있지만 (종종 아주 좋은 생각이지만이 경우에 맞는 것은 아닙니다) 함수는 메서드와 동일하지 않습니다. 즉, 말하는 OOP의 형태로 이해되는 메서드입니다. 의도적으로 유연성이 떨어집니다.
계통도 장치로서 상속에 대해 지적해야 할 사항이 한 가지 더 있습니다. Postgres 9.2부터는 모든 파티션 / 테이블 패밀리 구성원에 대해 한 번에 외래 키 제약 조건을 참조 할 수있는 방법이 없습니다. 이를 수행하기 위해 검사를 작성하거나 다른 방법으로 해결할 수 있지만 기본 제공 기능은 아닙니다 (실제로는 복잡한 인덱싱 문제로 귀결되며 아무도 자동으로 만드는 데 필요한 비트를 작성하지 않았습니다). 이러한 목적으로 테이블 상속을 사용하는 대신 개체 상속을 위해 데이터베이스에서 더 나은 일치는 테이블에 대한 도식 확장을 만드는 것입니다. 이 같은:
CREATE TABLE animal
(name varchar(20) PRIMARY KEY,
ilk varchar(20) REFERENCES animal_ilk NOT NULL,
metabolism boolean NOT NULL);
CREATE TABLE mammal
(animal varchar(20) REFERENCES animal PRIMARY KEY,
ilk varchar(20) REFERENCES mammal_ilk NOT NULL,
hair_color varchar(20) REFERENCES hair_color(code) NOT NULL);
CREATE TABLE human
(mammal varchar(20) REFERENCES mammal PRIMARY KEY,
alcoholic boolean NOT NULL);
이제 외래 키 참조로 안정적으로 사용할 수있는 동물의 인스턴스에 대한 표준 참조가 있고 확장 데이터의 "다음"테이블을 가리키는 xxx_ilk 정의 테이블을 참조하는 "ilk"열이 있습니다 ( 또는 ilk가 제네릭 유형 자체 인 경우 없음을 나타냅니다.) 이러한 종류의 스키마에 대해 테이블 함수, 뷰 등을 작성하는 것은 매우 쉬워서 대부분의 ORM 프레임 워크는 OOP 스타일 클래스 상속에 의존하여 개체 유형의 패밀리를 생성 할 때 백그라운드에서 이러한 종류의 작업을 정확하게 수행합니다.