5.3. Á¦ÇÑ

µ¥ÀÌÅÍÇüÀº Å×ÀÌºí¿¡ ÀúÀåÇÏ´Â µ¥ÀÌÅÍÀÇ Á¾·ù¸¦ ÇÑÁ¤Çϱâ À§ÇÑ ¹æ¹ýÀÔ´Ï´Ù. ±×·¯³ª ¸¹Àº ¾îÇø®ÄÉÀ̼ǿ¡¼­´Â ÇüŰ¡ Á¦°øÇÏ´Â Á¦ÇÑ¿¡¼­´Â Á¤¹ÐÇÔÀÌ ºÎÁ·ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é, Á¦Ç°ÀÇ °¡°ÝÀÌ µé¾î°¡´Â ¿­¿¡´Â Á¤¼ö¸¸À» ¹Þ¾ÆµéÀ̵µ·Ï ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×·¯³ª Á¤¼ö¸¸À» ¹Þ¾ÆµéÀ̴ ǥÁØ µ¥ÀÌÅÍÇüÀº ¾ø½À´Ï´Ù. ¶ÇÇÑ, ´Ù¸¥ ¿­À̳ª Çà¿¡ °ü·ÃÇØ ¿­µ¥ÀÌÅ͸¦ Á¦ÇÑÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, Á¦Ç°ÀÇ Á¤º¸°¡ µé¾î°¡´Â Å×ÀÌºí¿¡¼­´Â 1°³ÀÇ Á¦Ç° ¹øÈ£¿¡ ´ëÇÑ ÇàÀÌ Çϳª¿©¾ß¸¸ ÇÕ´Ï´Ù.

ÀÌ·¯ÇÑ ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇØ, SQL¿¡¼­´Â ¿­ ¹× Å×ÀÌºí¿¡ ´ëÇÑ Á¦ÇÑÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦ÇÑ¿¡ ÀÇÇØ Å×ÀÌºí ³»ÀÇ µ¥ÀÌÅ͸¦ ÀÚÀ¯·Ó°Ô Á¦¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. Á¦ÇÑ¿¡ À§¹ÝÇÏ´Â µ¥ÀÌÅ͸¦ ¿­¿¡ ÀúÀåÇÏ·Á°í Çϸé, ¿¡·¯°¡ ³³´Ï´Ù. ÀÌ´Â µðÆúÆ® °ªÀ¸·Î¼­ Á¤ÀÇµÈ °ªÀ» ÀúÀåÇÏ´Â °æ¿ì¿¡µµ Àû¿ëµË´Ï´Ù.

5.3.1. °Ë»ç Á¦ÇÑ

°Ë»ç Á¦ÇÑÀº °¡Àå ÀϹÝÀûÀÎ Á¦ÇÑÀÇ Á¾·ùÀÔ´Ï´Ù. À̰ÍÀ» »ç¿ëÇØ, ƯÁ¤ÇÑ ¿­ÀÇ °ªÀÌ 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ÀÌ ¾Æ´Ñ »ç¿ëÇÒ ¼ö ÀÖ´Â Á¦ÇÑÀ» ¼³¸íÇÕ´Ï´Ù.

5.3.2. not-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·Î ¸¶Å©ÇØ¾ß ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

5.3.3. À¯Àϼº Á¦ÇÑ

À¯Àϼº Á¦ÇÑ¿¡ ÀÇÇØ, ¿­À̳ª ¿­ ±×·ì¿¡ Æ÷ÇԵǴ µ¥ÀÌÅͰ¡, Å×ÀÌºí ³»ÀÇ ¸ðµç Çà¿¡ °üÇØ¼­ À¯ÀÏÇÏ´Ù´Â °ÍÀ» È®½ÇÈ÷ ÇÕ´Ï´Ù. ±¸¹®Àº ´ÙÀ½°ú °°½À´Ï´Ù.

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 µ¥ÀÌÅͺ£À̽ºµµ ÀÖ½À´Ï´Ù. ±×·¯¹Ç·Î, À̽ÄÇÒ ¿¹Á¤ÀÇ ¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇÏ·Á¸é ÁÖÀÇÇϽʽÿä.

5.3.4. ÁÖŰ

±â¼úÀûÀ¸·Î ÁÖ Å° Á¦ÇÑÀº ´Ü¼øÇÏ°Ô À¯Àϼº Á¦ÇѰú 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¿¡¼­´Â °­¿äÇÏÁö ¾ÊÁö¸¸, ´ëºÎºÐÀÇ °æ¿ì´Â ÀÌ¿¡ µû¸£µµ·Ï ÃßõÇÕ´Ï´Ù.

5.3.5. ¿ÜºÎ Ű

¿ÜºÎ Ű Á¦ÇÑÀº ¿­(¶Ç´Â ¿­ÀÇ ±×·ì)ÀÇ °ªÀÌ, ´Ù¸¥ Å×À̺í ÇàÀÇ °ª°ú ÀÏÄ¡ÇØ¾ß ÇÏ´Â °ÍÀ» ÁöÁ¤ÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ °ü·ÃÇÏ´Â 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 ¿¡ ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù.