๐Ÿ—ณ๏ธ database

Yeonnยท2024๋…„ 11์›” 11์ผ
0

Backend ๐Ÿ‘€

๋ชฉ๋ก ๋ณด๊ธฐ
10/10
post-thumbnail

๋ฐ์ดํ„ฐ: ํ˜„์‹ค ์„ธ๊ณ„์—์„œ ์ˆ˜์ง‘๋œ ๋‹จ์ˆœํ•œ ์‚ฌ์‹ค๊ณผ ๊ฐ’๋“ค์„ ๋ชจ์•„ ๋†“์€ ๊ฒƒ
์ •๋ณด: ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ • ๋ชฉ์ ์— ์˜ํ•ด ํ•ด์„ํ•˜๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•œ ํ˜•ํƒœ

๐ŸŒฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค( database ): ๋ฐ์ดํ„ฐ๋“ค์˜ ์ง‘ํ•ฉ
ํ•œ ์กฐ์ง ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž์™€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ณต๋™์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ํ†ตํ•ฉํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ๋ฐ์ดํ„ฐ

โœ”๏ธย ํŒŒ์ผ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์˜ ํ•œ๊ณ„

  • ๋ฐ์ดํ„ฐ ์ข…์†์˜ ๋ฌธ์ œ
    • ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ตฌ์กฐ๋„ ๋ฐ”๋€Œ์–ด์•ผ ํ•จ
  • ๋ฐ์ดํ„ฐ ์ค‘๋ณต์˜ ๋ฌธ์ œ
    • ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋ณ„๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ X
    • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ: ๋ฐ์ดํ„ฐ๊ฐ€ ์ •ํ™•ํ•˜๊ณ  ์ผ๊ด€๋œ ํ˜•ํƒœ๋กœ ์œ ์ง€๋˜๋Š” ๊ฒƒ
    • ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ๋ณด๊ด€๋œ๋‹ค๋Š” ์˜๋ฏธ !

โœ”๏ธย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ์š”

  • ์‹ค์‹œ๊ฐ„ ์ ‘๊ทผ์„ฑ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•  ๋•Œ ์–ธ์ œ๋“ ์ง€ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ด์•ผ ํ•จ
  • ์ง€์†์ ์ธ ๋ณ€ํ™”
    • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…, ์‚ญ์ œ, ๊ฐฑ์‹ ์„ ํ†ตํ•ด ์ตœ์‹  ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•จ
  • ๋™์‹œ ๊ณต์œ 
    • ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ด์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
  • ๋‚ด์šฉ์— ๋Œ€ํ•œ ์ฐธ์กฐ
    • ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๋ฌผ๋ฆฌ์  ์œ„์น˜๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

โ“ย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…๋ฅ˜

๐ŸŒฑ
RDB( Relational Database ): ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ SQL์„ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ
NoSQL( Not only SQL ): ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  RDB๋ณด๋‹ค ์œ ์—ฐํ•œ ๋ชจ๋ธ์„ ์ด์šฉ

โœ”๏ธย RDBM( ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค )

  • ๋ฐ์ดํ„ฐ๋ฅผ ํ–‰๊ณผ ์—ด์„ ๊ฐ€์ง€๋Š” ํ…Œ์ด๋ธ”๋กœ ํ‘œํ˜„
  • ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ ๋ณด์žฅ: ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌ
  • ๋ฐ์ดํ„ฐ์˜ ์•ˆ์ •์„ฑ ๋ณด์žฅ: ์ •์˜๋œ ํ…Œ์ด๋ธ”( ์Šคํ‚ค๋งˆ )์— ๋งž๊ฒŒ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…
  • ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ์ผ๊ด€์ ์ธ ๊ฒฝ์šฐ ์ฃผ๋กœ ์‚ฌ์šฉ
    • MySQL, PostgreSQL, MariaDBโ€ฆ

โœ”๏ธย NoSQL

  • ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  . ์ˆ˜์žˆ๋Š” ์œ ํ˜•์˜ ์ œํ•œ์ด ์—†์Œ
  • ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์šฉ์ด
  • ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ์ผ๊ด€์ ์ด์ง€ ์•Š๊ณ  ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์— ์ ํ•ฉ
  • ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ
  • MongoDB, Redis, Apache Cassandraโ€ฆ

โœ”๏ธย RDB vs NoSQL

RDBNoSQL
ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ”๋กœ ๋ฐ์ดํ„ฐ ํ‘œํ˜„๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฐฉ์‹์ด ๊ณ ์ •์ ์ด์ง€ ์•Š์Œ
๊ด€๊ณ„ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ ์ •๋ฆฌ์ผ๋ฐ˜์ ์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ RDB๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๊ฐ€ ์ผ๊ด€์ ์ด์ง€ ์•Š์€ ๋น…๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
MySQL, PostgreSQL, MariaDB ๋“ฑMongoDB, Redis, Apache Cassandra ๋“ฑ

โœ”๏ธย ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ตฌ์„ฑ ์š”์†Œ

  • table( ํ…Œ์ด๋ธ” ): ํ–‰๊ณผ ์—ด๋กœ ๊ตฌ์„ฑ
  • attribute( ์†์„ฑ ): ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋ฅผ ์˜๋ฏธ
  • tuple( ํŠœํ”Œ ): ์†์„ฑ์ด ๋ชจ์—ฌ ๊ตฌ์„ฑ๋œ ๊ฐ๊ฐ์˜ ํ–‰์„ ์˜๋ฏธ
  • domain( ๋„๋ฉ”์ธ ): ์†์„ฑ์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ง‘ํ•ฉ, ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋‹จ์œ„

๐ŸŒฑ ๊ด€๊ณ„ ? ๊ด€๊ณ„๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•˜๋‚˜์˜ ์†์„ฑ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌ !

!

โ“ย MySQL

โœ”๏ธย ๋ฐ์ดํ„ฐ ํƒ€์ž…

์ž๋ฃŒํ˜•์˜๋ฏธ
VARCHAR(n)nBytes ํฌ๊ธฐ์˜ ๊ฐ€๋ณ€ ๊ธธ์ด ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ
INT์ •์ˆ˜ํ˜• ์ˆซ์ž ๋ฐ์ดํ„ฐ( 4Bytes )
FLOAT4Bytes ํฌ๊ธฐ์˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ๋ฐ์ดํ„ฐ
DATETIME๋‚ ์งœ์™€ ์‹œ๊ฐ„ ํ˜•ํƒœ์˜ ๊ธฐ๊ฐ„ ๋ฐ์ดํ„ฐ( YYYY-MM-DD HH:MM:SS )
โ€ฆโ€ฆ

โ“ MySQL ๋ฐ์ดํ„ฐํƒ€์ž…๋“ค ํ™•์ธํ•˜๊ธฐ

โœ”๏ธย ํ…Œ์ด๋ธ” ์ •์˜

-- CREATE TABLE ํ…Œ์ด๋ธ”๋ช…(์†์„ฑ1 ๋ฐ์ดํ„ฐํƒ€์ž…1 ์ œ์•ฝ์กฐ๊ฑด1, ์†์„ฑ2 ๋ฐ์ดํ„ฐํƒ€์ž…2 ์ œ์•ฝ์กฐ๊ฑด2, ...);
CREATE TABLE customer(
	id VARCHAR(10),
	name VARCHAR(10),
	address VARCHAR(30)
);

โœ”๏ธย ์ •์˜ํ•œ ํ…Œ์ด๋ธ” ํ™•์ธ

SHOW TABLES;     -- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ๋ชฉ๋ก์„ ํ™•์ธ
DESC ํ…Œ์ด๋ธ”๋ช…;   -- ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ํ™•์ธ

โœ”๏ธย ํ…Œ์ด๋ธ” ์ˆ˜์ •

-- ์ปฌ๋Ÿผ ์ถ”๊ฐ€
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD COLUMN ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด;
-- ์ปฌ๋Ÿผ ์ˆ˜์ •
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… MODIFY COLUMN ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด;
-- ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋ณ€๊ฒฝ
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… CHANGE COLUMN ๊ธฐ์กด์ปฌ๋Ÿผ๋ช… ์ƒˆ๋กœ์šด์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด;
-- ์ปฌ๋Ÿผ ์‚ญ์ œ
ALTER TABLE ํ…Œ์ด๋ธ”๋ช… DROP COLUMN ์ปฌ๋Ÿผ๋ช… ๋ฐ์ดํ„ฐํƒ€์ž… ์ œ์•ฝ์กฐ๊ฑด;
-- ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋ณ€๊ฒฝ
ALTER TABLE ๊ธฐ์กดํ…Œ์ด๋ธ”๋ช… RENAME ์ƒˆ๋กœ์šดํ…Œ์ด๋ธ”๋ช…;

โœ”๏ธย ํ…Œ์ด๋ธ” ์‚ญ์ œ

DROP TABLE ํ…Œ์ด๋ธ”๋ช…;

โœ”๏ธย ์ œ์•ฝ์กฐ๊ฑด

  • NOT NULL: NULL ๊ฐ’ ๋น„ํ—ˆ์šฉ, ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
  • UNIQUE: ์ค‘๋ณต ๊ฐ’ ํ—ˆ์šฉ X, ๋˜‘๊ฐ™์€ ๊ฐ’์ด ์žˆ์„ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฐœ์ƒ, NULL ์€ ๋น„๊ต ๋ถˆ๊ฐ€ํ•˜๋ฏ€๋กœ ์ค‘๋ณต ๊ฐ€๋Šฅ
  • DEFAULT: ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •, ์•„๋ฌด๋Ÿฐ ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ DEFAULT ๊ฐ’์œผ๋กœ ์„ค์ •
  • CHECK: ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜์—ฌ ํŠน์ • ๊ฐ’๋งŒ ํ—ˆ์šฉ, ์ œํ•œํ•œ ๊ฐ’์ด ์•„๋‹ ๊ฒฝ์šฐ ์—๋Ÿฌ ๋ฐœ์ƒ
  • CONSTRAINT:
    // ์ œ์•ฝ ์กฐ๊ฑด ์ด๋ฆ„ ์ •์˜
    CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด์ด๋ฆ„ ์ œ์•ฝ์กฐ๊ฑด[UNIQUE, CHECK, ...] (์ ์šฉํ•  ์†์„ฑ);
    // ์ƒ์„ฑ๋œ ์ œ์•ฝ ์กฐ๊ฑด ํ™•์ธ
    SELECT * FROM information_schema.table_constraints;
    // ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ADD CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด ์ด๋ฆ„ ์ œ์•ฝ์กฐ๊ฑด(์†์„ฑ);
    // DEFAULT ์ œ์•ฝ ์กฐ๊ฑด ์ˆ˜์ •
    ALTER TABLE ํ…Œ์ด๋ธ”๋ช… ALTER ์†์„ฑ SET DEFAULT ๊ธฐ๋ณธ๊ฐ’;

โ“ย KEY

โœ”๏ธย Primary Key ( ๊ธฐ๋ณธํ‚ค )

๐ŸŒฑ ์„œ๋กœ ๋‹ค๋ฅธ ํŠœํ”Œ์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ค€์ด ๋˜๋Š” ์†์„ฑ

  • PRIMARY KEY
  • ์ค‘๋ณต ๊ฐ’ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ, ์œ ์ผ ๊ฐ’
  • NULL ๊ฐ’ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ
  • ํ…Œ์ด๋ธ” ๋‹น 1๊ฐœ๋งŒ ์„ค์ •

โœ”๏ธย Foreign Key ( ์™ธ๋ž˜ํ‚ค )

๐ŸŒฑ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์†์„ฑ์œผ๋กœ ํ…Œ์ด๋ธ”์˜ ๊ด€๊ณ„ ์ •์˜

  • FOREIGN KEY (์ฐธ์กฐํ•  ์†์„ฑ) REFERENCES ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”(์ฐธ์กฐ๋˜๋Š” ์†์„ฑ)
  • ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค์— ์—†๋Š” ๊ฐ’์€ ์ง€์ •ํ•  ์ˆ˜ ์—†์Œ

โœ”๏ธ Composite Key ( ๋ณตํ•ฉํ‚ค )

๐ŸŒฑ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์†์„ฑ(์ปฌ๋Ÿผ)์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ณ ์œ ํ•œ ๊ฐ’์„ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์œผ๋กœ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€

  • PRIMARY KEY (์†์„ฑ1, ์†์„ฑ2, ...)
  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ปฌ๋Ÿผ์„ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ๊ธฐ๋ณธ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๊ฐ ์†์„ฑ(์ปฌ๋Ÿผ) ๋‹จ๋…์œผ๋กœ๋Š” ๊ณ ์œ ํ•˜์ง€ ์•Š์ง€๋งŒ, ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๊ฒฐํ•ฉํ•จ์œผ๋กœ์จ ๊ณ ์œ ์„ฑ์„ ํ™•๋ณด
  • ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ๋ฐฉ์ง€
  • ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค์–ด ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€
CREATE TABLE customer(
	id VARCHAR(10) PRIMARY KEY, // ๊ธฐ๋ณธํ‚ค ์„ค์ •
	name VARCHAR(10),
	address VARCHAR(30)
);

CREATE TABLE oreder_history(
	customer_id VARCHAR(10),
	order_id VARCHAR(14),
	FOREIGN KEY (customer_id) REFERENCES customer(id), // ์™ธ๋ž˜ํ‚ค ์„ค์ •
	CONSTAINT order_history_pk PRIMARY KEY (customer_id, order_id) // ๋ณตํ•ฉํ‚ค ์„ค์ •
);

โœ”๏ธย ๊ทธ ์™ธ์˜ ํ‚ค

  • ํ›„๋ณดํ‚ค: ๊ธฐ๋ณธํ‚ค๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ํ‚ค๋กœ ์œ ์ผ์„ฑ๊ณผ ์ตœ์†Œ์„ฑ ๋งŒ์กฑ
  • ๋Œ€์ฒดํ‚ค: ํ›„๋ณดํ‚ค ์ค‘์— ๊ธฐ๋ณธํ‚ค๊ฐ€ ์•„๋‹Œ ํ‚ค
  • ์Šˆํผํ‚ค: ํŠœํ”Œ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผ์„ฑ์€ ๋งŒ์กฑํ•˜์ง€๋งŒ ์ตœ์†Œ์„ฑ์€ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ํ‚ค
    • ์ตœ์†Œ์„ฑ: ํ›„๋ณดํ‚ค ๊ตฌ์„ฑ ์†์„ฑ ์ง‘ํ•ฉ์ด ๊ทธ ์†์„ฑ์„ ์ œ๊ฑฐํ•˜์˜€์„ ๋•Œ ๋” ์ด์ƒ ํ›„๋ณดํ‚ค๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์„ฑ์งˆ

โœ”๏ธย ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด

๐ŸŒฑ ๊ฐœ์ฒด ๋ฌด๊ฒฐ์„ฑ: ๊ธฐ๋ณธํ‚ค๋Š” NULL ๊ฐ’์ด๋‚˜ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ
์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ: ์™ธ๋ž˜ํ‚ค๋Š” NULL ์ด๊ฑฐ๋‚˜ ์ฐธ์กฐ๋˜๋Š” ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค ๊ฐ’๊ณผ ๋™์ผ

  • ๋„๋ฉ”์ธ ๋ฌด๊ฒฐ์„ฑ: ํŠน์ • ์†์„ฑ๊ฐ’์€ ๊ทธ ์†์„ฑ์ด ์ •์˜๋œ ๋„๋ฉ”์ธ์— ์†ํ•œ ๊ฐ’์ด์–ด์•ผ ํ•จ
  • NULL ๋ฌด๊ฒฐ์„ฑ: ํŠน์ • ์†์„ฑ๊ฐ’์€ NULL ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ( NOT NULL )
  • ๊ณ ์œ  ๋ฌด๊ฒฐ์„ฑ: ๊ฐ ํŠœํ”Œ์ด ๊ฐ€์ง€๋Š” ์†์„ฑ๊ฐ’๋“ค์€ ์„œ๋กœ ๋‹ฌ๋ผ์•ผ ํ•จ
  • ํ‚ค ๋ฌด๊ฒฐ์„ฑ: ํ…Œ์ด๋ธ”์— ์ตœ์†Œ ํ•œ๊ฐœ ์ด์ƒ์˜ ํ‚ค ์กด์žฌ

โ“ย ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

๐ŸŒฑ ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคํ™” ํ•˜๋Š” ๊ณผ์ •

โœ”๏ธย ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ๊ตฌ์„ฑ ์š”์†Œ

๐ŸŒฑ ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ˆœํ™”, ์ถ”์ƒํ™”ํ•˜์—ฌ ํ‘œํ˜„ํ•œ ๋ชจ๋ธ

  • ๊ฐœ์ฒด( Entity ): ๋ฐ์ดํ„ฐ๋กœ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐœ๋…์ด๋‚˜ ์ •๋ณด์˜ ๋‹จ์œ„( ex. ํšŒ์›, ์ œํ’ˆโ€ฆ )
  • ์†์„ฑ( Attribute ): ๊ฐœ์ฒด์— ๋Œ€ํ•œ ์ •๋ณด( ex. ํšŒ์›: ์•„์ด๋””/์ด๋ฆ„, ์ œํ’ˆ: ์ด๋ฆ„/๋ธŒ๋žœ๋“œ/๊ฐ€๊ฒฉ โ€ฆ )
  • ๊ด€๊ณ„( Relationship ): ๊ฐœ์ฒด ๊ฐ„์˜ ์—ฐ๊ด€์„ฑ( ex. ํšŒ์›์ด ์ œํ’ˆ์„ ๊ตฌ๋งคํ•œ๋‹ค )

โœ”๏ธย ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๋‹จ๊ณ„

  • ๊ฐœ๋…์  ์„ค๊ณ„: ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ์ถ”์ƒ์  ๊ฐœ๋…์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ณผ์ •
  • ๋…ผ๋ฆฌ์  ์„ค๊ณ„: DBMS๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ( ์Šคํ‚ค๋งˆ )๋ฅผ ์„ค๊ณ„
  • ๋ฌผ๋ฆฌ์  ์„ค๊ณ„: DBMS์— ํ…Œ์ด๋ธ”์„ ์ €์žฅํ•  ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„

โœ”๏ธย ERD( ER Diagram )

๐ŸŒฑ ERD, Entity-Relationship Diagram ( ๊ฐœ์ฒด-๊ด€๊ณ„ ๋‹ค์ด์–ด๊ทธ๋žจ )

  • ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐœ์ฒด์™€ ๊ด€๊ณ„ ํ˜•ํƒœ์˜ ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ
  • ํ‘œ๊ธฐ๋ฒ•: Peter Chen, IE
  • https://app.diagrams.net/

  • IE( Information Engineering )

  • ๊นŒ๋งˆ๊ท€๋ฐœ( crowโ€™s foot ) ํ‘œ๊ธฐ๋ฒ•

0๊ฐœ์˜ ๋Œ“๊ธ€