Bibi's DevLog ๐Ÿค“๐ŸŽ

[DB] ํ‚ค, ๊ธฐ๋ณธ ํ‚ค(Primary Key, PK)์™€ ์™ธ๋ž˜ ํ‚ค(Foreign Key, FK) ๋ณธ๋ฌธ

๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ/Database

[DB] ํ‚ค, ๊ธฐ๋ณธ ํ‚ค(Primary Key, PK)์™€ ์™ธ๋ž˜ ํ‚ค(Foreign Key, FK)

๋น„๋น„ bibi 2021. 4. 30. 19:54

Key

์Šˆํผํ‚ค super key

: ํ•ด๋‹น ๊ฐœ์ฒด๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” attribute์˜ ''์ง‘ํ•ฉ''.

  • [์ฃผ๋ฏผ๋ฒˆํ˜ธ ์•ž์ž๋ฆฌ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ ๋’ท์ž๋ฆฌ, ์ด๋ฆ„]

ํ›„๋ณดํ‚ค candidate key

: ์Šˆํผํ‚ค์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ. ์Šˆํผํ‚ค์—์„œ ๊ตฐ๋”๋”๊ธฐ๋ฅผ ์ œ๊ฑฐํ•œ ๊ฒƒ.

(์ˆ˜ํ•™์  ์ •์˜) ''๋ชจ๋“  ๋‹ค๋ฅธ attribute๋“ค์„ ํ•จ์ˆ˜์ ์œผ๋กœ ๊ฒฐ์ •ํ•˜๋Š” attribute''

  • ์Šˆํผํ‚ค์˜ ๊ตฌ์„ฑ attribute ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ œ๊ฑฐํ•˜๋ฉด ์Šˆํผํ‚ค๊ฐ€ ์•„๋‹Œ ๊ฒƒ.

  • ํ›„๋ณดํ‚ค ์ค‘์— ํ•˜๋‚˜๊ฐ€ PK๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

  • [์ฃผ๋ฏผ๋ฒˆํ˜ธ ์•ž์ž๋ฆฌ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ ๋’ท์ž๋ฆฌ, ์ด๋ฆ„]์—์„œ [์ฃผ๋ฏผ๋ฒˆํ˜ธ ์•ž์ž๋ฆฌ, ์ฃผ๋ฏผ๋ฒˆํ˜ธ ๋’ท์ž๋ฆฌ]๊ฐ€ ํ›„๋ณดํ‚ค์— ํ•ด๋‹นํ•œ๋‹ค.

๊ธฐ๋ณธํ‚ค primary key

: ์—ฌ๋Ÿฌ ํ›„๋ณดํ‚ค ์ค‘ ๋Œ€ํ‘œ์ ์ธ ํ‚ค ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ํ‚ค๋กœ ๋งŒ๋“ ๋‹ค.

์ธ๊ณต ํ‚ค vs ์ž์—ฐ ํ‚ค

์ธ๊ณต ํ‚ค : ํ˜„์‹ค์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์†์„ฑ์œผ๋กœ ๋งŒ๋“  ํ‚ค

  • long id

์ž์—ฐ ํ‚ค natural key : ํ˜„์‹ค์— ์กด์žฌํ•˜๋Š” ์†์„ฑ์œผ๋กœ ๋งŒ๋“  ํ‚ค

  • ์ฃผ๋ฏผ๋“ฑ๋ก๋ฒˆํ˜ธ

๊ธฐ๋ณธํ‚ค์™€ ์™ธ๋ž˜ํ‚ค

PK : primary key. (=๊ธฐ๋ณธํ‚ค) ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋Œ€ํ‘œํ‚ค. uniqueํ•˜๋ฉฐ null์ผ ์ˆ˜ ์—†๋‹ค

FK : foreign key. ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ PK๋ฅผ ์ฐธ์กฐํ•˜๋Š” ํ‚ค. ์ฐธ์กฐํ•˜๋Š” PK์™€ ๋™์ผํ•œ domain์„ ๊ฐ–๋Š”๋‹ค.

์™ธ๋ž˜ํ‚ค Foreign Key

์ฐธ๊ณ  : ์™ธ๋ž˜ํ‚ค๋ž€?, MySQL Foreign Key

  • ์ค‘๋ณต ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ๋ฅผ ์œ„ํ•ด ํ…Œ์ด๋ธ”์„ ๋ถ„๋ฆฌํ•  ๋•Œ, ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฐœ๋…
  • 'ํ•œ ํ…Œ์ด๋ธ”์— ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์ •๋ณด'์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ž˜ํ‚ค๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์™ธ๋ž˜ํ‚ค์˜ ์—ญํ• 

  • ๋‘ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ๋‹ค๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค.
  • ์ฐธ์กฐํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋†’์—ฌ ์ค€๋‹ค (์ฐธ์กฐ๋ฌด๊ฒฐ์„ฑ)

img

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ dishํ…Œ์ด๋ธ”์—์„œ category์˜ id๋ฅผ ์ฐธ์กฐํ–ˆ๋‹ค. (์™ธ๋ž˜ํ‚ค = category_id)

MySQL์—์„œ ์™ธ๋ž˜ํ‚ค ์„ ์–ธ

์œ„ dishํ…Œ์ด๋ธ”์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธ๋˜์—ˆ๋‹ค.

create table dish (
    id varchar(5) not null,
    main_image varchar(100) not null,
    ...
    stock int not null,
    point int not null,
    primary key (id),
    foreign key (category_id) references category (id)
);

FOREIGN KEY (์™ธ๋ž˜ํ‚ค์ด๋ฆ„) REFERENCES (์™ธ๋ž˜ํ‚คํ…Œ์ด๋ธ”์ด๋ฆ„) (๊ทธํ…Œ์ด๋ธ”์—์„œ์˜์ด๋ฆ„)