๋ฐ์ดํฐ๋ฒ ์ด์ค
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ ๊ฐ๋
2. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ด (sql: ddl dml dcl)
3. RDBMS์ NoSql
4. ์ธ๋ฑ์ฑ
5. ์ ๊ทํ
6. ๋ฐ์ ๊ทํ
7. ํธ๋์ ์
8. join
1. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ธฐ๋ณธ ๊ฐ๋
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ง 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 ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋น๊ตํ์ฌ ์กฐ์ธ์ ์ํ
- ํด์ฌ ํ ์ด๋ธ์ด ๋ฉ๋ชจ๋ฆฌ์ ์จ์ ํ ์ฌ๋ผ๊ฐ ๋ ์ฑ๋ฅ ↑
- ๋๋ฑ์ฐ์ฐ์๊ฐ ๋ง์ ๊ฒฝ์ฐ
'โญ Personal_Study > CS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
CS ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ์ด์์ฒด์ 2 (0) | 2023.03.03 |
---|---|
CS ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ์ด์์ฒด์ 1 (3) | 2023.03.02 |
CS ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ๋คํธ์ํฌ (0) | 2023.02.23 |
CS ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ์๊ณ ๋ฆฌ์ฆ (0) | 2023.02.19 |
CS ๋ฉด์ ์ง๋ฌธ ์ ๋ฆฌ - ์๋ฃ๊ตฌ์กฐ (0) | 2023.02.12 |
๋๊ธ