database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 4968 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 4968
자습서 - 3. 고급 기능 - 3.5 상속
작성자
김상기(ioseph)
작성일
2003-09-23 04:11
조회수
6,800

원문: http://database.sarang.net/database/postgres/manual/manual-7.3/tutorial-inheritance.html

옮긴이: 김상기

 

3.5. 상속

상속은 객체지향 데이터베이스에서 사용하는 개념입니다. 상속은 데이터베이스 설계 방법에 대한 새로운 가능성을 제시합니다.

 

cities (도시) 테이블과 capitals (주도 州都) 테이블 두 개를 만들어봅시다. 실 세계의 개념으로 본다면, 도시를 모두 찾아보자면, 당연히 주도도 포함되겠지요. 여기서 테이블 상속 개념은 출발합니다. 만일 전통적인 개념으로 자료구조를 설계한다면 다음과 같이 하겠지요:

CREATE TABLE capitals (
  name       text,
  population real,
  altitude   int,    -- (in ft)
  state      char(2)
);

CREATE TABLE non_capitals (
  name       text,
  population real,
  altitude   int     -- (in ft)
);

CREATE VIEW cities AS
  SELECT name, population, altitude FROM capitals
    UNION
  SELECT name, population, altitude FROM non_capitals;

이렇게 하고, cities 뷰를 이용하면, 모든 도시를 찾을 수 있습니다. 하지만, 하나의 이름으로 자료를 바꾸려고 할 때는 결국 두번의 쿼리가 있어야합니다. 이 문제를 다음과 같이 풀어봅니다:

CREATE TABLE cities (
  name       text,
  population real,
  altitude   int     -- (in ft)
);

CREATE TABLE capitals (
  state      char(2)
) INHERITS (cities);

이때, capitals 테이블에서 지정한 inherits 예약어가 바로 테이블을 상속받겠다는 것을 나타냅니다. 윗 경우라면, cities 테이블의 모든 칼럼을 상속 받는 것을 의미합니다. 윗 name 칼럼의 text 자료형은 PostgreSQL에서 사용하는 고유한 가변길이 문자열 자료형입니다. PostgreSQL에서는 하나의 테이블은 자기 자신이 상위테이블 (하나도 상속 받지 않은 테이블)이 되거나 여러개의 상위 테이블을 상속받을 수 있습니다. 또한 그 테이블의 자료 조회는 하위 테이블의 모든 자료를 포함해서 조회합니다.

 

예를 들어, 고도가 500 ft. 보다 큰 도시들을 모두 찾을 때, 물론 이때 주도도 포함하고자 할 때는 다음과 같은 쿼리를 이용합니다:

SELECT name, altitude
  FROM cities
  WHERE altitude > 500;

이 쿼리의 결과는 다음과 같습니다:

   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953
 Madison   |      845
(3 rows)
    

이때, 주도를 빼고 검색하려면 다음과 같이 ONLY 예약어를 사용합니다:

SELECT name, altitude
    FROM ONLY cities
    WHERE altitude > 500;

   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953
(2 rows)

이 ONLY 예약어는 앞에서 이야기한 모든 자료 조작 명령 -- SELECT, UPDATE, DELETE -- 에서 그대로 적용됩니다. 물론 빠진다면, 그 테이블의 하위 테이블 모두 적용됩니다.

[Top]
No.
제목
작성자
작성일
조회
5183Recent PostgreSQL Optimizer Improvements - Tom Lane [1]
김상기
2004-02-03
5743
5043유저 가이드 schema 전체번역한 것입니다. [1]
이현희
2003-11-09
9721
4969자습서 - 3. 고급 기능 - 3.6 끝맺음 [2]
김상기
2003-09-23
6470
4968자습서 - 3. 고급 기능 - 3.5 상속
김상기
2003-09-23
6800
4967자습서 - 3. 고급 기능 - 3.4 트랜잭션
김상기
2003-09-23
7117
4961자습서 - 3. 고급 기능 - 3.3 Foreign Key [1]
김상기
2003-09-18
6488
4959자습서 - 3. 고급 기능 - 3.2 뷰(view)
김상기
2003-09-18
6283
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.048초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다