๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โญ Personal_Study/CS

CS ๋ฉด์ ‘ ์งˆ๋ฌธ ์ •๋ฆฌ - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

by ํฌ์ŠคํŠธ์‰์ดํฌ 2023. 3. 11.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ณธ ๊ฐœ๋…
2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ธ์–ด (sql: ddl dml dcl)
3. RDBMS์™€ NoSql
4. ์ธ๋ฑ์‹ฑ
5. ์ •๊ทœํ™”
6. ๋ฐ˜์ •๊ทœํ™”
7. ํŠธ๋žœ์ ์…˜
8. join

1. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ธฐ๋ณธ ๊ฐœ๋…

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ง• 4๊ฐ€์ง€

โœ” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€?: ํŠน์ • ์กฐ์ง์˜ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๋“ค์ด ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ†ตํ•ฉํ•ด์„œ ์ €์žฅํ•œ ์šด์˜๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ

  1. ์‹ค์‹œ๊ฐ„ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์‚ฌ์šฉ์ž๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅธ ์‹œ๊ฐ„ ๋‚ด์— ์ œ๊ณต
  2. ๊ณ„์† ๋ณ€ํ™”
    • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋Š”
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์†์ ์œผ๋กœ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ • ํ•˜๋ฉด์„œ ์ตœ์‚ฐ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  3. ๋™์‹œ ๊ณต์œ 
    • ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ๊ฐ™์€ ๋‚ด์šฉ์˜ ๋ฐ์ดํ„ฐ ์ด์šฉ ๊ฐ€๋Šฅ
  4. ๋‚ด์šฉ ๊ธฐ๋ฐ˜ ์ฐธ์กฐ
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์ฃผ์†Œ๋‚˜ ์œ„์น˜๊ฐ€ ์•„๋‹Œ ๋‚ด์šฉ์„ ํ†ตํ•œ ์ฐธ์กฐ ๊ฐ€๋Šฅ

DBMS (DataBase Management System, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ)

โœ” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์Šคํ…œ (ex: MySql)

โœ” ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ •์˜(Definition): DB ๊ตฌ์กฐ ์ •์˜ ๋ฐ ์ˆ˜์ •
  • ์กฐ์ž‘(Manipulation): DB ๋‚ด ๋ฐ์ดํ„ฐ ์กฐ์ž‘
  • ์ œ์–ด(Control): DB ์ ‘๊ทผ ๋ฐ ๊ถŒํ•œ ์„ค์ •

2. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์–ธ์–ด

โœ” SQL: ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (RDB)๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ์งˆ์˜์–ด

DDL (Data Definition Language)

โœ” ์ •์˜์–ด

โœ” ํ…Œ์ด๋ธ” ์ƒ์„ฑ(CREATE), ๋ณ€๊ฒฝ(ALTER), ์ œ๊ฑฐ(DROP)

โœ” Contraints

  • ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ์— ์„ค์ •ํ•˜๋Š” ์ œ์•ฝ
  • NOT NULL
  • UNIQUE
  • PRIMARY KEY
  • AUTOINCREMENT
-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ

CREATE TABLE ํ…Œ์ด๋ธ”์ด๋ฆ„ (
   ์†์„ฑ์ด๋ฆ„ ๋ฐ์ดํ„ฐํƒ€์ž… [NOT NULL] [DEFAULT ๊ธฐ๋ณธ๊ฐ’]
   [PRIMARY KEY (์†์„ฑ๋ฆฌ์ŠคํŠธ)]
   [UNIQUE (์†์„ฑ๋ฆฌ์ŠคํŠธ)]
   [FOREIGN KEY (์†์„ฑ๋ฆฌ์ŠคํŠธ) REFERENCES ํ…Œ์ด๋ธ”์ด๋ฆ„(์†์„ฑ๋ฆฌ์ŠคํŠธ)] [ON DELETE ์˜ต์…˜] [ON UPDATE ์˜ต์…˜]
   [CONSTRAINT ์ด๋ฆ„] [CHECK(์กฐ๊ฑด)]
);

CREATE TABLE ๊ณ ๊ฐ(
    ID varchar(20) not null,
    name varchar(10) not null,
    age int,
    class varchar(10) not null,
    job varchar(20),
    point int default 0,
    primary key(ID)
);
-- ์ˆ˜์ •

-- ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์— ๊ฐ€์ž…๋‚ ์งœ ์†์„ฑ ์ถ”๊ฐ€
alter table ๊ณ ๊ฐ add ๊ฐ€์ž…๋‚ ์งœ date;

-- ๊ฐ€์ž…๋‚ ์งœ ์†์„ฑ ์‚ญ์ œ
alter table ๊ณ ๊ฐ drop column ๊ฐ€์ž…๋‚ ์งœ;

-- ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€
alter table ๊ณ ๊ฐ add constraint chk_age check(๋‚˜์ด >= 20);

-- ์ œ์•ฝ ์กฐ๊ฑด ์‚ญ์ œ
alter table ๊ณ ๊ฐ drop constraint chk_age;
-- ์‚ญ์ œ

drop table ๊ณ ๊ฐ

DML (Data Manipulation Language)

โœ” ์กฐ์ž‘์–ด

โœ” ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์‚ฝ์ž…(INSERT), ์ˆ˜์ •(UPDATE), ์‚ญ์ œ(DELETE), ๊ฒ€์ƒ‰(SELECT)


-- ๊ฒ€์ƒ‰ (์ด์™ธ์—๋„ ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์กฐ๊ฑด ๊ฒ€์ƒ‰์„ ํ•  ์ˆ˜ ์žˆ๋‹ค)
SELECT ์ฃผ๋ฌธ์ œํ’ˆ, ์ˆ˜๋Ÿ‰, ์ฃผ๋ฌธ์ผ์ž, ์ฃผ๋ฌธ๊ณ ๊ฐ
FROM ์ฃผ๋ฌธ
WHERE ์ฃผ๋ฌธ๊ณ ๊ฐ = 'apple' OR ์ˆ˜๋Ÿ‰ >= 15;

-- ์‚ฝ์ž…
INSERT INTO table_name (column1, column2)
VALUES (value1, value2...);

-- ์ˆ˜์ •
UPDATE table_name
SET column1=value1,
    column2=value2,
WHERE search_condition;

-- ์‚ญ์ œ
DELETE FROM table_name
WHERE search_condition;

DCL (Data Control Language)

โœ” ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์œ ์ง€, ๋ณ‘ํ–‰ ์ˆ˜ํ–‰ ์ œ์–ด, ๋ณดํ˜ธ ๋ฐ ๊ด€๋ฆฌ

  • COMMIT, ROLLBACK, GRANT, REVOKE

โœ” COMMIT: ํŠธ๋žœ์ ์…˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๊ณ  db์— ๋ฐ˜์˜

โœ” ROLLBACK: db๋ฅผ ๋งˆ์ง€๋ง‰ commit ์‹œ์ ์˜ ์ƒํƒœ๋กœ ๋ณต์›

โœ” GRANT: ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ์—‘์„ธ์Šค ๊ถŒํ•œ ์ œ๊ณต

โœ” REVOKE: ํŠน์ • ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€์—ฌ ๋˜์—ˆ๋˜ ์—‘์„ธ์Šค ๊ถŒํ•œ ์ฒ ํšŒ

โœ” ๊ฒฝ์šฐ์— ๋”ฐ๋ผ COMMIT๊ณผ ROLLBACK์€ ํŠธ๋žœ์ ์…˜ ์ œ์–ด ์–ธ์–ด(TCL)๋กœ ๋ถ„๋ฅ˜ํ•˜๊ธฐ๋„ ํ•œ๋‹ค!

3. RDBMS์™€ NoSql

โœ” ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•œ db์˜ ํŠน์ง•๊ณผ ์™œ ์‚ฌ์šฉํ–ˆ๋Š”์ง€๋ฅผ ์ž˜ ์•Œ์•„๋‘์ž! (ex: ์ฑ„ํŒ…/๋กœ๊ทธ - mongodb, jwt - redis)

RDBMS

โœ” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค

โœ” ํ–‰๊ณผ ์—ด์„ ๊ฐ€์ง€๋Š” ํ‘œ(2์ฐจ์› ํ…Œ์ด๋ธ”) ํ˜•์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค

โœ” ์žฅ์ : schema์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ ํ•˜๊ธฐ ๋–„๋ฌธ์— ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ณด์žฅ ์œ ๋ฆฌ

โœ” ๋‹จ์ : ์‹œ์Šคํ…œ์ด ์ปค์งˆ ์ˆ˜๋ก ์ฟผ๋ฆฌ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ  ์„ฑ๋Šฅ ์ €ํ•˜, ์ˆ˜ํ‰์  ํ™•์žฅ ์–ด๋ ค์›€

โœ” MySQL

  • ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” rdbms (ํ˜ธํ™˜์„ฑ, ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ)
  • ์˜ค๋ผํด์ด ์ธ์ˆ˜

โœ” ORACLE DB

  • ๊ธฐ์—…์ฒด์—์„œ ๋งŽ์ด ์‚ฌ์šฉ
  • ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์šฉ์ด

โœ” MARIA DB

  • MySQl ๊ธฐ๋ฐ˜ ์˜คํ”ˆ์†Œ์Šค rdbms

โœ” PostgreSQL

  • SQL ํ‘œ์ค€ ↑
  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ๊ฐ•์ 

NoSQL

โœ” RDBMS๊ฐ€ ๋น„๋Œ€ํ•ด์ง์— ๋”ฐ๋ผ ๊ด€๊ณ„๊ฐ€ ๋ณต์žกํ•ด์ ธ, ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

โœ” ํŠน์ง•

  • ํ™•์žฅ์„ฑ, ์œ ์—ฐ์„ฑ ↑
    • ์ผ๊ด€์„ฑ ์•ˆ์ •์„ฑ ↓ (Trade Off)
  • ์ˆ˜ํ‰์  ํ™•์žฅ, ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ์˜ ๋ถ„์‚ฐ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌ์— ์šฉ์ด!
  • ๋ช…์‹œ์ ์ธ ์Šคํ‚ค๋งˆ x

โœ” ์‚ฌ์šฉ ์‚ฌ๋ก€: ์ฑ„ํŒ…, ๊ตฌ๋งค ๋‚ด์—ญ, ๋กœ๊ทธ

  • ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ ์–‘์€ ๋งŽ์ง€๋งŒ, ์ €์žฅํ•˜๊ณ  ๋‚˜์„œ ๊ตณ์ด ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ผ๊ด€์„ฑ๊ณผ ๊ด€๊ณ„์„ฑ์„ ์—„๋ฐ€ํžˆ ๋ณด์žฅํ•ด์ค˜์•ผํ•  ์ผ์€ ์—†๋‹ค

โœ” ์ €์žฅ ๋ฐฉ์‹

  • Key-Value(Redis)
  • Document(MongoDB)
  • graph

โœ” MongoDB

  • Document ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ

โœ” Redis

  • key-value ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • in-memory db
  • ์บ์‹ฑ ์ง€์›

4. ์ธ๋ฑ์‹ฑ

โœ” key(column์˜ ๊ฐ’) - value(address) ํ˜•ํƒœ๋กœ ๋ณ„๋„์˜ ๊ณต๊ฐ„์— ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ํƒ์ƒ‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผœ์ฃผ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ

โœ” DBMS์—์„œ ์ธ๋ฑ์Šค๋Š” ์ •๋ ฌ๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋–„๋ฌธ์— ๊ฒ€์ƒ‰ ์†๋„๋Š” ๋น ๋ฅด์ง€๋งŒ, ์‚ฝ์ž… ๋ฐ ์ˆ˜์ •, ์‚ญ์ œ๋Š” ์ฟผ๋ฆฌ๋ฌธ ์‹คํ–‰ ์†๋„๊ฐ€ ๋Š๋ ค์ง„๋‹ค.

โœ” ์žฅ์ 

  • ํ…Œ์ด๋ธ” ๊ฒ€์ƒ‰ ์†๋„ ๋ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ

โœ” ๋‹จ์ 

  • ์ธ๋ฑ์Šค ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ์ €์žฅ๊ณต๊ฐ„ ํ•„์š”
  • ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œ์˜ ๊ฒฝ์šฐ ์˜คํžˆ๋ ค ์„ฑ๋Šฅ ์ €ํ•˜ ๊ฐ€๋Šฅ์„ฑ

โœ” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์€ ๊ฒฝ์šฐ

  • ๊ทœ๋ชจ๊ฐ€ ํฐ ํ…Œ์ด๋ธ”
  • ์‚ฝ์ž…, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ”
  • WHERE, ORDERBY,JOIN ๋“ฑ์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์นผ๋Ÿผ
  • ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์ด ์ ์€ ์นผ๋Ÿผ

์ธ๋ฑ์Šค์˜ ์ž๋ฃŒ๊ตฌ์กฐ

โœ” Hash Table

  • key-value ์Œ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • O(1) ์‹œ๊ฐ„๋ณต์žก๋„

โœ” B+ Tree

  • leaf node์—๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  leaf node๊ฐ€ ์•„๋‹Œ node์—๋Š” ์ž์‹์˜ ํฌ์ธํ„ฐ๋งŒ ์ €์žฅํ•œ๋‹ค
  • leaf node๋ผ๋ฆฌ๋Š” Linked list๋กœ ์—ฐ๊ฒฐ
  • O(logN) ์‹œ๊ฐ„๋ณต์žก๋„
  • ์ผ๋ฐ˜์ ์œผ๋กœ B+ Tree ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„

โœ” ์™œ B+ Tree๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

  • hash table์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋น ๋ฅด์ง€๋งŒ =(๋™๋“ฑ์—ฐ์‚ฐ์ž) ์—ฐ์‚ฐ์—๋งŒ ์ตœ์ ํ™”๋˜์–ด ์žˆ์–ด์„œ >(๋น„๊ต์—ฐ์‚ฐ์ž)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ๋ถ€์ ํ•ฉํ•˜๋‹ค!

5. ์ •๊ทœํ™”

์ •๊ทœํ™”๋ž€?

โœ” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜๋Š” ์ž‘์—…

  • ํ•จ์ˆ˜ ์ข…์†์„ฑ์„ ์ด์šฉํ•ด ๋ฆด๋ ˆ์ด์…˜๊ณผ ์—ฐ๊ด€์„ฑ์ด ์žˆ๋Š” ์†์„ฑ๋“ค๋กœ๋งŒ ๊ตฌ์„ฑ๋˜๋„๋ก ๋ถ„ํ•ดํ•ด์„œ,
    ์ด์ƒ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฆด๋ ˆ์ด์…˜์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋Š” ๊ณผ์ •

โœ” ๋‹จ์ : ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ SQL์ž‘์„ฑ์ด ์šฉ์ดํ•˜์ง€ ์•Š๊ณ  ๊ณผ๋‹คํ•œ ํ…Œ์ด๋ธ” JOIN ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.

โœ” ํ•จ์ˆ˜ ์ข…์†์„ฑ(Functional Dependency)

  • X -> Y
  • X ๊ฐ’์— ๋Œ€ํ•ด Y ๊ฐ’์ด ํ•ญ์ƒ ํ•˜๋‚˜์ธ ๊ฒฝ์šฐ, Y๊ฐ€ X์— ํ•จ์ˆ˜์ ์œผ๋กœ ์ข…์†๋˜์–ด ์žˆ๋‹ค๋ผ๊ณ  ํ‘œํ˜„)

์ •๊ทœํ˜•

์ œ 1 ์ •๊ทœํ˜•

โœ” ๋ฆด๋ ˆ์ด์…˜์˜ ๋ชจ๋“  ๋„๋ฉ”์ธ(์†์„ฑ๊ฐ’)์ด ๋” ์ด์ƒ ๋ถ„ํ•ด ๋  ์ˆ˜ ์—†๋Š” ์›์ž์„ฑ์„ ๊ฐ€์ง„๋‹ค

์ œ 2 ์ •๊ทœํ˜•

โœ” ๋ฆด๋ ˆ์ด์…˜์ด ์ œ 1์ •๊ทœํ˜•์ด๋ฉฐ, ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ์†์„ฑ์ด ๊ธฐ๋ณธ ํ‚ค์— ์™„์ „ ํ•จ์ˆ˜ ์ข…์†์ (๋ถ€๋ถ„ ํ•จ์ˆ˜์˜ ์ข…์†์„ฑ ์ œ๊ฑฐ)์ด๋‹ค

โœ” ์™„์ „ ํ•จ์ˆ˜ ์ข…์†์„ฑ: A์™€ B๊ฐ€ ๋ฆด๋ ˆ์ด์…˜ R์˜ ์†์„ฑ์ด๊ณ  A→B ์ข…์†์„ฑ์ด ์„ฑ๋ฆฝํ•  ๋•Œ, B๊ฐ€ A์˜ ์†์„ฑ ์ „์ฒด์— ํ•จ์ˆ˜ ์ข…์†ํ•˜๊ณ  ๋ถ€๋ถ„ ์ง‘ํ•ฉ ์†์„ฑ์— ํ•จ์ˆ˜ ์ข…์†ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

์ œ 3 ์ •๊ทœํ˜•

โœ” ๋ฆด๋ ˆ์ด์…˜์ด ์ œ 2 ์ •๊ทœํ˜•์ด๋ฉฐ, ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ์†์„ฑ์ด ์ดํ–‰์  ํ•จ์ˆ˜ ์ข…์†(transitive FD)๋ฅผ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ

โœ” ์ดํ–‰์  ํ•จ์ˆ˜ ์ข…์†: A→B, B→C๊ฐ€ ์„ฑ๋ฆฝํ•  ๋•Œ A→C๊ฐ€ ์„ฑ๋ฆฝ๋˜๋Š” ํ•จ์ˆ˜ ์ข…์†์„ฑ

BCNF ์ •๊ทœํ˜• (Boyce Codd Normal Form)

โœ” ๋ฆด๋ ˆ์ด์…˜ R์—์„œ ํ•จ์ˆ˜ ์ข…์†์„ฑ A→B๊ฐ€ ์„ฑ๋ฆฝํ•  ๋•Œ ๋ชจ๋“  ๊ฒฐ์ •์ž A๊ฐ€ ํ›„๋ณดํ‚ค์ธ ๊ฒฝ์šฐ

โ€ป ๊ทธ๋ฆผ์ถœ์ฒ˜ : ํ•œ๋น›์•„์นด๋ฐ๋ฏธ(์ฃผ) , IT CookBook, SQL Server๋กœ ๋ฐฐ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐœ๋ก ๊ณผ ์‹ค์Šต

6. ๋ฐ˜์ •๊ทœํ™”

๋ฐ˜์ •๊ทœํ™”๋ž€?

โœ” ์ •๊ทœํ™”๋œ ์—”ํ‹ฐํ‹ฐ, ์†์„ฑ, ๊ด€๊ณ„๋ฅผ ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ ๋ฐ ๊ฐœ๋ฐœ๊ณผ ์šด์˜์˜ ๋‹จ์ˆœํ™”๋ฅผ ์œ„ํ•ด ์ค‘๋ณต ํ†ตํ•ฉ, ๋ถ„๋ฆฌ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง ๊ธฐ๋ฒ•

โœ” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ๋‹จ์ˆœํ•ด์ง€๋ฏ€๋กœ SQL ์ž‘์„ฑ์ด ์šฉ์ดํ•˜๊ณ  ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

โœ” ๋ฐ˜๋Œ€๋กœ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๊ฑธ์ณ ์กด์žฌํ•˜๋ฏ€๋กœ ๋ฌด๊ฒฐ์„ฑ์ด ๊นจ์งˆ ์šฐ๋ ค๋„ ์žˆ๋‹ค!

โœ” ๋ฐ˜์ •๊ทœํ™”์˜ ๋Œ€์ƒ

  • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ…Œ์ด๋ธ”์— ์•ก์„ธ์Šคํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ๊ณ , ํ•ญ์ƒ ์ผ์ •ํ•œ ๋ฒ”์œ„๋งŒ์„ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ
  • ํ…Œ์ด๋ธ”์— ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๊ณ  ๋Œ€๋Ÿ‰์˜ ๋ฒ”์œ„๋ฅผ ์ž์ฃผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ, ์„ฑ๋Šฅ์ƒ ์ด์Šˆ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ
  • ํ…Œ์ด๋ธ”์— ์ง€๋‚˜์น˜๊ฒŒ ์กฐ์ธ์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒƒ์ด ๊ธฐ์ˆ ์ ์œผ๋กœ ์–ด๋ ค์šธ ๊ฒฝ์šฐ

ํ…Œ์ด๋ธ”์˜ ๋ฐ˜์ •๊ทœํ™”

โœ” 1:1 ๊ด€๊ณ„์˜ ํ…Œ์ด๋ธ” ๋ณ‘ํ•ฉ

โœ” 1:N ๊ด€๊ณ„์˜ ํ…Œ์ด๋ธ” ๋ณ‘ํ•ฉ

โœ” ์ˆ˜ํผ/์„œ๋ธŒ ํƒ€์ž… ํ…Œ์ด๋ธ” ๋ณ‘ํ•ฉ

โœ” ์ˆ˜์ง ๋ถ„ํ• (์ง‘์ค‘ํ™”๋œ ์ผ๋ถ€ ์นผ๋Ÿผ์„ ๋ถ„๋ฆฌ)

  • ๊ฐ™์€ ํ…Œ์ด๋ธ”์ธ๋ฐ ์–‘์ด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒฝ์šฐ ๋“ฑ

โœ” ์ˆ˜ํ‰ ๋ถ„ํ• (ํ–‰์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ตฌ๊ฐ„๋ณ„ ๋ถ„๋ฆฌ)

โœ” ํ…Œ์ด๋ธ” ์ถ”๊ฐ€(์ค‘๋ณตํ…Œ์ด๋ธ”, ํ†ต๊ณ„ํ…Œ์ด๋ธ”, ์ด๋ ฅํ…Œ์ด๋ธ”, ๋ถ€๋ถ„ํ…Œ์ด๋ธ”)

์นผ๋Ÿผ์˜ ๋ฐ˜์ •๊ทœํ™”

โœ” ์ค‘๋ณต์นผ๋Ÿผ ์ถ”๊ฐ€(์ž์ฃผ ์กฐํšŒํ•˜๋Š” ์นผ๋Ÿผ์ด ์žˆ๋Š” ๊ฒฝ์šฐ)

โœ” ํŒŒ์ƒ ์ปฌ๋Ÿผ ์ถ”๊ฐ€(๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ ๊ฐ’)

โœ” PK์— ์˜ํ•œ ์ปฌ๋Ÿผ ์ถ”๊ฐ€

โœ” ์‘์šฉ ์‹œ์Šคํ…œ ์˜ค์ž‘๋™์„ ์œ„ํ•œ ์ปฌ๋Ÿผ ์ถ”๊ฐ€(์ด์ „ ๋ฐ์ดํ„ฐ ์ž„์‹œ๋ณด๊ด€)

๊ด€๊ณ„์˜ ๋ฐ˜์ •๊ทœํ™”

โœ” ์ค‘๋ณต ๊ด€๊ณ„ ์ถ”๊ฐ€(์ด๋ฏธ Aํ…Œ์ด๋ธ”์—์„œ Cํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ด€๊ณ„๊ฐ€ ์ž„์Œ์—๋„ ๊ด€๊ณ„๋ฅผ ์ค‘๋ณตํ•˜์—ฌ ์กฐํšŒ(READ) ๊ฒฝ๋กœ๋ฅผ ๋‹จ์ถ•)

7. Transaction

โœ” Transaction(ํŠธ๋žœ์žญ์…˜): ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ํ•˜๋‚˜์˜ ๋…ผ๋ฆฌ์  ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—… ๋‹จ์œ„

ํŠธ๋žœ์žญ์…˜์˜ ์—ฐ์‚ฐ

โœ” Commit : ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์„ฑ๊ณต (์ž‘์—… ์™„๋ฃŒ), ๊ฒฐ๊ณผ๋ฅผ DB์— ๋ฐ˜์˜
โœ” Rollback : ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ์‹คํŒจ (์ž‘์—… ์ทจ์†Œ), ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ „ ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ

ํŠธ๋žœ์žญ์…˜์˜ ํŠน์„ฑ (ACID)

โœ” Atomicity(์›์ž์„ฑ): ํŠธ๋žœ์žญ์…˜์— ํฌํ•จ๋œ ์ž‘์—…์€ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜๊ฑฐ๋‚˜ ์ „๋ถ€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Œ์„ ๋ณด์žฅํ•œ๋‹ค

โœ” Consistency(์ผ๊ด€์„ฑ): ํŠธ๋žœ์žญ์…˜์˜ ์ˆ˜ํ–‰ ์ „/ํ›„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ผ๊ด€๋œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค

  • ํ—ˆ์šฉ๋œ ๋ฐฉ์‹์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ

โœ” Isolation(๊ฒฉ๋ฆฌ์„ฑ): ํŠธ๋žœ์žญ์…˜ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ์— ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค

โœ” Durability(์ง€์†์„ฑ): ํŠธ๋žœ์žญ์…˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋Š” ์†์‹ค๋˜์ง€ ์•Š๊ณ  ์˜๊ตฌ์ ์ด๋‹ค

8. Join

โœ” Join: ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋ฌถ์–ด์„œ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ

JOIN์˜ ์ข…๋ฅ˜

โœ” INNER JOIN

  • ์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋‘ ํ–‰์ด ๋ชจ๋‘ ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์žˆ๋Š” ๋ถ€๋ถ„๋งŒ ํ‘œ๊ธฐ
SELECT * FROM TableA A
INNER JOIN TableB B ON
A.key = B.key;

โœ” LEFT JOIN

  • JOIN๋ฌธ ๊ธฐ์ค€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”(A)์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ์™€, Aํ…Œ์ด๋ธ”๊ณผ Bํ…Œ์ด๋ธ”์˜ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ํ‘œ๊ธฐ
    • B์— ๊ฐ’์ด ์—†์œผ๋ฉด NULL
SELECT * FROM TableA A
LEFT JOIN TableB B ON
A.key = B.key;

โœ” RIGHT JOIN

  • JOIN๋ฌธ ๊ธฐ์ค€ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”(B)์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ์™€, Aํ…Œ์ด๋ธ”๊ณผ Bํ…Œ์ด๋ธ”์˜ ์ค‘๋ณต ๋ฐ์ดํ„ฐ ํ‘œ๊ธฐ
    • A์— ๊ฐ’์ด ์—†์œผ๋ฉด NULL
SELECT * FROM TableA A
RIGHT JOIN TableB B ON
A.key = B.key;

โœ” FULL OUTER JOIN

  • ์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํ‘œ๊ธฐ
    • ๊ฐ’์ด ์—†์œผ๋ฉด NULL
SELECT * FROM TableA A
FULL OUTER JOIN TableB B ON
A.key = B.key;

Join์˜ ์›๋ฆฌ

โœ” ์ค‘์ฒฉ ๋ฃจํ”„ ์กฐ์ธ(Nested Loop Join): ํ…Œ์ด๋ธ”์—์„œ row๋ฅผ ํ•˜๋‚˜์”ฉ ์ฝ์–ด์„œ ์กฐ๊ฑด์— ๋งž๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ฐพ๋Š” ๋ฐฉ์‹

  • ๋Œ€์šฉ๋Ÿ‰ ํ…Œ์ด๋ธ”์—์„œ๋Š” ์‚ฌ์šฉ x(ํ›„ํ–‰ ํ…Œ์ด๋ธ” ๋žœ๋ค ์ ‘๊ทผ ๋น„์šฉ)

โœ” ์ •๋ ฌ ๋ณ‘ํ•ฉ ์กฐ์ธ: ๊ฐ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•  ํ•„๋“œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  join ์ˆ˜ํ–‰

  • ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ joinํ•  ๋•Œ ๋ฒ”์œ„ ๋น„๊ต ์—ฐ์‚ฐ์ž (<, > ๋“ฑ)์ด ๋งŽ์€ ๊ฒฝ์šฐ

โœ” ํ•ด์‰ฌ ์กฐ์ธ: ๋‘ ํ…Œ์ด๋ธ” ์ค‘ ํ•˜๋‚˜๋ฅผ Hash Table๋กœ ์„ ์ •ํ•˜์—ฌ, ํ…Œ์ด๋ธ”์˜ key ๊ฐ’์„ Hash ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋น„๊ตํ•˜์—ฌ ์กฐ์ธ์„ ์ˆ˜ํ–‰

  • ํ•ด์‰ฌ ํ…Œ์ด๋ธ”์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜จ์ „ํžˆ ์˜ฌ๋ผ๊ฐˆ ๋–„ ์„ฑ๋Šฅ ↑
  • ๋™๋“ฑ์—ฐ์‚ฐ์ž๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ

๋Œ“๊ธ€