5.8. »ó¼Ó

PostgreSQL´Â µ¥ÀÌÅͺ£À̽º ¼³°èÀÚ¿¡°Ô ÀÖ¾î Æí¸®ÇÑ Å×À̺íÀÇ »ó¼ÓÀ» ½ÇÇàÇϰí ÀÖ½À´Ï´Ù (SQL:1999ÀÌÈÄ´Â ÇüÅÂÀÇ »ó¼ÓÀ» Á¤ÀÇÇϰí ÀÖÁö¸¸, ¿©±â¼­ Áø¼úµÇ°í ÀÖ´Â »ó¼Ó°ú´Â ¸¹Àº Á¡¿¡¼­ Â÷À̰¡ ³³´Ï´Ù).

¿ì¼± ¿¹·ÎºÎÅÍ ½ÃÀÛÇսôÙ. ½Ã(cities)ÀÇ µ¥ÀÌÅÍ ¸ðµ¨À» ÀÛ¼ºÇÏ·Á°í ÇÑ´Ù°í °¡Á¤ÇØ Áֽʽÿä. °¢°¢ÀÇ ÁÖ¿¡´Â ¸¹Àº ½Ã°¡ ÀÖÁö¸¸, ¼öµµ´Â 1°³ÀÔ´Ï´Ù. ƯÁ¤ÇÑ ÁÖ¿¡¼­ ¼öµµ¸¦ ºü¸£°Ô °Ë»öÇÏ°í ½Í´Ù°í ÇÕ´Ï´Ù. ÀÌ´Â 2°³ÀÇ Å×À̺íÀ» ÀÛ¼ºÇÏ´Â °ÍÀ¸·Î½á °¡´ÉÇÕ´Ï´Ù. 1°³´Â ¼öµµÀÇ Å×À̺í·Î, ÀÌÁ¦ 1°³´Â ¼öµµ°¡ ¾Æ´Ñ Å×À̺íÀÔ´Ï´Ù. ±×·¯³ª ¼öµµÀÎÁö ¾Æ´ÑÁö¿Í °ü·ÃµÇÁö ¾ÊÀº ½Ã¿¡ ´ëÇÑ µ¥ÀÌÅ͸¦ Äõ¸®ÇßÀ» ¶§´Â ¹«¾ùÀÌ ÀϾ±î¿ä? »ó¼ÓÀº ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. cities·ÎºÎÅÍ »ó¼ÓµÇ´Â capitalsÅ×À̺íÀ» Á¤ÀÇÇÕ´Ï´Ù.

CREATE TABLE cities (
    name            text,
    population      float,
    altitude        int     -- in feet
);

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

ÀÌ °æ¿ì, capitalsÅ×À̺íÀº ±× ºÎ¸ð Å×À̺íÀÎcitiesÅ×À̺íÀÇ ¿­À» ¸ðµÎ»ó¼ÓÇÕ´Ï´Ù. ¼öµµ´Â 1°³ÀÇ Ãß°¡ ¿­state¸¦ °¡Á®Áö°í, ÁÖ¸¦ Ç¥ÇöÇÕ´Ï´Ù.

PostgreSQL¿¡¼­´Â 1°³ÀÇ Å×À̺íÀº 0ÀÌ»óÀÇ Å×ÀÌºí¿¡¼­ »ó¼ÓÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ¶ÇÇÑ, Äõ¸®´Â Å×À̺íÀÇ ¸ðµç Çà, ¶Ç´Â Å×À̺íÀÇ ¸ðµç Çà¿¡ »ó¼ÓµÈ Å×À̺íÀÇ ¸ðµç ÇàÀ» ÂüÁ¶ÇÕ´Ï´Ù. ÈÄÀÚ°¡ µðÆúÆ®ÀÇ µ¿ÀÛÀÌ µË´Ï´Ù. ¿¹¸¦ µé¸é ´ÙÀ½ÀÇ Äõ¸®´Â 500ÇÇÆ®ºÎÅÍ À§¿¡ À§Ä¡Çϰí ÀÖ´Â ¼öµµ¸¦ Æ÷ÇÔÇÑ, ¸ðµç ½ÃÀÇ À̸§À» °Ë»öÇÕ´Ï´Ù.

SELECT name, altitude
    FROM cities
    WHERE altitude > 500;

PostgreSQLÆ©Å丮¾ó¿¡¼­ °¡Á®¿Â »ùÇà µ¥ÀÌÅÍÀÔ´Ï´Ù(ÀÚ¼¼ÇÑ »çÇ×Àº Section 2.1À» ÂüÁ¶ÇØ Áֽʽÿä). ÀÌ Äõ¸®´Â ÀÌÇÏÀÇ °á°ú¸¦ Ãâ·ÂÇÕ´Ï´Ù.

   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953
 Madison   |      845

ÇÑÆí, ´ÙÀ½ Äõ¸®´Â ¼öµµ°¡ ¾Æ´Ñ 500ÇÇÆ®ºÎÅÍ À§¿¡ À§Ä¡Çϰí ÀÖ´Â ¸ðµç ½Ã¸¦ °Ë»öÇÕ´Ï´Ù.

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

   name    | altitude
-----------+----------
 Las Vegas |     2174
 Mariposa  |     1953

¿©±â¼­ONLYŰ¿öµå´Â Äõ¸®°¡citiesÅ×ÀÌºí¸¸À» ´ë»óÀ¸·Î ÇØcitiesÀÌÇÏÀÇ »ó¼Ó °èÃþ¿¡ ÀÖ´Â Å×À̺íÀº ´ë»óÀ¸·Î ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. Áö±Ý±îÁö ³íÀÇÇÑ Ä¿¸Çµå°¡ ¸¹°í —SELECT, UPDATE±×¸®°íDELETE —°¡ONLYŰ¿öµå¸¦ ¼­Æ÷Æ®Çϰí ÀÖ½À´Ï´Ù.

°æ¿ì¿¡ µû¶ó¼­´Â ƯÁ¤ÇÑ ÇàÀÌ ¾î´À Å×ÀÌºí¿¡¼­ ¿Â °ÍÀÎÁö ¾Ë°í ½ÍÀ» ¼ö ÀÖ½À´Ï´Ù. °¢°¢ÀÇ Å×ÀÌºí¿¡´Â tableoid¶ó°í ÇÏ´Â ¹ÙÅÁÀÌ µÇ´Â Å×À̺íÀ» ³ªÅ¸³»´Â ½Ã½ºÅÛ ¿­ÀÌ ÀÖ½À´Ï´Ù.

SELECT c.tableoid, c.name, c.altitude
FROM cities c
WHERE c.altitude > 500;

Ãâ·ÂÀº ÀÌÇÏ¿Í °°½À´Ï´Ù.

 tableoid |   name    | altitude
----------+-----------+----------
   139793 | Las Vegas |     2174
   139793 | Mariposa  |     1953
   139798 | Madison   |      845

(ÀÌ ¿¹¸¦ Àç»ýÇØµµ, ¾Æ¸¶ ´Ù¸¥ ¼öÄ¡ OID°¡ ÁÖ¾îÁú °ÍÀÔ´Ï´Ù.) pg_class¿Í Á¶ÀÎÇÏ´Â °ÍÀ¸·Î, Å×À̺íÀÇ ½ÇÁ¦ÀÇ À̸§À» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

SELECT p.relname, c.name, c.altitude
FROM cities c, pg_class p
WHERE c.altitude > 500 and c.tableoid = p.oid;

Ãâ·ÂÀº ÀÌÇÏ¿Í °°½À´Ï´Ù.

 relname  |   name    | altitude
----------+-----------+----------
 cities   | Las Vegas |     2174
 cities   | Mariposa  |     1953
 capitals | Madison   |      845

»ó¼ÓÀºINSERT ¶Ç´Â COPY¿¡ ÀÇÇØ, »ó¼Ó °èÃþ¿¡ ÀÖ´Â ´Ù¸¥ Å×ÀÌºí¿¡ µ¥ÀÌÅ͸¦ ÀÚµ¿À¸·Î Àü´ÞÇÒ °ÍÀÌ ¾ø½À´Ï´Ù. ÀÌ ¿¹¿¡¼­´Â ´ÙÀ½ÀÇINSERT¹®Àº ½ÇÆÐÇÕ´Ï´Ù.

INSERT INTO cities (name, population, altitude, state)
VALUES ('New York', NULL, NULL, 'NY');

µ¥ÀÌÅͰ¡, ¾î¶»°Ôµç capitalsÅ×À̺í±îÁö µµ´ÞÇÒ ¼ö ÀÖÀ¸¸é ÁÁ°ÚÁö¸¸, ±×ó·³ µÇÁö ¾Ê½À´Ï´Ù. INSERT´Â ¾ðÁ¦³ª ÁöÁ¤µÈ Å×ÀÌºí¿¡ ´ëÇØ¼­ µ¥ÀÌÅ͸¦ »ðÀÔÇÕ´Ï´Ù. ·ê(ÀÚ¼¼ÇÑ »çÇ×Àº Chapter 35À» ÂüÁ¶ÇØ Áֽʽÿä)À» »ç¿ëÇØ »ðÀÔÀ» ´Ù¸¥ ¹æÇâÀ¸·Î µ¹¸®´Â °ÍÀÌ °¡´ÉÇÑ °æ¿ìµµ ÀÖ½À´Ï´Ù. ±×·¯³ª ·êÀ» »ç¿ëÇØµµ À§¿Í °°Àº °æ¿ì¿¡´Â Àû¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ¿Ö³ÄÇϸé, citiesÅ×À̺íÀº state¿­Àº Æ÷ÇÔÇÏ°í ¾ÊÀ¸¸ç, ·êÀÌ Àû¿ëµÇ±â Àü¿¡ Ä¿¸Çµå°¡ °ÅºÎµÇ±â ¶§¹®ÀÔ´Ï´Ù.

ºÎ¸ð Å×À̺íÀÇ °Ë»ç Á¦ÇѰú not-null Á¦ÇÑÀº ÀÚ½Ä Å×ÀÌºí¿¡ ÀÚµ¿À¸·Î »ó¼ÓµË´Ï´Ù. ´Ù¸¥ Á¾·ùÀÇ Á¦ÇÑ(À¯Àϼº Á¦ÇÑ, ÁÖ Å°, ¿ÜºÎ Ű Á¦ÇÑ)Àº »ó¼ÓµÇÁö ¾Ê½À´Ï´Ù.

Å×À̺íÀº 1°³ÀÌ»óÀÇ ºÎ¸ð Å×ÀÌºí¿¡¼­ »ó¼Ó °¡´ÉÇÕ´Ï´Ù. ÀÌ °æ¿ì, Å×À̺íÀº ºÎ¸ð Å×À̺í·Î Á¤ÀÇµÈ ¿­ÀÇ ¿¬ÇÕÀÌ µË´Ï´Ù. ÀÚ½Ä Å×À̺í·Î ¼±¾ðµÈ ¿­Àº ÀÌ·¯ÇÑ ¿­¿¡ Ãß°¡µÇ°Ô µË´Ï´Ù. ¸¸¾à ºÎ¸ð Å×ÀÌºí¿¡ °°Àº À̸§ÀÇ ¿­ÀÌ ÀÖ´Â °æ¿ì, ȤÀº ºÎ¸ð Å×À̺í°ú ÀÚ½Ä Å×ÀÌºí¿¡ °°Àº À̸§ÀÇ ¿­ÀÌ ÀÖ´Â °æ¿ì´Â ¿­ÀÌ"¸ÓÁö"µÇ¾î ÀÚ½Ä Å×ÀÌºí¿¡´Â ÇϳªÀÇ ¿­ÀÌ µË´Ï´Ù. mergeµÇ·Á¸é ¿­Àº °°Àº µ¥ÀÌÅÍÇüÀ» °¡Áö°í ÀÖÀ» Çʿ䰡 ÀÖ½À´Ï´Ù. ´Ù¸¥ µ¥ÀÌÅÍÇüÀÇ °æ¿ì¿¡´Â ¿¡·¯°¡ ³³´Ï´Ù. mergeµÈ ¿­Àº ¿­À» °¡Á®¿Â Å×À̺í·Î Á¤Àǵǰí ÀÖ´ø ¸ðµç üũ Á¦ÇÑÀÇ Ä«ÇǸ¦ °¡Áý´Ï´Ù. ±×¸®°í ¾î´ÀÂÊÀ̵ç not-nullÀ» °¡Áö¸é, nullÀÌ ¾Æ´Ï¶ó´Â Ç¥°¡ ºÙ½À´Ï´Ù.

Å×ÀÌºí »ó¼ÓÀº º¸Åë, CREATE TABLE ¹®ÀåÀÇINHERITS±¸¹®¸¦ »ç¿ëÇØ, ÀÚ½Ä Å×À̺íÀ» ÀÛ¼ºÇÒ ¶§ È®¸³µË´Ï´Ù. ±× ¹Û¿¡µµ, ȣȯµÇ´Â ¹æ¹ýÀ¸·Î Á¤ÀÇµÈ Å×ÀÌºí¿¡ »õ·Î¿î ºÎ¸ð ÀÚ½Ä °ü°è¸¦ ºÙÀÌ´Â Àϵµ °¡´ÉÇÕ´Ï´Ù. À̰Ϳ¡´Â ALTER TABLE ÀÇINHERITÇü½ÄÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ ¶§¹®¿¡ »õ·Î¿î ÀÚ½Ä Å×À̺íÀº ºÎ¸ð Å×À̺í°ú °°Àº À̸§ÀÇ ¿­À» °¡Áö°í, ¿­ÀÇ ÇüÅ´ °°Àº µ¥ÀÌÅÍÇüÀ̾î¾ß ÇÕ´Ï´Ù. ¶ÇÇÑ, ºÎ¸ð Å×À̺í°ú °°Àº À̸§, °°Àº ½ÄÀÇ °Ë»ç Á¦ÇÑÀ» °¡Áö°í ÀÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ALTER TABLEÀÇNO INHERITÇü½ÄÀ» »ç¿ëÇØ, ¶È°°Àº »ó¼Ó °ü°è¸¦ ÀÚ½Ä Å×ÀÌºí¿¡¼­ ¾ø¾Ö´Â Àϵµ °¡´ÉÇÕ´Ï´Ù. ÀÌ·¯ÇÑ »ó¼Ó °ü°èÀÇ µ¿Àû Ãß°¡, µ¿Àû »èÁ¦´Â »ó¼Ó °ü°è¸¦ Å×ÀÌºí ºÐÇÒ(Section 5.9¸¦ ÂüÁ¶)·Î »ç¿ëÇϰí ÀÖ´Â °æ¿ì¿¡ À¯¿ëÇÕ´Ï´Ù.

´ÙÀ½¿¡ ÀÚ½Ä Å×À̺í·Î »ç¿ëÇÏÇÒ ¿¹Á¤ÀÎ, ȣȯ¼ºÀ» °¡Áö´Â Å×À̺íÀ» °£´ÜÇÏ°Ô ÀÛ¼ºÇÏ´Â ¹æ¹ýÀÇ Çϳª´Â CREATE TABLE·ÎLIKE±¸¹®¸¦ »ç¿ëÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ´Â ¼Ò½º Å×À̺í°ú °°Àº ¿­À» °¡Áö´Â Å×À̺íÀ» »õ·Ó°Ô ÀÛ¼ºÇÕ´Ï´Ù. »õ·Î¿î ÀÚ½Ä Å×À̺íÀÌ ¹Ýµå½Ã ºÎ¸ð Å×À̺í°ú ÀÏÄ¡ÇÏ´Â Á¦ÇÑÀ» °¡Áö°í, ȣȯ¼ºÀÌ ÀÖµµ·Ï °£ÁֵDZâ À§ÇØ, ¼Ò½º Å×À̺í·ÎCHECKÁ¦ÇÑÀÌ Á¸ÀçÇÏ´Â °æ¿ì´Â LIKE¿¡INCLUDING CONSTRAINTS¿É¼ÇÀ» ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù.

ÀÚ½Ä Å×À̺íÀÌ Á¸ÀçÇÏ´Â °æ¿ì, ºÎ¸ð Å×À̺íÀ» »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ, ÀÚ½Ä Å×ÀÌºí¿¡¼­´Â ºÎ¸ð Å×ÀÌºí¿¡¼­ »ó¼ÓÇÑ ¿­À» »èÁ¦ÇÏ´Â ÀÏÀ» º¯°æÇÒ ¼öµµ ÀÖ½À´Ï´Ù. Å×À̺í°ú ±× ¸ðµç ÀÚ¼Õ Å×À̺íÀ» »èÁ¦ÇÏ°í ½ÍÀ¸¸é, CASCADE¿É¼ÇÀ» ºÙ¿© ºÎ¸ð Å×À̺íÀ» »èÁ¦ÇÏ´Â °ÍÀÌ °£´ÜÇÑ ¹æ¹ýÀÔ´Ï´Ù.

ALTER TABLE ´Â ¿­µ¥ÀÌÅÍ Á¤ÀÇ¿Í Ã¼Å© Á¦ÇÑÀÇ º¯°æÀ» »ó¼Ó °èÃþ¿¡ ÀÖ´Â Å×ÀÌºí¿¡°Ô ÀüÇÕ´Ï´Ù. ¹Ýº¹ÀÌ µÇÁö¸¸, ºÎ¸ð Å×À̺íÀÇ ¿­À̳ª Á¦ÇÑÀÇ »èÁ¦´Â CASCADE¿É¼ÇÀ» »ç¿ëÇßÀ» ¶§¸¸ °¡´ÉÇØÁý´Ï´Ù. ALTER TABLE´Â Áߺ¹¿­ÀÇ merge½Ã¿¡ Àû¿ëµÇ´Â ·ê°ú CREATE TABLE½Ã¿¡ Àû¿ëµÇ´Â °ÅºÎÀÇ ·ê¿¡ µû¸¨´Ï´Ù.

5.8.1. °æ°í

Å×ÀÌºí¿¡ ´ëÇÑ ¾×¼¼½º Çã°¡´Â ÀÚµ¿À¸·Î »ó¼ÓµÇÁö ¾Ê½À´Ï´Ù. µû¶ó¼­ ºÎ¸ð Å×ÀÌºí¿¡ ¾×¼¼½º ÇÏ´Â À¯Àú´Â ±× ¸ðµç ÀÚ½Ä Å×ÀÌºí¿¡ ´ëÇÑ Á¶ÀÛÀÇ Çã°¡µµ ÀÌ¿Í °°ÀÌ °¡Áö°í ÀÖÁö ¾ÊÀ¸¸é ¾ÈµË´Ï´Ù. ¶Ç´Â ONLY¼±¾ðÀ» ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ½Å±Ô ÀÚ½Ä Å×À̺íÀ» ±âÁ¸ »ó¼Ó °èÃþ¿¡ Ãß°¡ÇÏ´Â °æ¿ì´Â ÇÊ¿äÇÑ ¸ðµç Çã°¡¸¦ ÀÚ½Ä Å×ÀÌºí¿¡°Ô ÁÖ´Â °ÍÀ» ÁÖÀÇÇϽʽÿä.

»ó¼Ó ±â´ÉÀÇ ¾î·Á¿î Á¦ÇÑÀ¸·Î¼­(À¯Àϼº Á¦ÇÑÀ» Æ÷ÇÔÇÑ´Ù) À妽º ¹× ¿ÜºÎ Ű´Â ±× Å×ÀÌºí¿¡¸¸ Àû¿ëµÇ°í, ±×°ÍÀ» »ó¼ÓÇÑ ÀÚ½Ä Å×ÀÌºí¿¡´Â Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. À̰ÍÀº ¿ÜºÎ ۸¦ ÂüÁ¶ÇÏ´Â Ãø, ÂüÁ¶µÇ´Â Ãø¿¡¼­µµ Àû¿ëµË´Ï´Ù. µû¶ó¼­, À§ÀÇ ¿¹¿¡¼­´Â

ÀÌ·¯ÇÑ ±â´ÉÀÇ ºÎÁ·Àº ÇâÈÄÀÇ ¸±¸®½º·Î ¾Æ¸¶ °³¼±µÉ °ÍÀÔ´Ï´Ù. ±×·¯³ª »ó¼ÓÀÌ À¯¿ëÇÑÁö´Â ÃæºÐÈ÷ ÁÖÀÇÇØ °áÁ¤ÇØ Áֽʽÿä.

Ãßõ ÇÏÁö ¾Ê´Â ¼³Á¤: 7.1 ÀÌÀüÀÇ ¸±¸®½ºÀÇPostgreSQL¿¡¼­´Â Äõ¸®¿¡ ´ëÇØ ÀÚ½Ä Å×À̺íÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â °ÍÀÌ µðÆúÆ®¿´½À´Ï´Ù. À̰ÍÀº ¿¡·¯°¡ µÇ±â ½±°í, ¶Ç SQL Ç¥ÁØ¿¡µµ ÀúÃ˵ǰí ÀÖ½À´Ï´Ù. 7.1 ÀÌÀüÀÇ ³°Àº µ¿ÀÛÀ» ½Ç½ÃÇÏ·Á¸é , sql_inheritance¼³Á¤ ¿É¼ÇÀ» ¹«È¿·Î ÇØ Áֽʽÿä.