2023. 1. 23. 05:32ใData science/Database
SQL vs NoSQL
SQL์ ํ ์ด๋ธ ํ์, NoSQL์ ์ ํํ๋์ง ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์.
SQL์ ๊ธฐ๋ณธ ๊ฐ๋ ์ธ ํ ์ด๋ธ, ๊ด๊ณ์ ๊ฐ๋ ์ NoSQL์์๋ ์ฝ๋ ์ , ๊ทธ๋ฆฌ๊ณ ์ฐธ์กฐ ํน์ ๋ด์ฅํ์ ๊ฐ๋ ์ ๋๋ก ์๊ฐํ ์ ์๊ฒ ๋ค.
SQL์ ์ ํํ๋์ด ์์ด์ ๋จธ๋ฆฟ์์ ์ฌ์ค ๊ตฌ๋๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋์ ์ผ๋ก ํธํ๋ค. ๋ฐ๋ฉด, NoSQL์ ๊ตฌ์กฐ๊ฐ ์ ํํ๋์ด ์์ง ์์์ ๋จธ๋ฆฟ์์ ๊ตฌ์กฐ๋ฅผ ๋ช ํํ๊ฒ ๊ทธ๋ฆฌ๊ธฐ๊ฐ ์ฒ์์ ์ฝ์ง ์๋ค. ํ์ง๋ง ๊ทธ๋ก ์ธํ ์ฅ์ ์ ํ์ฅ์ฑ์ ์๋ค๊ณ ํ ์ ์๊ฒ ๋ค.
์๋ฅผ ๋ค์ด SQL์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ํด์ง ํ ์ด๋ธ์ ํํ ์์ ๋ฃ์ด์ผ๋ง ํ์ง๋ง NoSQL์์๋ ๊ทธ๋ฐ ๋ถ๋ถ์ ์ ์ฝ์กฐ๊ฑด์ผ๋ก ์ถ๊ฐํ๊ฑฐ๋ ํน์ ์ ์ฝ ์กฐ๊ฑด ์์ด ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ํ๋์ ์ฝ๋ ์ (SQL๋ก ์น๋ฉด ํ๋์ ํ ์ด๋ธ)์ ๋ชฝ๋ ๊ทธ๋ฆฌ ์ ์ฅํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
ํ๋์ ์ปฌ๋ ์ ์ ๋ชฝ๋ ๊ทธ๋ฆฌ ์ง์ด๋ฃ์ด์ ์ข์ ์ ์ ๋ด๊ฐ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ํ ๊ตฐ๋ฐ์ ๋ค ์ฐพ์ ๋ณผ ์ ์๋ค๋ ๊ฒ.
๋ฌด์จ ๋ง์ด๋๋ฉด ๋์ค์ ์ํ๋ ๊ฑธ ์ฐพ์ ๋ SQL์ ๊ฒฝ์ฐ ํ ์ด๋ธ ์กฐ์ธ์ด๋ผ๋ ๊ฒ์ ํด์ ๋ค๋ฅธ ํ ์ด๋ธ์ ์๋ ๊ฑธ ์ฐพ์ ์ฐพ์ ๊ฐ์ผํ๋ ๋ฐ๋ฉด, NoSQL์ ๋ณด๋ถ์ ๊ฐ๋ฐฉ์ฒ๋ผ ์ํ๋ ๊ฑฐ ๊ด๋ จ๋ ๊ฒ ํ ๊ฐ๋ฐฉ์์ ๋ค ์์ผ๋ ํ๋ฒ์ ์ฟผ๋ฆฌ๋ก ์ฐพ์๋ผ ์ ์๋ค๋ ๊ฒ์ด ๊ฐ์ ์ด๋ผ๊ณ ํ ์ ์๋ค.
Data Base, ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ์๋ฏธ์๋ ๋ฐ์ดํฐ๋ค์ ๊ตฌ์กฐํ๋ ๋ชจ์์ด๋ค. (Collection)
๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ญ์ฌ
1960-70 ๋ ๋: ํ์ฌ๋ค์ ์ฌ๋ด์ ์ดํ๋ฆฌ์ผ์ด์
- SQL, COBOL ๊ฐ์ ๊ฒ๋ค์ด ๊ฐ ํ์ฌ ๋ง๋ค ์ฌ์ฉ๋์์ผ๋ฉฐ ์ ํํ๋ ๊ธฐ์ค ๊ฐ์ ๊ฒ์ด ๋ฐ๋ก ์์๋ค. ๊ทธ ๋น์ ๋ฐ์ดํฐ์ ์ ์ฅ ๋งค์ฒด๋ ์ปดํจํฐ์ ํ ์ดํ ํํ์ ์ ์ฅ๋์๊ธฐ์ ๋ฐ์ดํฐ ์ ๊ทผ ์๋๊ฐ ๋๋ ธ์ผ๋ฉด ์์ฐจ์ ์ธ๋ฑ์ค๋ ๊ฐ๋จํ ์ธ๋ฑ์ค๊ฐ ์ฃผ๋ก ์ฌ์ฉ๋์๋ค.
1980-2000 ๋ ๋์ ๋ค์ด ์ด ์ดํ๋ฆฌ์ผ์ด์ ๋ค์ด ๋ ๋๊ฒ ์์ฉ๋๊ธฐ ์์ํ๋ค. SQL ํ์ค(1986), MS Access, ๊ด๊ณํ ๋ชจ๋ธ๋ค์ ๋ฐ์ ๋๊ธฐ ์์ํ๊ณ ์์ ์ฉ์ด๋ ๋ฏธ๋์ด๋ฅผ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ค์ด ์ฌ์ฉ๋๊ธฐ ์์ํ๋ค. (NoSQL)
2000๋ ๋ ์ดํ๋ก ์์ ๋ฏธ๋์ด๊ฐ ์ฑ์ฅํ๋ฉด์ ์จ๋ผ์ธ ๋ฑ ํน, ์ด์ปค๋จธ์ค, ๋ฌธ์, ์ฌ์ง, ์์ , ๋น๋์ค ๋ฟ๋ง ์๋๋ผ ์์ ๋ฏธ๋์ด์ ์ฌ์ฉ๋๋ ์ฝ๋ฉํธ, ์ข์์, ๊ณต์ , ๋ฉ์ธ์ง ๋ฑ ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆฌ๋ฐ๋๋ ๋ค์ํ ๋ฐ์ดํฐ๋ค์ด ๊ทธ ๋์์ด ๋์ด ๋ค์ํ ๋ถ์ผ์ ๋ฐ์ดํฐ ์์์ผ๋ก ์ด์ฉ๋๊ธฐ ์์ํ๋ค.
๋์ฒ์ ๊น๋ฆฐ ๋ชจ๋ ์๋ฃ๋ ์ ๋ณด๋ค ์ค ์๋ฏธ์๋ ์ ๋ณด๋ค์ '๋ฐ์ดํฐ'๋ผ๊ณ ์นญํ๋ค. ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ์์คํ (Database Management System (DBMS))์ ์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ ์ ์ง๊ด๋ฆฌ ํ๋ ์ํํธ ์จ์ด๋ฅผ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ๊ณผ ๋ฐ์ดํฐ ์์ฒด ๊ฑฐ๊ธฐ์ ์ค์ ๋ก ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค ์ดํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด๋ผ๊ณ ํ๋ค. ์๋ Figure 2์์ ํ์ธํ ์ ์๋ค.
DBMS์ ์ฃผ์ ๊ธฐ๋ฅ์ 4๊ฐ์ง๊ฐ ์๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ํ๋ ๊ฒ(๋ฐ์ดํฐ ์ ํ, ๊ด๊ณ, ์ ์ฝ์กฐ๊ฑด), ๋ฐ์ดํฐ๋ฒ ์ด์ค ์กฐ์ํ๋ ๊ฒ(๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ, ์์ , ์ฝ์ด๋ด๊ธฐ ๋ฑ), ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ์ค๊ณํ๋ ๊ฒ( ๋ฌผ๋ฆฌ์ ์ ์ฅ ์ฅ์น๋ ๋ถ๋ฆฌ ๋ฐฉ๋ฒ ๊ฐ์ ๊ฒ๋ค) ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด๋ค.
SQL์ Structured Query Language ์ ์ค๋ง๋ก์จ, ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ฌ์ฉ๋๋ ANSI/ISO ํ์ค ์ธ์ด์ด๋ค. ์ด๋ค ์ฌ๋๋ค์ SEQUEL์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค. ์ฌ๊ธฐ์ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ๋ง์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ ์ข ๋ฅ๋ณ๋ก ๋ชจ์์ง ๋ชจ์(collection - table) ๋ค์ ๋ชจ์์ด๊ณ ์ด๋ฐ ๊ฐ ์ฝ๋ ์ ๋ค์ ๊ด๊ณ, ๊ทธ ์์ ๊ฐ๋ค์ ๊ด๊ณ์ ๋ฐ๋ผ์ ๋์ง์ธ์ ์ค๊ณํ๋ค๋ ์๋ฏธ์ด๋ค. ๋ค์ ๋งํด ํ ์ด๋ธ ์์ ๊ฐ๊ณผ ๋ ๊ฑฐ๊ธฐ์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ฐ๋ค ๊ฐ์ ํค(์ธ๋ํค์ ์ฃผ์ํค) ๊ด๊ณ๋ค๋ก ์ธํด์ ์๋ก ๋ค๋ฅธ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ์ฐ๊ฒฐํ์ฌ ์๋ก์ด ์๋ฏธ์ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด๋ด๋ ํํ๋ก ๋ชจ๋ธ๋ง๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ์์ ์๋ฏธํ๋ค.
์ด๋ฐ ํ ์ด๋ธ๊ฐ์ ๊ด๊ณ์ ๋ฐ์ดํฐ์ ํํ๋ ๊ตฌ์กฐํ๋ ํํ๋ก ์ ์ฅ๋ ์ ์๊ณ ์ด๋ ์คํค๋ง๋ฅผ ํตํด ๋ํ๋ผ ์ ์๋ค. ์ฌ๊ธฐ์ ์คํค๋ง๋ ์ค์ ๋ฐ์ดํฐ๋ ์๋๊ณ ๊ทธ๋ฅ ํด๋น ํ ์ด๋ธ์ ๊ตฌ์กฐ์ ์ ์๋ฅผ ์ค๋ช ํด์ฃผ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์๋ค. ์คํค๋ง๋ ๋ฐ์ดํฐ ์ด ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ํ์ ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
์ด์ด๋ฆ -------> | ํ์ ๋ฒํธ | ์ด๋ฆ | ๋์ด |
๋ฐ์ดํฐ ํ์ ---> | integer | text | integer |
ํ ์ด๋ธ์ ํ ์ด๋ธ ์ด๋ฆ, ์ด(attribute, column, field)๊ณผ ํ(row, tuple), ํค๋( ์ด ์ด๋ฆ๋ค ), ๋ฐ๋ (๋ฐ์ดํฐ ๊ฐ์ด ์๋ ๋ถ๋ถ) , ๋๋ฉ์ธ ( ๋ฐ์ดํฐ ํ์ ์ ์์ฑ) ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
'ํค'๋ PK(pramary key), candidate key, Foreign Key(FK) ๊ฐ ์๋ค.
ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ ํ ์ด๋ธ์ ๊ฐ ํ์ ๋ ๋ฆฝ์ ์ผ๋ก ์ธ์งํ ์ ์๋๋ก ํด์ฃผ๋ ๊ฐ์ด๋ค. ์๋ฅผ ๋ค์ด ํ ์ด๋ธ์ ํ์ ๋ฒํธ, ์ด๋ฆ, ๋์ด๊ฐ ์กด์ฌํ ๋ ํ์๋ฒํธ๊ฐ ํ๋ผ์ด๋จธ๋ฆฌ ํค๋ก ์ฌ์ฉ๋ ์ ์๋ค. ์๋ํ๋ฉด ํ์์ด๋ฆ๊ณผ ๋์ด๋ ์ฌ๋ฌ ํ์ ์ค๋ณต๋ ๊ฐ์ด ์์ ์ ์์ด์ ์ด๋ฆ๊ณผ ๋์ด๋ง ๋ดฃ์ ๋ ๊ฐ ํ์ ๊ฐ๋ณ๋ก ์ธ์งํ๊ธฐ๊ฐ ์ด๋ ต๋ค. ์ค๋ น ๊ฐ์ ๋์ด์ ๋๋ช ์ด์ธ์ด๋ผ๊ณ ํ ์ง๋ผ๋ ๋ง์ด๋ค. ๊ทธ๋์ PK์ ๊ฒฝ์ฐ๋ ์ฃผ๋ฏผ๋ฑ๋ก๋ฒํธ๋ ์๋์ฐจ ๋ฑ๋ก ๋ฒํธ์ ๊ฐ์ด ๊ฐ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ณ๋ก ์ธ์งํ ์ ์๋๋ก ํด์ฃผ๋ ์ด์ ์ ๊ฐ์ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๊ทธ๋ ๊ธฐ์ ์ ๋๋ก ๋น๊ฐ์ด(Null)์ด ๋ ์ ์๊ณ ์ ๋ํฌํ ๊ฐ์ด์ด์ผ ํ๋ฉฐ ๋๋๋ก ๊ฐ๋จํ ์๋ก ์ข๋ค. ๊ฐํน ์ด๋ฆ+๋์ด์ ๊ฐ์ด ๋๊ฐ๋ฅผ ๋ฌถ์ด์ ์ธ ์๋ ์์ง๋ง ๋๋๋ก์ด๋ฉด ๊ฐ๋จํ๊ฒ ๋จ๋ ์ผ๋ก ์ค์ด๋ ๊ฒ์ด ๋น ๋ฅด๊ณ ์ข๋ค. ๋ ๋๋๋ก์ด๋ฉด ํ๋ฒ ์ค์ ํ ์์ ํ์ง ์๋ ๊ฒ์ ์ถ์ฒํ๋ค. ์๋ํ๋ฉด ๋์ค์ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค์ ํ ๋ ์ด PK๋ฅผ ๊ฐ์ง๊ณ ์ฐ๊ฒฐํ๋ ์์ ์ ํ๊ธฐ ๋๋ฌธ์ ๊ด๊ณ๋ฅผ ๋ค ๋ง๋ค์ด๋ ์ํ์์ ๋ PK๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ์ฐ๊ฒฐ๋ ๊ฒ๋ค๋ ๋ชจ๋ ์๋ด์ผ ํ๋ ์ํฉ์ด ์จ๋ค...
ํ๋ณดํค(Candidate key)๋ ๋ ๋ฆฝ์ ์ผ๋ก ์ฐ์ด๋ฉฐ ํ์ ์ธ์งํ ์ ์๋ ์ญํ ์ ํ ์ ์๋ ํ๋ณด๊ตฐ์ ์๋ฏธํ๋ค. ์ฃผ๋ฏผ๋ฒํธ์ฒ๋ผ ํ๋๋ฅผ ์ธ์๋ ์๋ ์ฃผ๋ฏผ๋ฒํธ + ์ด๋ฆ ๊ณผ ๊ฐ์ ์กฐํฉ์ผ๋ก ์ธ ์๋ ์๋ค. ํ ์ด๋ธ์ ์ฌ๋ฌ๊ฐ์ ํ๋ณด๊ตฐ์ด ์์ ์ ์์ง๋ง, ์ด ์ค ๊ฐ๋จํ๊ณ ๊ฐ์ฅ ๋ํ์ ์ธ ๊ฒ์ PK๋ก ์ ํํ๋ ๊ฒ์ด ์ข๋ค.
์ธ๋(FK)ํค๋ ๋๊ฐ์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํด์ค ๋ ์ด๋ค. Parent ํ ์ด๋ธ๊ณผ child ํ ์ด๋ธ์ด๋ผ๊ณ ์นญํ๋ค. (๊ด๊ณ๊ฐ ์๋ ๋๊ฐ์ ํ ์ด๋ธ) Parent ํ ์ด๋ธ์ ์ธ๋ํค๋ฅผ ํ๋ ์ง์ ํ๊ณ ๊ทธ ์ธ๋ํค๋ฅผ Child ํ ์ด๋ธ์ PK์ ์ฐ๊ฒฐํด์ค ์ ์๋ค. ์ฆ, FK๋ ์ฐ๊ฒฐ๋ ํ ์ด๋ธ์์๋ PK๋ก ์ฐ์ธ๋ค. ์๋ ๊ทธ๋ฆผ์์์ ๊ฐ์ด ํ๋ก์ ํธ ํ ์ด๋ธ์ PK๋ project_id ๊ทธ๋ฆฌ๊ณ FK๋ school_id ์ผ ๋, ์ด FK ๋ฅผ ํ์ฉํ์ฌ school ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐํ ์ ์๊ณ ๊ทธ๋ก ์ธํด ๊ฐ ํ๋ก์ ํธ๊ฐ ์ด๋ ํ๊ต์ ๊ฒ์ธ ์ง ์ ์ ์๋ค. ์ด ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ํ๋์ ํ ์ด๋ธ์ ๋ค ๋ด์ง ์๊ณ ๋ ๊ฐ์ ํ ์ด๋ธ๋ก ๋๋ ์ ์ ์ฅํ๋ ๊ฒ์ ๋ํด์๋ ์ถํ์ ์ค๋ช ๋๋ค. (Normalization)
ํค๋ฅผ ์ค์ ํ์๋ค๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ์ ์ฝ ์กฐ๊ฑด๋ค๋ ์ค์ ํด ์ค ์ ์๋ค. ๋จผ์ PK์ ๊ฒฝ์ฐ ์์ ์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด NOT NULL(๋น ๊ฐ์ ํฌํจํ ์ ์๋ค), UNIQUE(์ค๋ณต๊ฐ์ ๊ฐ์ง ์ ์๋ค) ๋ฑ๊ณผ ๊ฐ์ ์ ์ฝ ์กฐ๊ฑด์ด ์์ ์ ์๊ณ FK์ ๊ฒฝ์ฐ์ Child ํ ์ด๋ธ์ PK์ ์๋ ๊ฐ์ ๊ฐ์ง ์ ์๋ค. (๋ ํ ์ด๋ธ์ด ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์ Child ํ ์ด๋ธ์ ์๋ ๊ฐ์ด FK์ ์์ ๊ฒฝ์ฐ ์ฐธ์กฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.)
E.F. Codd ๋ผ๋ ์ฌ๋์ด ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ๋์ ํ ์ฌ๋์ด๋ค. ๊ด๊ณํ๋ฐ์ดํฐ์ ๋ชฉ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ์ค์์ผ๋ก ์ธํด ๋ฐ์ดํฐ ์ ์ฅ๋น์ฉ์ ํจ๊ณผ์ ์ผ๋ก ์ค์ด๋ ๊ฒ์ ์๋ค.
RDBMS ๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ ์๋ฏธํ๋ค. ๋ฐ์ดํฐ์ ๊ฐ๋ค์ ์์์ฑ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ฉฐ(๋์ด์ ๋ถํด x), ์ด๊ณผ ํ์ ์์๋ ์๋ฏธ๊ฐ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ์ ์ ์ฅ์ ์์ง์ผ๋ก ํ์ฅ ๊ฐ๋ฅํ๊ณ (ํ์ ์ถ๊ฐ ๊ฐ๋ฅ), ๋ฌด๊ฒฐ์ฑ ์ ํ ์กฐ๊ฑด๋ค์ ๋ฐ์ดํฐ ๋ค๊ฐ์ ์์ด ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ์ ์ฅ ๋ฐ ์ ์งํ ์ ์๋๋ก ํด์ค๋ค.
์ด๋ฐ RDBMS์ ํ๊ณ๋ก๋ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ํ์ฅํ๋ ค๋ฉด ์ฌ๋ฌ ๊ท๋ชจ์ ํ์ฅ์ด ํ์ํ๋ค๋ ๊ฒ์ด๋ค. ์ฌ์ฉ์๊ฐ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ด ๊ฐ๊ฒฉ์ด ๋น์ผ ์๋ฒ์์ ํ์ฅ์ด ์งํ๋ ์ ์์ผ๋ฉฐ, ๋ฐ์ดํฐ ๋ฒ ์ด์ค๊ฐ ํ ์ด๋ธ์ ๋ง์ง ์๋ ๊ฒฝ์ฐ ๋ณต์กํ ๊ตฌ์กฐ๋ก ํ ์ด๋ธ์ ๋์ด๋์ง ๋ค์ ๋๋๋์ง ๋ฑ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง ์ฌ์ค๊ณ๊ฐ ํ์ํ๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ RDBMS๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ก๋ ACID compliance ๋ฅผ ์ด์ ๋ก ๋ค ์ ์๋ค. Atomicity, Consistency, Isolation, Durabiility์ ์ค์ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ์ผ๊ด์ฑ์๊ฒ ์ ์งํด์ฃผ๋ ์ฅ์ ๋๋ฌธ์ด๋ค.
SQL
Structured Query Langauge, Manipulating relational databases, International standard since 1986(ANSI, ISO)
SQL is language, and MySQL is DBMS. Web interfaces( e.g., phpMyAdmin)
SQL์ ๋ค์ํ๊ฒ ํ์ฉ๋๋ ๋ฐ LAMP๋ ํ๋์ ์์๋ก ์์ ์์ ๋ค๋ค์ง ๊ฒ์ด๋ค. ์ฌ๋ฌ๊ฐ์ ์ํํธ์จ์ด๋ฅผ ํ๋์ ์ธํธ๋ก ๋ฌถ์ด์ ์ด๋ ๊ฒ ๋ถ๋ฅด๊ธฐ๋ ํ๋ ๋ฐ ๊ทธ ์ค ํ๋์ธ LAMP๋ Linux + Apache + MySQL + PHP ์ ๊ฒฐํฉ์ด๋ค. ์ด๊ฒ์ ์์์ ์ด๋ค๊ณ ํ์ฌ LAMP Stack ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
SQL์์๋ text ๋ฐ์ดํฐ ํ์ ์ ์ค์ ํ ๋ ๋ค๋ฅธ ์ธ์ด(String)์์์ ๋ค๋ฅด๊ฒ VARCHAR ์ด๋ผ๋ ๊ฒ์ ์ฌ์ฉํ๊ณ ์ฌ๊ธฐ์ ๊ฐ์๊น์ง ์ง์ ํ๋ค. ์๋ฅผ ๋ค๋ฉด VARHCAR(20)์ ๊ฐ์ด ์ฐ์ธ๋ค. ์ด๋ ๊ฒ ๊ทธ ํฌ๊ธฐ๋ฅผ ์ ํํจ์ผ๋ก์จ ๋ถํ์ํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ญ๋น๋๋ ๊ฒ์ ๋ง์์ค๋ค.
์คํค๋ง๋ผ๋ ๊ฒ์ ๋ํด์ ์์ ์ธ๊ธํ์๋ ๋ฐ ์ด๋ฅผ ์ฟผ๋ฆฌ๋ก ๋ํ๋ผ ๋๋ ํ ์ด๋ธ์ ์์ฑํ ๋ ์ฐ์ธ๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ํ ์ด๋ธ ์์ฑ ์ ์คํค๋ง ๋์์ธ์์ ์ค์ ํ ๋ฐ์ดํฐ ์ด๋ฆ, ํ์ , ์ ์ฝ์กฐ๊ฑด๋ค์ ์ง์ ํ ์ ์๋ค. ํ ์ด๋ธ์ ์์ฑ๋๊ณ ์์ ๋ ์ ์์ง๋ง ํ ๋ฒ ์ญ์ (drop)ํ๋ ๊ฒฝ์ฐ ๋ค์ ์ด๋ ค๋ผ ์๋ ์๋ค.
Figure 4๋ ๋ด๊ฐ ์ง ์ฟผ๋ฆฌ ์ค์ ํ๋์ธ๋ฐ, ID๋ ์๋์ผ๋ก ์ฆ๊ฐํ๋๋ก ์ค์ , PK, FK ์ค์ ๊ณผ ์ ์ฝ์กฐ๊ฑด, ํ ์ด๋ธ ๊ด๊ณ๋ ๋ชจ๋ ์ค์ ๋์ด ์๋ค.
์ฟผ๋ฆฌ๋ฅผ ์งค ๋ reserved words(์์คํ ์ ์ ์ฅ๋ ํค์๋๋ค - CREATE TABLE , IF, PRIMARY KEY ๋ฑ๊ณผ ๊ฐ์ด ์ด๋ก์์ผ๋ก ํ์๋ ๊ฒ Figure 4) ๋ค์ ๋๋๋ก ๋๋ฌธ์๋ก ์ฐ๋ ๊ฒ๋ฅผ ์ถ์ฒํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์ด๋ธ ์ด๋ฆ์ ๋๋ฌธ์, ์๋ฌธ์๋ฅผ ๊ตฌ๋ณํด์ ์ฌ์ฉํด์ผ ํ๊ณ ์ด์ด๋ฆ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋์๋ฌธ์ ์๊ด์์ด ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ๋ค์ ๋งํด ํ ์ด๋ธ ์ด๋ฆ์ ๋์๋ฌธ์๊ฐ ํ๋ฆฌ๋ฉด ์ธ์ง๋ฅผ ๋ชปํ๋ค๋ ๋ง์ด๊ณ ์ด์ด๋ฆ์ ๋์๋ฌธ์๊ฐ ํ๋ ค๋ ์ธ์งํ ์ ์๋ค๋ ๋ง์ด๋ค.
ํ ์ด๋ธ ์์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ํ์ ์ธ ์ฟผ๋ฆฌ๋ค์ insert, delete, update ๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํด๋ด๋ (์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์์ ์ถ๋ ฅํด๋ด๋) ์ฟผ๋ฆฌ๋ select๊ฐ ์ฐ์ธ๋ค.
์ด ๋ ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ ๋ฐ DISTICT, ORDER BY, GROUP BY , WHERE ์ ์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ค๋ผ ์ ์๋ค. ์์ ์์์์๋ 3๊ฐ์ ํ ์ด๋ธ์ ์กฐ์ธํ์ฌ์ ์ฌ์ฉํ์๊ณ ๊ฐ ํ ์ด๋ธ์ ์ ์ฒด ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๋์ a, p, ๊ทธ๋ฆฌ๊ณ ใ ฃ์ ์์ฉํจ์ผ๋ก์จ ์ ์ฒด ์ฟผ๋ฆฌ๋ฅผ ๋ ๋จ์ํ ํ์๋ค.
DBMS๋ ํ ์ด๋ธ๊ด๊ณ์ ์์ด์ ํผ๋์ด ์ฌ ์ ์๋ ์ ํจํ์ง ์์ ์์ ์ ๋ง์๋ธ๋ค. ์๋ฅผ ๋ค์ด PK๋ FK๋ฅผ ์ ๊ฑฐํ๋ ค ํ๋ค๊ฑฐ๋ ๋ฐ์ดํฐ ํ์ ์ด ์๋ชป๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ค ํ๊ฑฐ๋ ์ค๋ณต๋ PK๋ฅผ ์ ๋ ฅํ๊ฑฐ๋ ํน์ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ๊ด๊ณ๊ฐ ํ์ฑ๋ ํ ์ด๋ธ์ ์ ๊ฑฐํ๋ ค๊ณ ํ๋ ์์ ๋ค์ ์ ์ง๋๋ค.
NULL ๊ฐ์ ๋ํด์ ์ธ๊ธ์ ํ์๋ฉด ์์์ ๋น์ด์๋ ๊ฐ์ด๋ผ๊ณ ๋งํ ์ ์ด ์๋ค. NULL์ ๊ฐ์ด๋ผ๊ธฐ ๋ณด๋ค๋ '์ํ'๋ก ํด์๋ ์ ์๋ค. ์๋ฅผ๋ค์ด ์์ ์๋ ์ํ, ์ด์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ํ, ๋ณด๋ฅ๋ ์ํ, ํด๋น๋์ง์๋ ์ํ ๋ฑ์ NULL์ด๋ผ๊ณ ํ๋ค. ์๋ฅผ ๋ค์ด ํ์๊ณผ ํ๊ต ์ ๋ณด๊ฐ ๋ด๊ธด ํ ์ด๋ธ์ด ์๋ค๊ณ ํ์ ๋ ํ์์ ์ฃผ๋ฏผ๋ฒํธ๋ NULL์ด ๋ ์ ์์ง๋ง ํ๊ต ์ด๋ฆ์ NULL์ด ๋ ์ ์๋ค.( ํ๊ต ๋ค๋์ง ์๋ ํ์์ด๊ฑฐ๋ ์์ง ์ด๋ ค์ ํ๊ต ๋ฏธ์ทจํ ์๋์ผ ๊ฒฝ์ฐ) NULL ์ด ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ IS NULL, ๊ฐ๋ฅํ์ง ์๋ ๊ฒฝ์ฐ NOT NULL์ ์ฌ์ฉํ๋ค.
์ฟผ๋ฆฌ๋ฅผ ์ง๋ค ๋ณด๋ฉด ๋ ผ๋ฆฌ์ ์ธ ๊ด๊ณ์ ๋ํด์ ์ ์ํด์ผ ํ ๋๊ฐ ์๋ค. ( and , or, but ) AND๋ฅผ ์ฌ์ฉใ ํ๋๊ฒฝ์ฐ FALSE๊ฐ ๊ฐ์ฅ ์๋ค. ๋ค์ ๋งํด์ ํ๋ ์ด์์ด FALSE์ด๋ฉด FALSE ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ OR๋ฅผ ์ฌ์ฉํ๋๊ฒฝ์ฐ TRUE๊ฐ ์ ์ผ ๊ฐํ๋ค. ํ๋๋ผ๋ TRUE๋ฉด ๋ชจ๋ TRUE๊ฐ ๋๋ค.
ํ ์ด๋ธ ์กฐ์ธ์ ํ ์ด๋ธ ๊ฐ ๊ด๊ณ๋ฅผ ํ์ฑํ์ฌ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ด์ฉ์ ์์ ์์ฌ๋ก ๊ฐ์ ธ๋ค ์ธ ์ ์๋๋ก ํด์ฃผ๋ ์ญํ ์ ํด์ค๋ค. ์กฐ์ธ์ ์ข ๋ฅ๋ก๋ ๋ค์ํ ์ข ๋ฅ๊ฐ ์๋ค. ๋ ๊ทธ๋ฃน์ ๊ต์งํฉ ํํ๋ฅผ ์๊ฐํ๋ฉฐ ์ดํดํ๋ฉด ์ฝ๋ค.
Inner ์กฐ์ธ์ ๋ง ๊ทธ๋๋ก ์์ชฝ์ ๋ฐ์ดํฐ(๊ณตํต๋ ๋ถ๋ถ๋ง) ์ถ๋ ฅํด์ค๋ค. Outer๋ ๋ฐ๊นฅ ์ชฝ (ํด๋น๋๋ ๋ฐฉํฅ์ ์๋ ๋ฐ์ดํฐ)๋ฅผ ์ถ๋ ฅํด์ฃผ๊ณ Full outer๋ ์์ชฝ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ถ๋ ฅ, Cross ๋ ํ๋์ฉ ๋ค ์ฐ๊ฒฐ์ง์ด์ (์ ๋ฐ ๋ ๋ฌถ ๋ฏ) ๋ค ์ถ๋ ฅํด์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค.
๋ค์ ์ด๋ฏธ์ง๋ ํ ์ฌ์ดํธ์ ์ ์ค๋ช ๋ ๋ด์ฉ๊ณผ ๊ทธ๋ฆผ์ด ์์ด์ ์ฒจ๋ถํ๋ค.
๊ด๊ณ๋์
๊ด๊ณ๋ผ์๋ ์ฟผ๋ฆฌ ์์ ์ ํ์ํํ๊ณ ๊ด๊ณ์ ์ฌ์ฉํ๊ณ ๋ ํจ๊ณผ์ ์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
๋จํญ์ฐ์ฐ
SELECT | σ<cond> (r) | σ salary>10000 (Employee) | σ salary>1000 ( σ age>30 (Employee) ) σ salary>1000 ^ age >30 (Employee) |
PROJECT | ∏ <A1, A2,...> (r) | ∏ ID, Salary (Employee) | ∏ id ( σ salary>10000 (Employee) ) |
Assignment | ← | test ← σ age<30 (Employee) | test(number, name, pay) ← ∏ ID, the_name, salary (Employee) |
Rename | ρ | ρ test (Employee) | ρ test(name, number, payment,...) (Employee) : change table name from Employee to test, and its fields name as well. |
์ดํญ์ฐ์ฐ
Union [ โ ] | ์์ชฝ ํ ์ด๋ธ์์ ์ ๋ถ ์ถ๋ ฅ ( ์ด ๊ฐ์, ์์น, ๋ฐ์ดํฐ ์ ํ ๋ฑ์ด ๋ชจ๋ ๊ฐ์์ผ ํ๋ค) |
Intersect [โ] | ๊ต์งํ ๋ถ๋ถ๋ง ์ถ๋ ฅ( ์ค๋ณต ์ ๊ฑฐ ) |
Minus[ - ] | R1 - R2: R1์์ R2์ ํด๋น๋๋ ๋ถ๋ถ ์ ์ธ |
Cross-product(Cartesian product) [ X ] | R1์ ์๋ ๊ฐ ํ์ R2์ ๊ฐ ํ๊ณผ ํ๋์ฉ ์ง์ง๊ธฐ |
Conditional join [ R1โ age <30 R2 ] | ์กฐ๊ฑด์ด ๋ง๋ ๋ถ๋ถ๊ด ํฉ์น๋ค. (Cross๋ ๊ฐ์ ๋ฐ ์กฐ๊ฑด์ด ์๋ ๊ฒ ๋ฟ) |
Equi Join [R1 โ age R2 ] | R1์ด๋ R2์ ๊ฐ ํ์ ๊ฐ์ด ๊ฐ์ ๊ฒ๋ง ์ถ๋ ฅ(์ฌ๊ธฐ์๋ ๋ ํ ์ด๋ธ์ ๋์ด ๊ฐ ๊ฐ์ ๊ฒ๋ง ๋งค์นญํด์ ์ถ๋ ฅ ) |
ER Diagram (Entity Relationship Diagram)
ER diaram์ ๊ทธ๋ฆฌ๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค. 1) ๋ถ์ ์๊ตฌ์ฌํญ์ด ๋ฌด์์ธ๊ฐ? ๋ฅผ ํ์ ํ๋ค. 2) ๋ ผ๋ฆฌ์ ๋์์ธ์ ์ค๊ณํ๋ค. ์๋ฅผ ๋ค์ด ์ด๋ค ํ ์ด๋ธ๋ค์ด ํ์ํ๊ณ ์ด๋ค ๊ด๊ณ๋ก ์ฐธ์กฐ๋ฅผ ํ ์ง ๋ฑ์ ๊ณ ๋ คํด์ฌ ๋ ผ๋ฆฌ์ ๋์์ธ ์ค๊ณ๊ฐ ํ์ํ๋ค. 3) ์ ๊ทํ: ๋ ผ๋ฆฌ์ ์ผ๋ก ์ค๊ณ๋ ๋์์ธ์ ๋ํด ๋ช ํํ ํ๋ฉฐ ์ฒด๊ณํ๋ ๋จ์ํ๊ฐ ํ์ํ๋ค. 4) ์ค๊ณ๋ ๋์์ธ์ ๊ณ ๋ คํ์ฌ DBMS์์ ๋ฌผ๋ฆฌ์ ๋์์ธ์ ๊ตฌํํ๋ค.
ER diagram์ ๊ตฌ์ฑ์์๋ค์ ๋ค์๊ณผ ๊ฐ๋ค. Entity ๋ ํ ์ด๋ธ์ด๋ฆ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๊ฒ ๋ค. Attribute๋ ๊ทธ ์์ ๊ตฌ์ฑ ์์๋ค์ด๋ค. ๊ฐ ํ์ด ํ๋์ attribute๋ฅผ ๊ตฌ์ฑํ๋ค. Relationship์ ๊ด๊ณ์ด๊ณ instance๋ ํ ์ด๋ธ์ ์๋ Attribute์ ์ข ๋ฅ๋ผ๊ณ ๋ณด๋ฉด ๋๊ฒ ๋ค. ๊ด๊ณ๋ฅผ ํํํ๊ธฐ ์ํด์ ๋์ฌ๋ฅผ ์จ์ ๋ณดํต ํํํ๊ธฐ๋ ํ๋ ๋ฐ Entity(ํ ์ด๋ธ ์ด๋ฆ)์ด ์ฃผ์ด๋ก ์ฐ์ธ๋ค. ์๋ ๊ทธ๋ฆผ์์ "์บ๋ฆญํฐ๋ ์ํฐ์ ์ฐ๋ค"๋ผ๋ ๊ด๊ณ๊ฐ ์ ์ ๊ฐ๋ฅํ๋ค.
PK, FK ๋ ๊ทธ ๋ฐ์ ์ ์ฝ๋ค์ ์ฟผ๋ฆฌ๊ณผ์ ์์ ์ค์ ๋๊ธฐ๋ ํ์ง๋ง ๋ณดํต์ ๋ชจ๋ธ ์ค๊ณ ๋จ๊ณ์์๋ถํฐ ๊ณ ๋ ค๋ฅผ ํด์ผ ํ๋ค. ๊ทธ๋์ผ ๊ทธ์ ๋ง๊ฒ ๋์์ธ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์นด๋๋๋ฆฌํฐ ์ ์ฝ (ํ๊ตญ์ด๋ก๋ ๋ญ๋ผ๊ณ ํํํด์ผ ๊ฐ๋จํ๊ฒ ํํํ ์ ์์ ์ง ๋ชจ๋ฅด๊ฒ ๋ค)
์นด๋๋๋ฆฌํฐ๋ ์ผ๋ง๋ ๋ง์ ์ธ์คํด์ค์ ์ํฐํฐ ์ข ๋ฅ๋ค์ด ๊ด๊ณ์ ์ํฅ์ ๋ฏธ์น๋ ์ง๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋งํ๋ค. ๋ค์ ๋งํด์ ์ํฐํฐ์๋ ๋ค์ํ ์ธ์คํด์ค๋ค์ด ์๋ ๋ฐ ์ด ์ธ์คํด์ค๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ๋ช๊ฐ๋ ์ฐ๊ด์ด ์๋๋๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, ์บ๋ฆญํฐ์ ๋์์ ์ํฐํฐ๋ฅผ ์๊ฐํด๋ณด์.
์บ๋ฆญํฐ ์ํฐํฐ์๋ ์บ๋ฆญํฐ ์๋งํผ์ ์ธ์คํด์ค๊ฐ ์๋ค. ๋ฐฐํธ๋งจ, ์ํผ๋งจ, ์คํ์ด๋๋งจ์ด ์๋ค๊ณ ํ์ ๋ 3๊ฐ์ ์ธ์คํด์ค๊ฐ ์กด์ฌํ๋ค. ๋ฐ๋๋ก ์ ์ธ๊ณ์๋ ์ค์ง ๋ฐ๋, ๋งจ์ฒด์คํฐ, ์ธ์ฐ 3๊ฐ์ ๋์๊ฐ ์๋ค๊ณ ํ์ ๋ ์ด ๋์ ๊ด๊ณ๋ฅผ ์ ์ํด๋ณด์.
์ํฐํฐ ์บ๋ฆญํฐ์ ๊ฐ ๊ฐ์ ์ธ์คํด์ค (3๊ฐ)๋ ํ๋์ ๋์์๋ง ์ด ์ ์๋ค. ํ ๋ฒ์ ์ฌ๋ฌ ๊ณณ์ ์ด ์๋ ์์ผ๋, ๊ทธ๋ ๋ค๋ฉด ์บ๋ฆญํฐ๋ ์ ์ด๋ ํ๋์ ๋์์ ์ด๊ณ ์์ด์ผ ํ๊ณ ์ต๋๋ก ์ด ์ ์๋ ๋์๋ ํ๋ ๋ฟ์ด๋ค. (๋ฐ๋ก one and only one ๊ด๊ณ) ๋ค์์ ๋์์ ์ ์ฅ์์ ๋ณด๋ฉด ๊ฐ ๋์์๋ ํ ๋ช ๋ ์ ์ด๊ณ ์์ ์๋ ์๊ณ ํน์ 3๋ช ๋ชจ๋ ํ ๋์์ ์ด ์ ์์ ์๋ ์๋ค. (๋ฐ๋ก zeo or Many) ์ด๋ ๊ฒ ๋ ์ํฐํฐ์ ๊ด๊ณ๊ฐ ์ ์๋ ์ ์๋ค.
๊ทธ๋ ๋ค๋ฉด, ๋ง์ฝ ? ๋ค๋๋ค์ ๊ด๊ณ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ๋ค๋๋ค์ ๊ด๊ณ๋ ์์์ฑ์ ๊ฐ์ ธ์ผ ํ๋ค๋ (๊ฐ์ ๋ฐ๋์ ํ๋์ ๊ฐ์ผ๋ก๋ง ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค)๋ฅผ ์๋ฐํ๋ ์ํฉ์ ์ด๋ํ๊ฒ ๋๋ค. ๊ทธ๋์ ์ด๋ด ๋ ํด๊ฒฐ์ฑ ์ ์ค๊ฐ ๋ค๋ฆฌ๋ฅผ ๋์์ ํด๊ฒฐํด์ค ์ ์๋ค. ์ด ์ค๊ฐ ๋ค๋ฆฌ ์ญํ ์ ํ๋ ํ ์ด๋ธ์ "๋ธ๋ฆฌ์ง ์ํฐํฐ(joining(bridging /intersection/junction) entity)"์ด๋ผ๊ณ ํ๋ค.
์๋ ํ ์ด๋ธ์ ๋ณด๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค. ์ค๋ ํ ์ด๋ธ์ ํ๋ก๋ํธ๋ FK ์ด๊ณ ์ด๋ Product ํ ์ด๋ธ์ ์ฐธ์กฐํ ์ ์๋๋ก ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋๋ก Product์ ์ค๋๋ FK๋ก, ์ค๋์ PK๋ฅผ ์ฐธ์กฐํ๋๋ก ๋์ด์๋ค. ๋ฌธ์ ๋ FK๋ค์ด ๋ชจ๋ ์ฌ๋ฌ๊ฐ์ ๊ฐ์ ๋ณด์ ํ๊ณ ์๋ค๋ ์ ์ด๋ค. ์์์ฑ์ ์๋ฐ๋๋ ์ฌํญ์ด๋ค. ์ด๋ด ๋ ์ฐ๋ฆฌ๋ OrderedProduct๋ผ๋ ์ค๊ฐ ๋ธ๋ฆฌ์ง ์ํฐํฐ๋ฅผ ๋์ ํ๋ค. ์ด ๋ธ๋ฆฌ์ง ํ ์ด๋ธ์ ๋ ๊ฐ์ compound key ๋ฅผ PK๋ก ๊ฐ์ง๊ฒ ๋๋ค. (์ด๋ฐ ์ด์ ๋ก ํ ์ด๋ธ์ด ๋์ด๋๋ค!) ์ด๋ก ์ธํ ์ด๋์ ์์์ฑ์ ์๋ฐฐํ์ง ์์๋ ๋๋ค๋ ์ ๊ณผ ๋ถํ์ํ NULL ๊ฐ์ ํ๋ฉํ์ง ์์๋ ๋๋ค๋ ์ ์ด๋ค.
์ด๋ ๊ฒ ๊ด๊ณ๋ฅผ ๋ฐ์ง๋ค ๋ณด๋ฉด ๊ฐํน weak entity๋ผ๋ ๊ฒ์ ๋ํด ์ ํ๊ฒ ๋๋ค. ์ด๋ ์ด๋ค ์ํฐํฐ๊ฐ ์์ ํ ๋ค๋ฅธ ํน์ ์ํฐํฐ๊ฐ ์์ด๋ ์กด์ฌํ ์ ์๋ ์ํฉ์ผ ๋๋ฅผ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค์ด, ํธํ ๋ฐฉ์ด๋ผ๋ ์ํฐํฐ๊ฐ ์๋ค๊ณ ํ์, ํธํ ๋ฐฉ์ด๋ผ๋ ์ํฐํฐ๋ ํธํ ์ด๋ผ๋ ์ํฐํฐ ์์ด ๋จ๋ ์ผ๋ก ์กด์ฌํ ์ ์๋ ๊ฐ? ๋๋ต์ NO. ๊ทธ๋ ๋ค๋ฉด ํธํ ๋ฐฉ์ weak entity ๊ฐ ๋๋ค. ์ด๋ฐ ์ํฐํฐ๋ PKํค๊ฐ ๋ณ๋๋ก ์๊ณ ๋ถ๋ถ ํค๋ผ๋ ๊ฒ์ ๊ฐ์ง๊ฒ ๋๋ค. ๋ถ๋ถ ํค๋ก๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ธ์งํ ์ ์์ง๋ง ํธํ ์ด๋ผ๋ ์ํฐํฐ์ PK์ ํธํ ๋ฐฉ ์ํฐํฐ์ ๋ฃธ๋๋ฒ๊ฐ composite key๋ก์จ ํ๋์ ์ธ์ง์๋ก ์ญํ ํ๊ฒ ๋๋ค.
strong entity์ ๊ฒฝ์ฐ, PK, FK ๋ฑ์ด ์์ผ๋ฉฐ, default ๊ฐ ๊ฐ์ ๊ฒ๋ค๋ ์ค์ ๋๋ ์ผ๋ฐ์ ์ธ entity๋ค์ด ๋ชจ๋ ์ฌ๊ธฐ ํด๋น๋๋ค.
Stored Procedure, Trigger and View
์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค๋ฉด์ ์กฐ๊ธ ์ด๋ ค์ ๋ ๊ฒ์ด ๋ชจ๋ ์์ ์ ์๋์ผ๋ก ๋ฐ์ํ ์ ์๋๋ก ํ๋ ๊ฒ์ด์๋ค. ์๋ฅผ ๋ค์ด ํ๋์ ์ ๋ ฅ์ด ๋ฐ์ํ์ ๋ ๋ชจ๋ ์กฐ๊ฑด๋ค์ ๊ฒํ ํ์ฌ ๊ด๋ จ ๋ฐ์ดํฐ ๋ค์ด ๋ชจ๋ ์ผ๊ด์ฑ์ ์ ์งํ๋ฉฐ ์ ๋ฐ์ดํธ ๋๋๋ก ํ๋ ๊ฒ์ด ํ๋์ ์ฑ๋ฆฐ์ง์๋ค. ๊ทธ ๊ฐ์ฅ ํฐ ์ญํ ์ ํด์ค ๊ฒ์ด ๋ฐ๋ก Stored Procedure๊ณผ Trigger ์ด๋ค.
Stored Procedure๋ ๋ง ๊ทธ๋๋ก ๋ค์ํ ๊ณผ์ ์ ํ๋์ ์ฟผ๋ฆฌ์ ์ ์ฅํด๋์๋ค๊ฐ ํธ์ถ์ด ๋๋ฉด ํด๋น ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์ญํ ์ ํ๋ค. Call ๋ฅผ ์ด์ฉํด์ ํธ์ถํ ์ ์์ผ๋ฉฐ ์์ ๋ค์ํ ์ฟผ๋ฆฌ๋ฅผ ๋ด์ ์ ์๋ค. ์๋ฅผ ๋ค์ด ์กฐ๊ฑด ๋ฌธ IF - ELSE ๋ผ๋์ง CASE - WHEN - ๊ฐ์ ๊ฒ๋ค์ ์ธ ์ ์๊ณ ๋ค๋ฅธ Stored procedure๋ฅผ ํธ์ถํ ์๋ ์๋ค. ๋ ํ๋์ ํน๋ณํ ์ ์ ๊ฐ์ ๋ฐํํ ์ ์๋ค๋ ์ ์ด๋ค. ๊ทธ๋์ ๋ฉ์ธ์ง๋ฅผ ์ถ๋ ฅํ๊ฑฐ๋ ํน์ ์ฐพ์๋ธ ๊ฐ์ ๋ฐํํ ์๋ ์๋ค.
Trigger์ ๊ฒฝ์ฐ๋ ๋จ์ด ๊ทธ๋๋ก ์ด๋ค ์ผ์ด ๋ฐ์ํ์ ๋ ํธ๋ฆฌ๊ฑฐ์ฒ๋ผ ์ด์ด์ ์๋๋๋ ์ญํ ์ ํ๋ค. ์๋ฅผ ๋ค์ด ํ์ ํ ์ด๋ธ์ ํ์ ์ ํ๊ธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ์ ๋ (insert๋ฅผ ์จ์ ์ ๋ ฅ ๊ฐ๋ฅ), ํ๊ต์ ์ด ์ ํ๊ธ์ด ์ ๋ฐ์ดํธ ๋๋๋ก ํ๊ณ ์ถ๋ค(update)๋ ์ํฉ์ด ์๋ค๊ณ ํ์.
๊ทธ๋ฌ๋ฉด CREATE TRIGGER triggername AFTER INSERT ON ํ์ํ ์ด๋ธ ~~~ ๊ณผ ๊ฐ์ด ์์ํ ์ ์๋ค. ์๋ ์์์์ ํธ๋ฆฌ๊ฑฐ๋ bankbalance์ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ์์ ๋ ๋ง์ฝ ์๋ก์ด ๊ธ์ก์ด ์ ๋ ฅ๋๋ฉด ๊ฐ์ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ผ๋ก ์ค์ ํ์๋ค.
๋ค์์ผ๋ก VIEW ๋ ๊ฐ์ ํ ์ด๋ธ๊ณผ ๊ฐ๋ค๊ณ ์๊ฐํ ์ ์๋ค. ์ฟผ๋ฆฌ๋ก ๋ฏธ๋ฆฌ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ํ ์ด๋ธ์ด๋ฉฐ ์ฐ๋ฆฌ๊ฐ ์ํ ๋ ์ธ์ ๋ ํ ์ด๋ธ์ ๋ถ๋ฅด๋ฏ ๋ถ๋ฅผ ์ ์๋ค. ํ ์ด๋ธ์ ๊ฒฝ์ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ๋งค๋ฒ ์ฟผ๋ฆฌ๋ฅผ ๋ค ์จ์ ๋ถ๋ฌ์ผ ํ๋ ํ ํธ, ๋ทฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฃผ ํธ์ถํด์ผํ๋ ๊ฒฐ๊ณผ๋ค์ ํ๋ฒ์ select ์ฟผ๋ฆฌ๋ก ์ถ๋ ฅํ ์ ์์ด ํจ์จ์ ์ด๋ค.
CREATE VIEW visitor_log AS
SELECT name, date, hotel, city
FROM Hotel_Visitor_History
WHERE city='SEOUL';
SELECT * FROM visitor_log;
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ ๊ทํ
์คํค๋ง์ ์ฒด๊ณ์ ๋ถ์์ 1)์ค๋ณต์ ์ ๊ฑฐํ๊ณ 2)๋ฐ์ดํฐ ์์ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ๊ณ 3)๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ฟผ๋ฆฌ๋ฅผ ๋จ์ํ ํ๊ณ 4)๊ฐ๋ฅํ ํจ์จ์ฑ์ ํฅ์์ํค๋ ๋ฐ์ ์จ๋ค. ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ์ผ๋ก ๋ง์ฝ ํน์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ NULL๊ฐ์ด๋ผ๋ ๋ฃ์ด์ผ ํ๋ ์ํฉ์ด ์๊ธด๋ค๋ ๊ฒ์ด๊ณ ์ด๊ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ์ฌ ๋นํจ์จ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธ(์์ ) ํ๋ ๊ฒฝ์ฐ, ๊ด๋ จ ๋ฐ์ดํฐ๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ์๋ ์๋ ๊ฒฝ์ฐ ์ฌ๋ฌ๋ฒ ์ ๋ฐ์ดํธ๋ฅผ ํด์ผ ํ๊ณ ๋ง์ฝ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๊ฐ์ด ์ ๋ฐ์ดํธํ๋ ค๊ณ ํ๋ฉด ์ ์ฒด ํ ์ด๋ธ์ ์์ ํด์ผ ํ๋ฏ๋ก ํ ์ด๋ธ์ ๊ตฌ์ฑ๊ณผ ์ฌํ๋ฉด ๊ด๊ณ๋๋ฅผ ๋ค์ ์ค๊ณํด์ผํ๋ ์ํฉ์ด ์ฌ ์ ์๋ค. ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๊ฒฝ์ฐ ํ๋์ ํญ๋ชฉ๋ง ์ญ์ ๋๋ ๊ฒ์ด ์๋๋ผ ํด๋น ๋ด์ฉ์ด ํฌํจ๋ ์ ์ฒด ํ์ด ์ญ์ ๋๊ธฐ ๋๋ฌธ์ ์์นซ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋๋ ๊ฒฝ์ฐ๋ ๋ฐ์ํ ์ ์๋ค.
์ด๋ฌํ ์ฌ๋ฌ ๋ฌธ์ ๋ค์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํด์ ์ ๊ทํ๋ ์ ํต์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์์ ๊ต์ฅํ ์ค์ํ ๊ณผ์ ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก 1์ฐจ - 3.5์ฐจ ์ ๊ทํ๋ฅผ ๊ฑฐ์น๋ฉด ๋๋ถ๋ถ์ ํ ์ด๋ธ๋ค์ ์ชผ๊ฐ์ง ์ ์๋ ์ต๋๋ก ์ชผ๊ฐ์ด์ง ๊ฒ์ผ๋ก ๋ณด์ง๋ง 3์ฐจ ์ดํ์ ์ ๊ทํ๋ค๋ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ค์ด ์๋ค. ์ฌ๊ธฐ์์๋ 6์ฐจ๊น์ง๋ง ์ธ๊ธํ ๊ฒ์ด๋ค. ์ ๊ทํ๊ฐ ์๋ฃ๋์๋ค๊ณ ์๊ฐ๋๋ค๋ฉด ์คํค๋ง์ ์ฒด๊ณ์ ๋ถ์ ์๊ฑด 4๊ฐ์ง๋ฅผ ๋ชจ๋ ์ถฉ์กฑํ๋ ์ง ํ์ธํด ๋ด์ผ๋ก์จ ์ค๊ณ๋ฅผ ํ์ธ ํ ์ ์๊ฒ ๋ค.
Stage | Condition |
1st Normal form - 1NF | ๊ฐ ํ์ด ์ ๋ถ PK๋ก ๋
๋ฆฝ์ ์ด๊ณ ์ ๋ํฌํ๊ฒ ๋ถ๋ฅ๋ ์ ์๋ค.(๊ฐ ์ด์ ์ค๋ณต์ด ์๋ค) ๊ฐ ์ด์ด ๋ชจ๋ ์์์ฑ์ ๊ฐ์ง๋ค.(ํ๋์ ์ ์ ๋จ, ํ๋์ ๊ฐ๋ง ๋ณด์ ) ์ค๋ณต๋๋ ํ์ด ์๋ค. |
2nd Normal form - 2NF | 1์ฐจ ์ ๊ทํ๋ฅผ ๋ง์กฑํ ๋, Composite key(2๊ฐ ์ด์์ด ์ธํธ) ๊ฐ PK ์ผ๋ ๋ชจ๋ ์ด๋ค์ด PK ์ธํธ์ ์์กดํ๋ ๊ฒฝ์ฐ Full dependency๋ผ๊ณ ํ๊ณ ํ๋์ ํค์๋ง ์์กดํ๋ ๊ฒฝ์ฐ Partial dependecy ๋ผ๊ณ ํ๋ค. Partial dependency ๋ชจ๋ ์ ๊ฑฐ! ๋ง์ฝ ํ์ํ๋ฉด ๋ธ๋ฆฌ์ง ํ ์ด๋ธ์ ๋์ ํ ์ ์๋ค. |
3rd Normal form - 3NF | 1์ฐจ, 2์ฐจ ์ ๊ทํ ๋ชจ๋ ๋ง์กฑ ์, ๊ฐ ์ด์ ๋ชจ๋ PK์ ๋ฐ๋ผ์๋ง ๋ฌ๋ผ์ง ์ ์๋ค. (๋ง์ฝ ๋ค๋ฅธ ๊ฐ์๋ ์ํฅ์ ๋ฐ๋ ๋ค๋ฉด ์ชผ๊ฐ์ผ ํ๋ค!!) |
Beyond 3rd Normal form (Boyce-Codd Normal form, 3.5NF) |
๋ง์ฝ 3์ฐจ๊น์ง ๋ง์กฑํ๋ค๋ฉด, ํ ์ด๋ธ์ ๋จ ํ๊ฐ์ ํ๋ณดํค๋ฅผ ๊ฐ์ง ์ ์๋ค. |
4NF | BCNF(3.5 ์ ๊ทํ)๊น์ง ๋ง์กฑ์, ์ด์ ํ๋ ์ด์์ ์ค๋ณต๊ฐ์ ๊ฐ์ง ์ ์๋ค. |
5NF | 4 ์ ๊ทํ ๊น์ง ๋ง์กฑ์, ๋ฐ์ดํฐ ์์ค ์์ด ๋์ด์ ํ ์ด๋ธ ์ชผ๊ฐค ์ ์๋ ์ํ์ด๋ค |
6NF | 5 ์ ๊ทํ๊น์ง ๋ง์กฑ์, ๊ฐ ํ ์ด๋ธ์๋ ํ๋์ ์ด๋ง ๊ฐ์ง๊ณ ์๋ค. |
'Data science > Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Understanding Oracle SE and DBMS (0) | 2023.03.26 |
---|---|
Understanding database - NoSQL ํ ์ฅ์ผ๋ก ์ด์ ๋ฆฌ (1) | 2023.01.23 |
Understanding Database 11 - Database Programming Techniques (0) | 2023.01.16 |
Understanding Database 10 - Data modelling with MongoDB (0) | 2023.01.16 |
Understanding Database 9 - Distributed Database Systems(DDB) (0) | 2023.01.16 |