| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 5. µ¥ÀÌÅÍ Á¤ÀÇ | Fast Forward | Next |
µ¥ÀÌÅÍÇüÀº Å×ÀÌºí¿¡ ÀúÀåÇÏ´Â µ¥ÀÌÅÍÀÇ Á¾·ù¸¦ ÇÑÁ¤Çϱâ À§ÇÑ ¹æ¹ýÀÔ´Ï´Ù. ±×·¯³ª ¸¹Àº ¾îÇø®ÄÉÀ̼ǿ¡¼´Â ÇüŰ¡ Á¦°øÇÏ´Â Á¦ÇÑ¿¡¼´Â Á¤¹ÐÇÔÀÌ ºÎÁ·ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é, Á¦Ç°ÀÇ °¡°ÝÀÌ µé¾î°¡´Â ¿¿¡´Â Á¤¼ö¸¸À» ¹Þ¾ÆµéÀ̵µ·Ï ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×·¯³ª Á¤¼ö¸¸À» ¹Þ¾ÆµéÀ̴ ǥÁØ µ¥ÀÌÅÍÇüÀº ¾ø½À´Ï´Ù. ¶ÇÇÑ, ´Ù¸¥ ¿À̳ª Çà¿¡ °ü·ÃÇØ ¿µ¥ÀÌÅ͸¦ Á¦ÇÑÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, Á¦Ç°ÀÇ Á¤º¸°¡ µé¾î°¡´Â Å×ÀÌºí¿¡¼´Â 1°³ÀÇ Á¦Ç° ¹øÈ£¿¡ ´ëÇÑ ÇàÀÌ Çϳª¿©¾ß¸¸ ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ, SQL¿¡¼´Â ¿ ¹× Å×ÀÌºí¿¡ ´ëÇÑ Á¦ÇÑÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦ÇÑ¿¡ ÀÇÇØ Å×ÀÌºí ³»ÀÇ µ¥ÀÌÅ͸¦ ÀÚÀ¯·Ó°Ô Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦ÇÑ¿¡ À§¹ÝÇÏ´Â µ¥ÀÌÅ͸¦ ¿¿¡ ÀúÀåÇÏ·Á°í Çϸé, ¿¡·¯°¡ ³³´Ï´Ù. ÀÌ´Â µðÆúÆ® °ªÀ¸·Î¼ Á¤ÀÇµÈ °ªÀ» ÀúÀåÇÏ´Â °æ¿ì¿¡µµ Àû¿ëµË´Ï´Ù.
°Ë»ç Á¦ÇÑÀº °¡Àå ÀϹÝÀûÀÎ Á¦ÇÑÀÇ Á¾·ùÀÔ´Ï´Ù. À̰ÍÀ» »ç¿ëÇØ, ƯÁ¤ÇÑ ¿ÀÇ °ªÀÌ Boolean(true-°ª)ÀÇ ½ÄÀ» ä¿ìµµ·Ï ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, Á¦Ç° °¡°ÝÀ» ¹Ýµå½Ã Á¤¼ö·Î ÇÏ·Á¸é ÀÌÇÏ¿Í °°ÀÌ ÇÕ´Ï´Ù.
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0)
);
ÀÌ¿Í °°ÀÌ, Á¦ÇÑÀÇ Á¤ÀÇ´Â µðÆúÆ® °ªÀÇ Á¤ÀÇ¿Í °°°Ô, µ¥ÀÌÅÍÇüÀÇ µÚ¿¡ ¿É´Ï´Ù. µðÆúƮġ¿Í Á¦ÇÑÀº ÀÓÀÇÀÇ ¼ø¼·Î ¿°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù. °Ë»ç Á¦ÇÑÀÇ ±¸¼ºÀº CHECKŰ¿öµåÀÇ µÚ¿¡ °è¼ÓµÇ´Â °ýÈ£·Î µÑ·¯½ÎÀÎ ½ÄÀÔ´Ï´Ù. °Ë»ç Á¦ÇѽĿ¡´Â Á¦ÇѵǴ ¿À» Æ÷ÇÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×·¸°Ô ÇÏÁö ¾ÊÀ¸¸é Á¦ÇÑÀº ±×´ÙÁö Àǹ̰¡ ¾ø´Â °ÍÀÌ µË´Ï´Ù.
Á¦ÇÑ¿¡ °³º°ÀûÀ¸·Î À̸§À» ºÙÀÏ ¼öµµ ÀÖ½À´Ï´Ù. À̸§À» ºÙÀÌ´Â °ÍÀ¸·Î, ¿¡·¯ ¸Þ¼¼Áö°¡ ¾Ë±â ½¬¿öÁö°í, º¯°æÇÏ°í ½ÍÀº Á¦ÇÑÀ» ÂüÁ¶ÇÒ ¼ö ÀÖ°Ô µË´Ï´Ù. ±¸¹®Àº ÀÌÇÏ¿Í °°½À´Ï´Ù.
CREATE TABLE products (
product_no integer,
name text,
price numeric CONSTRAINT positive_price CHECK (price > 0)
);
À§¿Í °°ÀÌ, À̸§ Á¦ÇÑÀÇ ÁöÁ¤ÀºCONSTRAINTŰ¿öµå·Î ½ÃÀÛÇØ À̰Ϳ¡ ½Äº°ÀÚ, Á¦ÇÑ Á¤ÀÇ·Î À̾îÁý´Ï´Ù. (ÀÌ ¹æ¹ýÀ¸·Î Á¦ÇѸíÀ» ÁöÁ¤ÇÏÁö ¾Ê´Â °æ¿ì´Â ½Ã½ºÅÛ¿¡ ÀÇÇØ À̸§À» ºÙÀÏ ¼ö ÀÖ½À´Ï´Ù).
°Ë»ç Á¦ÇÑ¿¡¼´Â º¹¼öÀÇ ¿À» ÂüÁ¶ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, º¸Åë °¡°Ý°ú ÇÒÀÎ °¡°ÝÀ» ÀúÀåÇÏ´Â °æ¿ì¿¡, ¹Ýµå½Ã ÇÒÀÎ °¡°ÝÀÌ º¸Åë °¡°Ýº¸´Ù ³·¾ÆÁöµµ·Ï ÇÏ°í ½Í´Ù°í ÇսôÙ.
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0),
discounted_price numeric CHECK (discounted_price > 0),
CHECK (price > discounted_price)
);
ÃÖÃÊÀÇ 2°³ÀÇ Á¦ÇÑÀº À§¿¡¼ ¼³¸íÇÑ ´ë·ÎÀÔ´Ï´Ù. 3¹øÂ°ÀÇ Á¦ÇÑ¿¡¼´Â »õ·Î¿î ±¸¹®À» »ç¿ëÇϰí ÀÖ½À´Ï´Ù. À̰ÍÀº ƯÁ¤ÇÑ ¿¿¡ ºÎ°¡µÇ´Â °ÍÀÌ ¾Æ´Ï¶ó, ÄÞ¸¶·Î ´Ü¶ôÁö¾îÁø ¿ ¸®½ºÆ® ³»ÀÇ º°°³ Ç׸ñÀ¸·Î¼ ³ªÅ¸³³´Ï´Ù. ¿ Á¤ÀÇ¿Í ÀÌ·¯ÇÑ Á¦ÇÑ Á¤ÀÇ´Â ÀÓÀÇÀÇ ¼ø¼·Î ¿°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÃÖÃÊÀÇ 2°³ÀÇ Á¦ÇÑÀ» ¿ Á¦ÇÑÀ̶ó°í ¸»ÇÕ´Ï´Ù. ÀÌ¿¡ ¹ÝÇØ, 3¹øÂ°ÀÇ Á¦ÇÑÀº ¿ Á¤Àǿʹ º°°³·Î ¾²¿©Áö¹Ç·Î, Å×À̺í Á¦ÇÑÀ̶ó°í ¸»ÇÕ´Ï´Ù. ¿ Á¦ÇÑÀ» Å×À̺í Á¦ÇÑÀ¸·Î¼ ¾µ ¼ö ÀÖÁö¸¸, ±× ¹Ý´ë´Â ¹Ýµå½Ã °¡´ÉÇÏÁö´Â ¾Ê½À´Ï´Ù. ¿Ö³ÄÇÏ¸é ¿ Á¦ÇÑÀº Á¦ÇѰú °ü·ÃµÈ ¿¸¸À» ÂüÁ¶Çϱ⠶§¹®¿¡ÀÔ´Ï´Ù(PostgreSQL´Â ÀÌ ±ÔÄ¢À» °¿äÇÏÁö ¾Ê½À´Ï´Ù. ±×·¯³ª ´Ù¸¥ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ°ú ÇÔ²² °¡µ¿½ÃŰ°í ½ÍÀº °æ¿ì´Â ÀÌ ±ÔÄ¢¿¡ µû¶ó ÁÖ¼¼¿ä). À§ÀÇ ¿¹´Â ÀÌÇÏ¿Í °°ÀÌ ¾µ ¼öµµ ÀÖ½À´Ï´Ù.
CREATE TABLE products (
product_no integer,
name text,
price numeric,
CHECK (price > 0),
discounted_price numeric,
CHECK (discounted_price > 0),
CHECK (price > discounted_price)
);
ȤÀº ´ÙÀ½°ú °°ÀÌ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0),
discounted_price numeric,
CHECK (discounted_price > 0 AND price > discounted_price)
);
¾î¶»°Ô ÇÒ±î´Â ±âÈ£ÀÇ ¹®Á¦ÀÔ´Ï´Ù.
¿ Á¦ÇѰú °°ÀÌ, Å×À̺í Á¦ÇÑ¿¡ À̸§À» ÁöÁ¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE TABLE products (
product_no integer,
name text,
price numeric,
CHECK (price > 0),
discounted_price numeric,
CHECK (discounted_price > 0),
CONSTRAINT valid_discount CHECK (price > discounted_price)
);
°Ë»ç Á¦ÇÑ¿¡¼´Â °Ë»ç½ÄÀÌ true ¶Ç´Â NULL °ªÀÏ °æ¿ì, Á¶°ÇÀÌ ¸¸Á·µÇ´Â °ÍÀ» ¼³¸íÇØ¾ß ÇÕ´Ï´Ù. ´ëºÎºÐÀÇ ½ÄÀº ¾î¶°ÇÑ ¿¬»ê Ç׸ñÀÌ NULL¿©µµ NULL¶ó°í Æò°¡µÇ¹Ç·Î, Á¦ÇÑ ´ë»óÀÇ ¿¿¡¼´Â NULL °ªÀ» ¿¹¹æÇÏÁö ¾Ê½À´Ï´Ù. ¿ÀÌ NULL °ªÀ» Æ÷ÇÔÇÏÁö ¾Êµµ·Ï Çϱâ À§Çؼ, ´ÙÀ½ Àý¿¡¼ NULLÀÌ ¾Æ´Ñ »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀ» ¼³¸íÇÕ´Ï´Ù.
not-nullÀº ´Ü¼øÈ÷, ¿ÀÌ NULL°ªÀ» ¹ÞÁö ¾Ê´Â´Ù°í °¡Á¤ÇÕ´Ï´Ù. ±¸¹® ¿¹´Â ÀÌÇÏ¿Í °°½À´Ï´Ù.
CREATE TABLE products (
product_no integer NOT NULL,
name text NOT NULL,
price numeric
);
not-nullÀº Ç×»ó ¿ Á¦ÇÑÀ¸·Î¼ ±â¼úµË´Ï´Ù. not-nullÀºCHECK ( column_name IS NOT NULL) °Ë»ç Á¦ÇѰú ±â´ÉÀûÀ¸·Î µ¿µîÇÏÁö¸¸, PostgreSQL¿¡¼´Â ¸í½ÃÀûÀ¸·Î not-nullÀ» ÀÛ¼ºÇÏ´Â ÆíÀÌ º¸´Ù È¿°úÀûÀÔ´Ï´Ù. ÀÌ ¹æ¹ýÀ¸·Î ÀÛ¼ºµÈ not-null¿¡ ¸í½ÃÀûÀÎ À̸§À» ºÙÀÏ ¼ö ¾ø´Â °ÍÀÌ °áÁ¡ÀÔ´Ï´Ù.
¹°·Ð, 1°³ÀÇ ¿¿¡ º¹¼öÀÇ Á¦ÇÑÀ» Àû¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±× ¶§¹®¿¡ Â÷·Ê·Î Á¦ÇÑÀ» ¾µ ¼ö ÀÖ½À´Ï´Ù.
CREATE TABLE products (
product_no integer NOT NULL,
name text NOT NULL,
price numeric NOT NULL CHECK (price > 0)
);
¼ø¼´Â °ü°è ¾ø½À´Ï´Ù. ¾²¿©Áø ¼ø¼¿Í üũµÇ´Â ¼ø¼´Â ¹Ýµå½Ã °°Áö´Â ¾Ê½À´Ï´Ù.
NOT NULLÁ¦ÇÑ¿¡ ´ëÇØ, ¹Ý´ëµÇ´Â NULLÁ¦ÇÑÀÌ ÀÖ½À´Ï´Ù. ÀÌ´Â ¿ÀÌ NULLÀÌ ¾Æ´Ï¸é ¾ÈµÈ´Ù´Â °ÍÀÌ ¾Æ´Õ´Ï´Ù. ±×·¯ÇÑ Á¦ÇÑÀº Àǹ̰¡ ¾ø½À´Ï´Ù. ÀÌ Á¦ÇÑÀº ¿ÀÌ NULLÀÌ¿©µµ ±¦Âú´Ù´Â µðÆúÆ®ÀÇ ÇൿÀ» ¼±ÅÃÇÒ »ÓÀÔ´Ï´Ù. NULLÁ¦ÇÑÀº Ç¥ÁØ SQL¿¡´Â Á¸ÀçÇÏÁö ¾ÊÀ¸¹Ç·Î, À̽ÄÇÒ ¼ö ÀÖ´Â ¾îÇø®ÄÉÀ̼ǿ¡¼´Â »ç¿ëÇÏÁö ¸»¾Æ¾ß ÇÕ´Ï´Ù. (ÀÌ´Â PostgreSQL¿Í ´Ù¸¥ µ¥ÀÌÅͺ£À̽º ½Ã½ºÅÛ°úÀÇ È£È¯¼ºÀ» À§ÇØ Ãß°¡µÈ ±â´É¿¡ Áö³ªÁö ¾Ê½À´Ï´Ù). ¹«¾ùº¸´Ù, ½ºÅ©¸³Æ® ÆÄÀÏ Á¦ÇÑÀÇ º¯È¯ÀÌ °£´ÜÇÏ´Ù¶ó°í ¸»ÇÏ´Â ÀÌÀ¯·Î½á ÀÌ ±â´ÉÀ» ȯ¿µÇÏ´Â À¯Àúµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, ÀÌÇÏ¿Í °°ÀÌ ½ÃÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE TABLE products (
product_no integer NULL,
name text NULL,
price numeric NULL
);
±×·± ´ÙÀ½, ¿øÇÏ´Â °÷¿¡ NOTŰ¿öµå¸¦ »ðÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù.
Tip: ´ëºÎºÐÀÇ µ¥ÀÌÅͺ£À̽º ¼³°è¿¡ ´ëÇØ, ¿ÀÇ ´ë´Ù¼ö¸¦ NOT NULL·Î ¸¶Å©ÇØ¾ß ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
À¯Àϼº Á¦ÇÑ¿¡ ÀÇÇØ, ¿À̳ª ¿ ±×·ì¿¡ Æ÷ÇԵǴ µ¥ÀÌÅͰ¡, Å×ÀÌºí ³»ÀÇ ¸ðµç Çà¿¡ °üÇØ¼ À¯ÀÏÇÏ´Ù´Â °ÍÀ» È®½ÇÈ÷ ÇÕ´Ï´Ù. ±¸¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù.
CREATE TABLE products (
product_no integer UNIQUE,
name text,
price numeric
);
¿ Á¦ÇÑÀÇ °æ¿ìÀÇ ±¸¹®Àº ÀÌÇÏ¿Í °°½À´Ï´Ù.
CREATE TABLE products (
product_no integer,
name text,
price numeric,
UNIQUE (product_no)
);
Å×À̺í Á¦ÇÑÀ¸·Î¼ ¾²¿©Áø °æ¿ì´Â ´ÙÀ½°ú °°½À´Ï´Ù.
À¯Àϼº Á¦ÇÑÀÌ ¿ ±×·ìÀ» ÂüÁ¶ÇÏ´Â °æ¿ì, °¢ ¿Àº ÄÞ¸¶·Î ´Ü¶ôÁö¾î ¸®½ºÆ®µË´Ï´Ù.
CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c)
);
ÀÌ´Â ÁöÁ¤µÈ ¿ °ªÀÇ Æí¼ºÀÌ Å×À̺í Àüü¿¡ À¯ÀÏÇÑ °ÍÀ» ÁöÁ¤Çϰí ÀÖ½À´Ï´Ù. ±×·¯³ª ¿ÀÇ ´Ù¸¥ ÇÑÂÊÀÌ À¯ÀÏÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù(º¸Åë À¯ÀÏÇÏÁö ¾Ê½À´Ï´Ù).
À¯Àϼº Á¦ÇÑ¿¡´Â ÀÌÇÏ¿Í °°ÀÌ À̸§À» ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
CREATE TABLE products (
product_no integer CONSTRAINT must_be_different UNIQUE,
name text,
price numeric
);
ÀϹÝÀûÀ¸·Î, Á¦ÇÑÀÇ ´ë»óÀÎ ¿¿¡ ´ëÇØ °°Àº °ªÀ» °¡Áö´Â ÇàÀº Å×ÀÌºí ³»¿¡ 2Çà ÀÌ»óÀÏ °æ¿ì À¯Àϼº Á¦ÇÑ À§¹ÝÀÌ µË´Ï´Ù. ±×·¯³ª ÀÌ ºñ±³¿¡¼´Â 2°³ÀÇ NULL °ªÀº °°´Ù°í °í·ÁµÇÁö ¾Ê½À´Ï´Ù. Áï, À¯Àϼº Á¦ÇÑÀÌ ÀÖ´Ù°í ÇØµµ, Á¦ÇÑ ´ë»óÀÇ ¿ÀÌ Àû¾îµµ 1°³¿¡ NULL °ªÀ» °¡Áö´Â ÇàÀ» º¹¼ö ÀúÀåÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ ÇൿÀº Ç¥ÁØ SQL¿¡ ÁذÅÇϰí ÀÖÁö¸¸, ÀÌ ±ÔÄ¢¿¡ µû¸£Áö ¾Ê´Â SQL µ¥ÀÌÅͺ£À̽ºµµ ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î, À̽ÄÇÒ ¿¹Á¤ÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ·Á¸é ÁÖÀÇÇϽʽÿä.
±â¼úÀûÀ¸·Î ÁÖ Å° Á¦ÇÑÀº ´Ü¼øÇÏ°Ô À¯Àϼº Á¦ÇѰú not-null Á¦ÇÑÀ» Á¶ÇÕÇÑ °ÍÀÔ´Ï´Ù. Áï, ´ÙÀ½ÀÇ 2°³ÀÇ Å×À̺í Á¤ÀÇ´Â °°Àº µ¥ÀÌÅ͸¦ ¹Þ¾ÆµéÀÔ´Ï´Ù.
CREATE TABLE products (
product_no integer UNIQUE NOT NULL,
name text,
price numeric
);
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
ÁÖ Å°¿¡¼µµ º¹¼ö ¿À» Á¦ÇÑÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ±¸¹®Àº À¯Àϼº Á¦ÇѰú À¯»çÇÕ´Ï´Ù.
CREATE TABLE example (
a integer,
b integer,
c integer,
PRIMARY KEY (a, c)
);
ÁÖ Å°´Â ¿ ¶Ç´Â ¿ÀÇ ±×·ìÀ», Å×ÀÌºí ³»¿¡¼ ÇàÀÇ À¯ÀÏÇÑ ½Äº°Àڷμ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù (ÀÌ´Â ÁÖ Å°ÀÇ Á¤ÀǷκÎÅÍ Á÷Á¢ÀûÀÎ °á°úÀÔ´Ï´Ù. À¯Àϼº Á¦ÇÑ¿¡¼ NULL °ªÀ» Á¦¿ÜÇÏÁö ¾Ê±â ¶§¹®¿¡, À¯ÀÏÇÑ ½Äº°ÀÚ°¡ Á¦°øµÇÁö ¾Ê´Â °ÍÀ» ÁÖÀÇÇϽʽÿä). À̰ÍÀº ¹®¼È ¹× Ŭ¶óÀÌ¾ðÆ® ¾îÇø®ÄÉÀ̼ÇÀÇ ¾çÂÊ ¸é¿¡ µµ¿òÀÌ µË´Ï´Ù. ¿¹¸¦ µé¸é, Çà °ªÀÇ º¯°æÀÌ °¡´ÉÇÑ GUI ¾îÇø®ÄÉÀ̼ǿ¡¼ ÇàÀ» À¯ÀÏÇÏ°Ô ½Äº°Çϱâ À§Çؼ´Â Å×À̺íÀÇ ÁÖ Å°¸¦ ÀÎÁöÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
1°³ÀÇ Å×ÀÌºí¿¡ Æ÷ÇÔÇÒ ¼ö ÀÖ´Â ÁÖ Å°ÀÇ ÃÖ´ë ¼ö´Â 1°³ÀÔ´Ï´Ù (À¯Àϼº Á¦ÇÑ ¹× not-null Á¦ÇÑ¿¡´Â °³¼öÀÇ Á¦ÇÑÀÌ ¾ø½À´Ï´Ù. ±â´ÉÀûÀ¸·Î´Â °°Àº °ÍÀÌÁö¸¸, ÁÖ Å°·Î¼ ½Äº°µÇ´Â Á¦ÇÑÀº 1°³ÀÔ´Ï´Ù). RDB À̷п¡¼´Â ¸ðµç Å×ÀÌºí¿¡ ÁÖ Å°°¡ 1°³ ÇÊ¿äÇÏ´Ù°í Áö½ÃÇÕ´Ï´Ù. ÀÌ ±ÔÄ¢ÀºPostgreSQL¿¡¼´Â °¿äÇÏÁö ¾ÊÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì´Â ÀÌ¿¡ µû¸£µµ·Ï ÃßõÇÕ´Ï´Ù.
¿ÜºÎ Ű Á¦ÇÑÀº ¿(¶Ç´Â ¿ÀÇ ±×·ì)ÀÇ °ªÀÌ, ´Ù¸¥ Å×À̺í ÇàÀÇ °ª°ú ÀÏÄ¡ÇØ¾ß ÇÏ´Â °ÍÀ» ÁöÁ¤ÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ °ü·ÃÇÏ´Â 2°³ Å×À̺íÀÇÂüÁ¶ ¹«°á¼ºÀÌ À¯ÁöµË´Ï´Ù.
ÀÌ¹Ì ¿©·¯¹ø ¿¹·Î »ç¿ëÇÑ products Å×ÀÌºí¿¡ ´ëÇØ »ý°¢ÇØ º¸°Ú½À´Ï´Ù.
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
¶ÇÇÑ, ÀÌ·¯ÇÑ Á¦Ç°¿¡ ´ëÇÑ ÁÖ¹®À» ÀúÀåÇÏ´Â Å×ÀÌºíµµ ÀÛ¼ºÀÌ ³¡³ »óŶó°í ÇսôÙ. ÀÌ orders Å×ÀÌºí¿¡´Â ½ÇÁ¦·Î Á¸ÀçÇÏ´Â Á¦Ç°ÀÇ ÁÖ¹®¸¸À» ÀúÀåÇÏ°í ½Í´Ù°í »ý°¢Çϰí ÀÖ½À´Ï´Ù. °Å±â¼, products Å×À̺íÀ» ÂüÁ¶ÇÏ´Â orders Å×ÀÌºí¿¡ ¿ÜºÎ Ű Á¦ÇÑÀ» Á¤ÀÇÇÕ´Ï´Ù.
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products (product_no),
quantity integer
);
À̰ÍÀ¸·Î, products Å×ÀÌºí¿¡ Á¸ÀçÇÏÁö ¾Ê´Â product_noÇ׸ñÀ» »ç¿ëÇØ ÁÖ¹®À» ÀÛ¼ºÇÒ ¼ö ¾øµµ·Ï ÇÕ´Ï´Ù.
ÀÌ·¯ÇÑ °æ¿ì¿¡, orders Å×À̺íÀ»ÂüÁ¶ÇÏ´ÂÅ×À̺í, product Å×À̺íÀ»ÂüÁ¶µÇ´ÂÅ×À̺íÀ̶ó°í ºÎ¸¨´Ï´Ù. ºñ½ÁÇϰÔ, ÂüÁ¶ÇÏ´Â ¿°ú ÂüÁ¶µÇ´Â ¿ÀÌ ÀÖ½À´Ï´Ù.
À§ÀÇ Ä¿¸Çµå´Â ´ÙÀ½°ú °°ÀÌ ´ÜÃàÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
CREATE TABLE orders (
order_id integer PRIMARY KEY,
product_no integer REFERENCES products,
quantity integer
);
¿ ¸®½ºÆ® ³»¿¡ ¾ø±â ¶§¹®¿¡, ÂüÁ¶µÇ´Â Å×À̺íÀÇ ÁÖ Å°°¡ ÂüÁ¶ µÇ´Â ¿(º¹¼ö°¡´É)·Î¼ »ç¿ëµË´Ï´Ù.
¿ÜºÎ Ű¿¡¼µµ, ¿ÀÇ ±×·ìÀ» Á¦ÇÑÇϰųª ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰͵µ ¶ÇÇÑ, Å×À̺í Á¦ÇÑÀÇ Çü½Ä¿¡¼ ±â¼úÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌÇÏ´Â ¼³¸íÀ» À§ÇÑ Çö½ÇÀûÀÌÁö ¾ÊÀº ¿¹ÀÔ´Ï´Ù.
CREATE TABLE t1 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES other_table (c1, c2) );
¹°·Ð, Á¦ÇѵǴ ¿ÀÇ ¼ö ¹× ÇüÅ´ ÂüÁ¶µÇ´Â ¿ÀÇ ¼ö ¹× ÇüÅÂ¿Í ÀÏÄ¡ÇØ¾ß ÇÕ´Ï´Ù.
¿ÜºÎ Ű¿¡´Â ÀÌÇÏ¿Í °°ÀÌ À̸§À» ÁöÁ¤ÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
Å×ÀÌºí¿¡´Â º¹¼öÀÇ ¿ÜºÎ Ű Á¦ÇÑÀ» Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù. À̰ÍÀº Å×ÀÌºí °£ÀÇ ´Ù´ë´Ù °ü°è¸¦ ½ÇÇàÇϱâ À§Çؼ »ç¿ëµË´Ï´Ù. ¿¹¸¦ µé¸é, Á¦Ç°°ú ÁÖ¹®¿¡ °üÇÑ °¢°¢ÀÇ Å×À̺íÀÌ ÀÖ´Â °æ¿ì¿¡, º¹¼öÀÇ Á¦Ç°À» Æ÷ÇÔÇÏ´Â ÁÖ¹®À» ÇÏ°í ½Í´Ù°í ÇսôÙ. (À§ÀÇ ¿¹Á¦ ±¸Á¶¿¡¼´Â ºÒ°¡´ÉÇÕ´Ï´Ù). ÀÌ °æ¿ì, ´ÙÀ½ÀÇ Å×ÀÌºí ±¸Á¶¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
CREATE TABLE orders (
order_id integer PRIMARY KEY,
shipping_address text,
...
);
CREATE TABLE order_items (
product_no integer REFERENCES products,
order_id integer REFERENCES orders,
quantity integer,
PRIMARY KEY (product_no, order_id)
);
¸¶Áö¸· Å×À̺í·Î, ÁÖ Å°¿Í ¿ÜºÎ ۰¡ °ãÄ¡°í ÀÖ´Â °ÍÀ» ÁÖ¸ñÇØ Áֽʽÿä.
¿ÜºÎ ۰¡ Á¦Ç°°ú °ü·ÃÁöÀ» ¼ö ¾ø´Â ÁÖ¹®ÀÇ ÀÛ¼ºÀ» Çã°¡ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ¾Ë°í ÀÖ½À´Ï´Ù. ±×·¯³ª ¸¸¾à ÁÖ¹®ÀÌ »ý¼ºµÈ ÈÄ¿¡ À̸¦ ÂüÁ¶ÇÏ´Â Á¦Ç°ÀÌ »èÁ¦µÇ¸é ¾î¶³±î¿ä? SQL¿¡¼´Â ÀÌ·¯ÇÑ °æ¿ìµµ Ãë±ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. Á÷°¨ÀûÀ¸·Î, ¸î °³ÀÇ ¿É¼ÇÀ» °¡Áú ¼ö ÀÖ½À´Ï´Ù.
ÂüÁ¶µÇ´Â Á¦Ç°ÀÇ »èÁ¦¸¦ Çã°¡ÇÏÁö ¾Ê´Â´Ù
ÁÖ¹®µµ ÇÔ²² »èÁ¦ÇÑ´Ù
±× ¹Û¿¡µµ ÀÖ½À´Ï±î?
±¸Ã¼ÀûÀÎ ¿¹·Î¼ À§ ¿¹Á¦ÀÇ ´Ù´ë´Ù °ü°è¿¡ ´ÙÀ½ÀÇ ¹æÄ§À» ½ÇÇàÇØ º¾½Ã´Ù. (order_items¿¡ ÀÇÇØ) ÁÖ¹®¿¡ ÀÇÇØ ÂüÁ¶µÈ »óÅ·ΠÁ¦Ç°À» Á¦°ÅÇÑ´Ù¸é, ÀÌ·¯ÇÑ ¿¬»êÀº Çã¶ôµÉ ¼ö ¾ø½À´Ï´Ù. ÁÖ¹®ÀÌ Á¦°ÅµÇ¸é, ÁÖ¹® Ç׸ñµµ Á¦°ÅµË´Ï´Ù.
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
CREATE TABLE orders (
order_id integer PRIMARY KEY,
shipping_address text,
...
);
CREATE TABLE order_items (
product_no integer REFERENCES products ON DELETE RESTRICT,
order_id integer REFERENCES orders ON DELETE CASCADE,
quantity integer,
PRIMARY KEY (product_no, order_id)
);
»èÁ¦ÀÇ Á¦ÇÑ ¹× cascadingÀº °¡Àå ÀϹÝÀûÀÎ 2°³ÀÇ ¿É¼ÇÀÔ´Ï´Ù. RESTRICT´Â ÂüÁ¶µÇ´Â ÇàÀÌ »èÁ¦µÇ´Â °ÍÀ» ¸·½À´Ï´Ù. NO ACTION´Â Á¦ÇÑÀÌ Ã¼Å©µÇ¾úÀ» ¶§, ÂüÁ¶ÇÏ´Â ÇàÀÌ ¿©ÀüÈ÷ Á¸ÀçÇϰí ÀÖ´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ÀÌ´Â ¿¡·¯°¡ ¹ß»ýÇÏ°Ô µË´Ï´Ù. ÀÌ´Â ¾Æ¹«°Íµµ ÁöÁ¤ÇÏÁö ¾Ê´Â °æ¿ì´Â µðÆúÆ® ÇൿÀÌ µË´Ï´Ù (ÀÌ·¯ÇÑ µÎ°¡Áö ¼±Åÿ¡¼ ±Ùº»ÀûÀÎ Â÷ÀÌ´Â NO ACTION°¡ Æ®·£Á§¼Ç¿¡¼ °Ë»ç¸¦ ³ªÁßÀ¸·Î ¹Ì·ê ¼ö Àִµ¥ ¹ÝÇØ, RESTRICT´Â ±×·² ¼ö ¾ø´Â °ÍÀÔ´Ï´Ù.) CASCADE´Â ÂüÁ¶µÇ´Â ÇàÀÌ »èÁ¦µÇ¾úÀ» ¶§, ±×°ÍÀ» ÂüÁ¶ÇÏ´Â Çà(º¹¼ö°¡´É)µµ °°ÀÌ »èÁ¦µÇÁö ¾ÊÀ¸¸é ¾È µÇ´Â °ÍÀ» ÁöÁ¤ÇÕ´Ï´Ù. ±× ¹Û¿¡µµ 2°³ÀÇ ¿É¼ÇÀÌ ÀÖ½À´Ï´Ù. SET NULL¿Í SET DEFAULTÀÔ´Ï´Ù. À̰͵éÀº ÂüÁ¶µÇ´Â ÇàÀÌ »èÁ¦µÇ¾úÀ» ¶§, ÂüÁ¶ÇÏ´Â ¿ÀÌ °¢°¢ NULL³ª µðÆúÆ®·Î ¼³Á¤µÇ°Ô µË´Ï´Ù. À̰͵éÀº Á¦ÇÑÀ» º¸Á¸ÇÏ·Á´Â °ÍÀ¸·ÎºÎÅÍ ¸éÁ¦ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó´Â °ÍÀ» ÁÖÀÇÇϽʽÿä. ¿¹¸¦ µé¸é, µ¿ÀÛ¿¡SET DEFAULT¸¦ ÁöÁ¤Çß´Ù°í ÇØµµ, µðÆúÆ® °ªÀÌ ¿ÜºÎ Ű Á¦ÇÑÀ» ¸¸Á·½ÃŰÁö ¾Ê´Â °æ¿ì´Â Á¶ÀÛÀÌ ½ÇÆÐÇÕ´Ï´Ù.
ON DELETE¸¦ ´àÀº °ÍÀ¸·Î, ÂüÁ¶µÇ´Â ¿ÀÌ º¯°æ(¾÷µ¥ÀÌÆ®)µÇ¾úÀ» ¶§, È£ÃâµÇ´Â ON UPDATEµµ ÀÖ½À´Ï´Ù. À̰͵éÀ» ½Ç½ÃÇÒ ¼ö ÀÖ´Â ¾×¼ÇÀº °°½À´Ï´Ù.
µ¥ÀÌÅÍÀÇ ¾÷µ¥ÀÌÆ® ¹× »èÁ¦¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ »çÇ×ÀºChapter 6À» ÂüÁ¶ÇØ Áֽʽÿä.
¸¶Áö¸·À¸·Î, ¿ÜºÎ Ű´Â ÁÖ Å°³ª À¯Àϼº Á¦ÇÑ Çü½ÄÀ» ÂüÁ¶ÇÏ´Â ¿À̾î¾ß ÇÕ´Ï´Ù. ¿ÜºÎ ۰¡ À¯Àϼº Á¦ÇÑÀ» ÂüÁ¶ÇÏ´Â °æ¿ì, NULL °ªÀ» ÀÏÄ¡½Ãų¼ö ÀÖ´Â ¸î °¡Áö ¹æ¹ýµéÀÌ ÀÖ½À´Ï´Ù. ÀÌ¿¡ °üÇØ ·¹ÆÛ·±½º ¹®¼ CREATE TABLE ¿¡ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù.