๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์„ค๊ณ„

[๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์„ค๊ณ„] 2-2 keys

by ์ ผ์ ผ39 2024. 11. 11.
keys Keys = ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ.
n๊ฐœ์˜ ์ปฌ๋Ÿผ์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ํ‚ค๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ๋„ ํ•จ  (= composite key)
 
* superkey (์Šˆํผํ‚ค) : ๊ณ ์œ ์‹๋ณ„์„ฑ๋งŒ ๊ฐ€์ง€๋ฉด ์ตœ์†Œ๊ฐ€ ์•„๋‹ˆ์–ด๋„ ์Šˆํผํ‚ค
   - K์— ๋Œ€ํ•œ ๊ฐ’์ด ๊ฐ ๊ฐ€๋Šฅํ•œ relation r (R) (= relation instance)์˜ ๊ณ ์œ ํ•œ ํŠœํ”Œ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์ถฉ๋ถ„ํ•˜๋ฉด
   - ID ์ž์ฒด๊ฐ€ ๊ณ ์œ ์‹๋ณ„์ž๋ผ์„œ, ํ˜ผ์ž์„œ๋„ ์Šˆํผํ‚ค, ์กฐํ•ฉํ•ด์„œ๋„ ์Šˆํผํ‚ค์ž„
        --> { ID }, { ID, name } ๋‘˜ ๋‹ค instructor์˜ ์Šˆํผํ‚ค์ž„        // ๊ณ ์œ ์‹๋ณ„์ž ํฌํ•จ, 2๋‚˜๋จธ์ง€๊ฐœ์ˆ˜
 
* candidate key (ํ›„๋ณดํ‚ค) : ์Šˆํผํ‚ค ์ค‘ ์ตœ์†Œ์ธ ๊ฒƒ.
- ๊ณ ์œ ์‹๋ณ„์„ฑ์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ์ •๋ง ํ•„์š”ํ•œ ์ปฌ๋Ÿผ๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ
    --> { ID } ๊ฐ€ instructor์˜ ํ›„๋ณดํ‚ค์ž„
    - RDB ์•ˆ์—๋Š” ํ›„๋ณดํ‚ค๊ฐ€ ๋ณต์ˆ˜ ๊ฐœ ์กด์žฌ ๊ฐ€๋Šฅํ•จ
 
* primary key (๊ธฐ๋ณธํ‚ค) : ํ›„๋ณดํ‚ค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๊ธฐ๋ณธํ‚ค๋กœ ์„ ํƒ๋จ.
 
(+) ๋งŒ์•ฝ A, B, C ์ค‘ A, B ๋‘๊ฐœ๊ฐ€ ํ•ฉ์„ฑํ•ด์•ผ๋งŒ ๊ณ ์œ ์‹๋ณ„์„ฑ์„ ๊ฐ–๋Š”๋‹ค๋ฉด
  * superkey = { A, B }, { A, B, C }  --> 2๊ฐœ
  * candidate = { A, B }           --> 1๊ฐœ
  * primalykey = { A, B }          --> 1๊ฐœ
 
* foreign key (์™ธ๋ž˜ํ‚ค) : ์ฐธ์กฐ๊ด€๊ณ„์— ๊ด€๋ จ๋œ ํ‚ค.
    - ๋‹ค๋ฅธ ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ์†์„ฑ(๋“ค)์œผ๋กœ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ
    - RDB์— relation (ํ…Œ์ด๋ธ”)์ด ๋ณต์ˆ˜ ๊ฐœ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ.
        ๊ทธ ํ…Œ์ด๋ธ”๋“ค์ด ์„œ๋กœ๊ฐ„ ๋…๋ฆฝ์ (๋ฌด๊ด€)ํ•˜์ง€ ์•Š๊ณ  ํ…Œ์ด๋ธ” ๊ฐ„ ์ฐธ์กฐ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋จ
**  ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ ์กฐ๊ฑด (Foreign key constraint)
: ํ•œ relation์˜ ๊ฐ’์€ ์•„๋ž˜์˜ relation๋“ค์— ๋‚˜ํƒ€๋‚˜์•ผ ํ•จ.
(1) Referencing relation [FK ์™ธ๋ž˜ํ‚ค]  //๊ต์ˆ˜์ž ํ…Œ์ด๋ธ”์˜ dept_name ์ปฌ๋Ÿผ์ด ์™ธ๋ž˜ํ‚ค
(2) Referenced relation [PK ๊ธฐ๋ณธํ‚ค]   //ํ•™๊ณผ ํ…Œ์ด๋ธ”์˜ dept_name ์ปฌ๋Ÿผ์ด ์ฐธ์กฐ๋˜๋Š” ๊ธฐ๋ณธํ‚ค
 
--> ์™ธ๋ž˜ํ‚ค์— ๋‚˜ํƒ€๋‚œ null์ด ์•„๋‹Œ ๊ฐ’์€ ๋ฐ˜๋“œ์‹œ ๊ทธ๊ฒƒ์ด ์ฐธ์กฐํ•˜๋Š” ๊ธฐ๋ณธํ‚ค์— ์กด์žฌํ•ด์•ผ ํ•จ
      -> ์ด ๋ฐ˜๋Œ€๋Š” ์„ฑ๋ฆฝํ•  ํ•„์š” ์—†์Œ
    // null์ด ์™ธ๋ž˜ํ‚ค์— ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•จ. ์ด ๊ฒฝ์šฐ์—๋Š” ๊ธฐ๋ณธํ‚ค์— ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Œ
    // ๊ธฐ๋ณธํ‚ค pk์—๋Š” null์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์Œ, pk์˜ ๊ฐ’๋“ค์€ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•œ๋‹ค๋Š” ์ œ์•ฝ๋„ ์žˆ์Œ
 
è ์ฐธ์กฐ๋‹นํ•˜๋Š” ์ชฝ์€ ํ•ญ์ƒ ๊ทธ ํ…Œ์ด๋ธ”์˜ ๊ณ ์œ  ์‹๋ณ„์ž๋กœ ์„ ์ •๋œ primary key๊ฐ€ ๋œ๋‹ค
-> ์ด ๋ฐ˜๋Œ€๋Š” ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์•„๋„ ๋จ  (FK ๋ง๊ณ  ๋‹ค๋ฅธ๊ฒƒ๋„ PK ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Œ : ์ฐธ์กฐ๋ฌด๊ฒฐ์„ฑ?)
// ์ฐธ์กฐ๋Œ€์ƒ์˜ ์ปฌ๋Ÿผ์ด ๊ทธ ํ…Œ์ด๋ธ”์˜ PK ์—ฌ์•ผ FK๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ.
 
//๊ต์žฌ 1์žฅ 12์ชฝ ๊ต์ˆ˜ํ…Œ์ด๋ธ”, ํ•™๊ณผํ…Œ์ด๋ธ”
๊ต์ˆ˜ํ…Œ์ด๋ธ”์˜ dept_name ์ปฌ๋Ÿผ์ด ์™ธ๋ž˜ํ‚ค๊ฐ€ ๋˜์–ด์„œ ํ•™๊ณผํ…Œ์ด๋ธ”์˜ dept_name ์ปฌ๋Ÿผ์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Œ
= ๊ต์ˆ˜ํ…Œ์ด๋ธ”์˜ dept_name ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ํ•™๊ณผํ…Œ์ด๋ธ”์—์„œ ๋ฐ˜๋“œ์‹œ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
 
section ํ…Œ์ด๋ธ”์—์„œ <building, room number>์€ ํ•ฉ์„ฑํ‚ค๋กœ์„œ ์™ธ๋ž˜ํ‚ค์ž„.
    -> classroom ํ…Œ์ด๋ธ”์˜, <building, room number> ํ•ฉ์„ฑํ‚ค๋กœ์„œ PK์ธ ๊ฒƒ์„ ์ฐธ์กฐํ•จ

 
--> PK๊ฐ€ ๋ถ€๋ถ„์œผ๋กœ ์™ธ๋ž˜ํ‚ค๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ. ๊ฐ๊ฐ ๋”ฐ๋กœ ๊ฐˆ๋ผ์ ธ ๋‹ค๋ฅธ PK๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป
-> takes ํ…Œ์ด๋ธ”์—์„œ <ID>, <๋‚˜๋จธ์ง€> ๊ฐ€ ๊ฐ๊ฐ ์™ธ๋ž˜ํ‚ค๋กœ ๋™์ž‘ํ•จ. PK๊ฐ€ ๊ฐˆ๋ผ์ง

 

--> FK์™€ PK์˜ ์ปฌ๋Ÿผ ๋ช…์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Œ
    -> ๋‘˜์˜ ์ด๋ฆ„์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๋Š” ๊ฒŒ ์‹ค์ƒํ™œ์—์„œ ๋” ์ ์ ˆํ•œ ํ‘œํ˜„์ผ ์ˆ˜๋„ ์žˆ์Œ (์Šคํ‚ค๋งˆ ๊ฐ€๋…์„ฑ)
    -> ๊ทธ๋Ÿฌ๋‚˜ ์ž์—ฐ์กฐ์ธ ๊ตฌ๋ฌธ์—์„œ๋Š” FK์™€ PK์˜ ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ๊ฐ™์•„์•ผ ํ•จ

 

--> ์ฐธ์กฐํ•˜๋Š” ๋ฆด๋ ˆ์ด์…˜๊ณผ ํ”ผ์ฐธ์กฐ ๋ฆด๋ ˆ์ด์…˜์€ ๋™์ผํ•œ ๋ฆด๋ ˆ์ด์…˜์ผ ์ˆ˜๋„ ์žˆ์Œ
-> PK, FK์ด๋ฆ„ ๋‹ค๋ฅผ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค
 

--> PK์ด๋ฉด์„œ ๋™์‹œ์— FK์ผ ์ˆ˜ ์žˆ์Œ
 

--> ํ›„๋ณดํ‚ค 2๊ฐœ์ธ ๊ฒฝ์šฐ (ex. ํ•™๋ฒˆ๋„ ๊ฐ€๋Šฅ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ๋„ ๊ฐ€๋Šฅ) PK๋ฅผ ํ•˜๋‚˜ ์„ ํƒํ•ด์•ผ ํ•˜๋Š”๋ฐ,
     ๋‹ค๋ฅธ ๋ฆด๋ ˆ์ด์…˜์˜ FK๊ฐ€ ํŠน์ • ์ปฌ๋Ÿผ์„ ์ฐธ์กฐ์ค‘์ด๋ผ๋ฉด ๊ทธ๊ฑด ๋ฌด์กฐ๊ฑด PK์—ฌ์•ผ ํ•จ์„ ๊ณ ๋ คํ•˜๊ธฐ
 

--> ๋ฆด๋ ˆ์ด์…˜์„ ํ‘œํ˜„ํ•œ ํ…Œ์ด๋ธ” à ๊ทธ ์•ˆ ์‹๋ณ„์ž๋“ค ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๊ฒŒ
        -> ์˜ˆ) works( employee, company ์–‘ ๊ฐœ์ฒด์˜ ์‹๋ณ„์ž๋ฅผ ์ง์ง“๊ธฐํ•ด ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•œ ํ…Œ์ด๋ธ” )
            --> ํ•ด๋‹น ๊ฐœ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ์„ค์ •ํ•˜๊ธฐ
 

--> takes ํ…Œ์ด๋ธ” -> (ํ•™๋ฒˆ, ๊ณผ๋ชฉ๋ฒˆํ˜ธ) ํ•ฉ์„ฑํ•ด์„œ PK์ž„. ๊ฐ๊ฐ์ด ๋‹ค๋ฅธ PK๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” FK์ผ ์ˆ˜ ์žˆ์Œ
        -> ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์œผ๋กœ ์ฐธ์กฐ๋˜๋ฉด (=ํ•ฉ์„ฑํ‚ค๊ฐ€ PK์ธ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•œ๋‹ค๋ฉด)
            ํ”ผ์ฐธ์กฐ์ปฌ๋Ÿผ์ด ๊ทธ ํ…Œ์ด๋ธ”์˜ PK๊ฐ€ ์•„๋‹˜... ํ˜ผ์ž์„œ PK๊ฐ€ ๋˜์ง€ ๋ชปํ•˜๊ณ , ์˜๋ฏธ์ƒ ์•ˆ๋งž์„์ˆ˜๋„
 
* composite key (ํ•ฉ์„ฑํ‚ค) : n๊ฐœ์˜ ์ปฌ๋Ÿผ์ด ๋ชจ์—ฌ ํ•˜๋‚˜์˜ ํ‚ค๋ฅผ ๊ตฌ์„ฑ