# kmg Database ๋ต๋ณ
###### tags: `Database ๋ต๋ณ`
## Database
#### ๐ก Database์ ํน์ง์ ์ค๋ช
ํ์์ค.
์ผ๊ด์ฑ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ๋ฌ ์ฌ๋๋ค์๊ฒ ์ค์๊ฐ์ผ๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
#### ๐ก Database ์ค๊ณ ์, ๊ณ ๋ คํ ์ ์ ์ค๋ช
ํ์์ค.
๋ฐ์ดํฐ์ ์ ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ์ ์ ํ์ฑ์ด๋ ๋ฐ์ดํฐ์ ์ค๋ณต์ด๋ ๋๋ฝ์ด ์๋ ์ํ๋ฅผ ๋งํฉ๋๋ค.
๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ ์์ธ๊ณผ ๊ฒฐ๊ณผ์ ์๋ฏธ๊ฐ ์ฐ์์ ์ผ๋ก ๋ณด์ฅ๋์ด ๋ณํ์ง ์๋ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
#### ๐ก Schema๊ฐ ๋ฌด์์ธ๊ฐ์?
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ค ๊ตฌ์กฐ๋ก ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋์ง๋ฅผ ์ ์ํ ๊ฒ์
๋๋ค.
์์ฑ, ๊ฐ์ฒด, ๊ด๊ณ, ์ ์ฝ์กฐ๊ฑด๋ค๋ก ๊ธฐ์ ๋ฉ๋๋ค.
#### ๐ก DBMS๋ ๋ฌด์์ธ๊ฐ์?
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๋ ์ํํธ์จ์ด ์
๋๋ค.
#### ๐ก ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ด ๋ฌด์์ธ๊ฐ์?
๋ณต์กํ ํ์ค ์ธ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํํด์ ์ปดํจํฐ ์ธ๊ณ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ณํํ๋ ๊ณผ์ ์
๋๋ค.
## Normalization
#### ๐ก ์ ๊ทํ๋ฅผ ์ ์งํํ๋์?
์ข
์์ ์ผ๋ก ์๋ชป ์ค๊ณ๋ ๊ด๊ณํ ์คํค๋ง๋ฅผ ๋ถํดํ์ฌ ํ๋์ ๋ฆด๋ ์ด์
์ ํํํ๊ธฐ ์ํด์ ์
๋๋ค. ์ ๊ทํ๋ฅผ ๊ฑฐ์น์ง ์์ผ๋ฉด ๋ฐ์ดํฐ์ ์ค๋ณต์ฑ ๋ฌธ์ ๋ก ์ธํด ์ด์ ํ์์ด ๋ฐ์ํฉ๋๋ค.
#### ๐ก ๋ชจ๋ ํ
์ด๋ธ์ ์ ๊ทํ๋ฅผ ์งํํ๋์?
์๋๋๋ค. ํญ์ ๊ฐ์ด ์ฌ์ฉ๋๋ ์์ฑ๊ฐ์ด ์ ๊ทํ๋ก ์ธํด ๊ฐ๊ฐ ๋ค๋ฅธ ํ
์ด๋ธ๋ก ์ชผ๊ฐ์ง๋ค๋ฉด ํญ์ join์ฐ์ฐ์ ํด์ผํฉ๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ์ฐ์ฐํ์์ ์ฆ๊ฐ๋ก ์ฑ๋ฅ ์ ํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ญ์ ๊ทํ๋ฅผ ์คํํฉ๋๋ค.
#### ๐ก ์ด์ํ์์ ๋ํด ์ค๋ช
ํ์์ค.
์ด์ํ์์ ์ ๊ทํ๋ฅผ ๊ฑฐ์น์ง ์์ ๋ฐ์ดํฐ๊ฐ ๋ถํ์ํ๊ฒ ์ค๋ณต๋์ด ์๊ธฐ๋ ๋ฌธ์ ๋ฅผ ์๋ฏธํฉ๋๋ค.
์ข
๋ฅ์๋ ์ฝ์
์ด์, ์ญ์ ์ด์, ๊ฐฑ์ ์ด์์ด ์์ต๋๋ค.
์ฝ์
์ด์์ ๋ฆด๋ ์ด์
์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ๋ ์ํ์ง ์์ ๊ฐ๋ค๋ ํจ๊ป ์ฝ์
๋๋ ํ์์ ์๋ฏธํฉ๋๋ค.
์ญ์ ์ด์์ ๋ฆด๋ ์ด์
์์ ํํ์ ์ญ์ ํ ๋ ๋ค๋ฅธ ๊ฐ๋ค๋ ํจ๊ป ์ญ์ ๋๋ ํ์์
๋๋ค.
๊ฐฑ์ ์ด์์ ๋ฆด๋ ์ด์
์์ ํํ์ ์์ฑ๊ฐ์ ๊ฐฑ์ ํ ๋ ์ผ๋ถ ํํ๋ง ๊ฐฑ์ ๋๋ ํ์์
๋๋ค.
#### ๐ก ์ ๊ทํ ๋จ๊ณ๋ณ ๊ณผ์ ์ ๋ํด ์ค๋ช
ํ์์ค.
์ 1์ ๊ทํ์ ๋๋ฉ์ธ์ ์์๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค.
์ 2์ ๊ทํ์ ๋ถ๋ถ ํจ์์ ์ข
์์ ์ ๊ฑฐํ๋ ๊ฒ์
๋๋ค.
์ 3 ์ ๊ทํ์ ์ดํ์ ํจ์ ์ข
์์ ์ ๊ฑฐํ๋ ๊ฒ์
๋๋ค.
BCNF ๋ ๊ฒฐ์ ์์ด๋ฉด์ ํ๋ณดํค๊ฐ ์๋๊ฒ์ ์ ๊ฑฐํ๋ ๊ฒ์
๋๋ค.
์ 4 ์ ๊ทํ์ ๋ค์น ์ข
์์ฑ์ ์ด์ฉํ๋ ๊ฒ์ด๊ณ , ์ 5 ์ ๊ทํ์ ์กฐ์ธ ์ข
์์ฑ์ ์ด์ฉํ๋ ๊ฒ์
๋๋ค.
## RDBMS/NoSQL
#### ๐ก ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ง
์คํค๋ง์ ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฏ๋ก ์ ๊ตํ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ๋ถํ์ ๋ถ์ฐ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ด ์์ต๋๋ค.
#### ๐ก ๋ฌด๊ฒฐ์ฑ ์ ์ฝ์กฐ๊ฑด์ด๋ ๋ฌด์์ธ๊ฐ?
๋ฐ์ดํฐ๊ฐ ์ ํ์ฑ๊ณผ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด์ ๊ฐ์ ธ์ผํ ์กฐ๊ฑด๋ค์ ์๋ฏธํฉ๋๋ค.
๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ์ ๊ธฐ๋ณธํค๊ฐ Null์ด๋ฉด ์๋๊ณ ์ค๋ณต ๊ฐ์ ๊ฐ์ง๋ฉด ์๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์ธ๋ํค ๊ฐ์ด Null ๋๋ ์ฐธ์กฐ ํ
์ด๋ธ์ ๊ธฐ๋ณธํค ๊ฐ๊ณผ ๋์ผํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
๋๋ฉ์ธ ๋ฌด๊ฒฐ์ฑ์ ์์ฑ๊ฐ์ด ๋๋ฉ์ธ์ ์ํ ๊ฐ์ด์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
#### ๐ก View๋ ๋ฌด์์ธ๊ฐ?
์ฌ์ฉ์์๊ฒ ์ ๊ทผ์ด ํ์ฉ๋ ๋ฐ์ดํฐ๋ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฐ์ ํ
์ด๋ธ์
๋๋ค.
#### ๐ก SQL๊ณผ NoSQL์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช
ํ์์ค.
sql์ ์คํค๋ง์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๊ฒ์์ ์ฉ์ดํฉ๋๋ค. ๋ฐ๋ฉด ์คํค๋ง๊ฐ ์๋ NoSQL์ ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ๋กญ๊ฒ ์ ์ฅํ ์ ์์ต๋๋ค.
#### ๐ก Select ์ฟผ๋ฆฌ ์คํ ์์
<img src = "https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRsvSY%2FbtqCEPbs2Sv%2Fq0kvql0BKJnxitoOFkBbGK%2Fimg.png">

#### ๐ก Subquery์ Join์ ์ฐจ์ด์
์๋ธ์ฟผ๋ฆฌ๋ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ด๋ถ์ ํฌํจ๋์ด ์๋ select๋ฌธ์ ์๋ฏธํฉ๋๋ค. Join์ด๋ 2๊ฐ์ ํ
์ด๋ธ์ ํน์ ์์ฑ์ ํตํด ์ฐ๊ฒฐํ๋ ๊ฒ์
๋๋ค.
#### ๐ก Subquery์ ์ฑ๋ฅ์?
MySQL 5.5 ์ดํ์ ๋ฒ์ ์์ IN์ ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ EXISTS๋ก ํ
์ด๋ธ์ FULL SCAN ํ์ฌ ์๋๊ฐ ๋๋ฆฝ๋๋ค. MySQL 5.6๋ถํฐ๋ ์ต์ ํ๊ฐ ๋์ด ์์ง๋ง ๋ค์ํ ์กฐ๊ฑด์ ์ต์ ํ๋์ด ์์ง ์์ ๊ฐ๋ฅํ join๋ฌธ 2๊ฐ๋ก ํธ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์
๋๋ค.
#### ๐ก PK์ FK ์ค๋ช
ํด์ฃผ์ธ์.
PK๋ ์ต์์ฑ, ์ ์ผ์ฑ ํน์ง์ ๊ฐ์ง๋ฉฐ null ๊ฐ์ ๊ฐ์ง ์ ์๋ ํค์
๋๋ค.
FK๋ ๋ฆด๋ ์ด์
๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ํ๋ ํค์
๋๋ค. FK๋ null๊ฐ์ด๊ฑฐ๋ ์ฐธ์กฐํ๋ ํ
์ด๋ธ์ PK ๊ฐ์ด์ด์ผ ํฉ๋๋ค.
## Transaction
#### ๐ก ํธ๋์ญ์
์ด๋ ๋ฌด์์ด๊ณ ํน์ฑ์ ๋ํด ์ค๋ช
ํ์์ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด ํ๋ฒ์ ์ํ๋์ด์ผ ํ ์ฐ์ฐ๋ค์
๋๋ค. ์์์ฑ, ์ผ๊ด์ฑ, ๊ณ ๋ฆฝ์ฑ, ์ง์์ฑ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
#### ๐ก ์ ๊ธ๊ธฐ๋ฒ(Locking)์ ๋ํด ์ค๋ช
ํ์์ค.
ํธ๋์ ์
์ฌ๋ฌ๊ฐ๊ฐ ๋์์ ์ํ๋ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์
๋๋ค. ํ๋์ ์
์ Lock์ ์ค์ ํ์ฌ Lock์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ํธ๋์ ์
์ด ์ํ๋ ์ ์๋๋ก ํฉ๋๋ค.
#### ๐ก ๊ต์ฐฉ์ํ(Deadlock)๋ ๋ฌด์์ธ๊ฐ?
์ฌ๋ฌ ํธ๋์ ์
์ด ์คํ๋์ง ๋ชปํ๊ณ ๋ฌด๊ธฐํ ๋๊ธฐ์ค์ธ ์ํ๋ฅผ ์๋ฏธํฉ๋๋ค.
#### ๐ก ๊ต์ฐฉ์ํ์ ๋น๋๋ฅผ ๋ฎ์ถ๋ ๋ฐฉ๋ฒ์๋ ๋ฌด์์ด ์๋์?
์๋ฐฉ๋ฐฉ๋ฒ๊ณผ ํ๋ณต๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์๋ฐฉ๋ฒ์ ํธ๋์ญ์
์์ ์ , ํ์ํ ๋ฐ์ดํฐ์ LOCK์ ๋ชจ๋ ๊ฑธ์ด์ฃผ๋ ๋ฐฉ๋ฒ์
๋๋ค.
ํ๋ณต๋ฒ์ ์์ ํ ๋น ์, ํ์์คํฌํ๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ ์์๋๋ก ์ ์ดํ๋ ๊ธฐ๋ฒ์
๋๋ค.
## Index
#### ๐ก Index๋ ๋ฌด์์ธ๊ฐ?
๋ฐ์ดํฐ์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ๊ธฐ ์ํด <ํค๊ฐ, ํฌ์ธํฐ> ์์ผ๋ก ๊ตฌ์ฑ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์
๋๋ค.
#### ๐ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Index ๊ตฌ์กฐ์ ๋ํด ์ค๋ช
ํ์์ค.
ํด์ฌํ
์ด๋ธ๊ณผ B+Tree ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค.
* ํด์ฌํ
์ด๋ธ์ ํค ๊ฐ์ ํด์ฌํจ์๋ฅผ ์ ์ฉํ์ฌ ๋์จ ์ฃผ์๊ฐ๊ณผ ๋งค์นญํ๋ ๊ธฐ๋ฒ์
๋๋ค. ํ์ง๋ง ๋ถ๋ฑํธ ์ฐ์ฐ์ด ๋ง์ db์๋ ํจ๊ณผ์ ์ด์ง ์์ ๋ฐฉ๋ฒ์
๋๋ค.
* B+Tree๋ LinkedList๋ก ์ฐ๊ฒฐ๋ ๊ตฌ์กฐ์
๋๋ค. ์ฐ๊ฒฐ๋ ๋
ธ๋๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด์ ์ผ์นํ๋ ๊ฐ์ผ๋ก ๊ฐ๋ฉด ์ฝ๊ณ , ์ผ์นํ์ง ์๋ ๊ฐ์ด ๋์ค๋ฉด ์ฆ์ ์ค์งํฉ๋๋ค. B+Tree๋ ๋ถ๋ฑํธ ์ฐ์ฐ์ ํจ์จ์ ์
๋๋ค.
##### ์ ํจ๊ณผ์ ์ผ๊น์?--> ํ ?
#### ๐ก Index๋ฅผ ๋ฐ๋ก ์ค์ ํ์ง ์์ ๊ฒฝ์ฐ์ ํ
์ด๋ธ์ ์ด๋ค๊ฐ์?
์ธ๋ฑ์ค๋ฅผ ์ค์ ํ์ง ์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก PK๊ฐ์ด ์ธ๋ฑ์ค๋ก ์ค์ ๋์ด ์์ต๋๋ค.
#### ๐ก Index ์ฌ์ฉ ์ ์ฅ๋จ์ ๊ณผ ์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ์ ๋์ ๊ฒฝ์ฐ์ ๋ํด ์ค๋ช
ํ์์ค.
์ธ๋ฑ์ค์ ์ฅ์ ์ ๋ฐ์ดํฐ์ ์กฐํ๊ฐ ๋น ๋ฅด๋ค๋ ์ ์ด๊ณ , ๋จ์ ์ ์ถ๊ฐ ์ ์ฅ๊ณต๊ฐ์ด ํ์ํ๋ค๋ ์ ์
๋๋ค.
์ธ๋ฑ์ค๋ ์ฝ์
, ์ญ์ , ๊ฐฑ์ ์ด ์์ฃผ ๋ฐ์ํ์ง ์๋ ํ
์ด๋ธ, ๋ฐ์ดํฐ ์ค๋ณต๋๊ฐ ๋ฎ์ ์นผ๋ผ์ ์ฌ์ฉํ๋ฉด ์ข์ต๋๋ค.
์ฝ์
, ์ญ์ , ๊ฐฑ์ ์ด ๋ฐ์ํ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค ํ
์ด๋ธ์ ์ฌ์ ๋ ฌํด์ผํฉ๋๋ค.์ด๋ ์คํ๋ ค ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
#### ๐ก ๋ชจ๋ ์นผ๋ผ์ Index๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๋์?
์ธ๋ฑ์ค๋ ์ธ๋ฑ์ค๋ก ์ค์ ๋ ์นผ๋ผ์ ์ถ๊ฐ ์ ์ฅ ๊ณต๊ฐ์ ์ ์ฅํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์นผ๋ผ์ ์ธ๋ฑ์ค๋ฅผ ๋ฃ๊ฒ ๋๋ฉด ์ ์ฅ ๊ณต๊ฐ์ ๋ง์ด ์ฐจ์งํ๊ฒ ๋ฉ๋๋ค. ๋ํ, ์ฝ์
, ์ญ์ , ๊ฐฑ์ ์ด ๋ฐ์ํ๊ฒ ๋๋ฉด ์ธ๋ฑ์ค ํ
์ด๋ธ์ ์ฌ์ ๋ ฌํด์ผํฉ๋๋ค.์ด๋ ์คํ๋ ค ์ฑ๋ฅ ์ ํ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.