[Data Modeling] ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง 1์ผ์ฐจ - ๊ฐ๋ /๋ ผ๋ฆฌ/๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง๊ณผ ERD ๊ธฐ์ด
- DataModeling
![[Data Modeling] ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง 1์ผ์ฐจ - ๊ฐ๋
/๋
ผ๋ฆฌ/๋ฌผ๋ฆฌ ๋ชจ๋ธ๋ง๊ณผ ERD ๊ธฐ์ด](/static/b61fbd4e20d0f4cd7b5349e3a824b999/96bad/heroImage.png)
๐ ์ฐ๊ด ํฌ์คํ
1. ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๊ธฐ๋ณธ ํ๋ฆ๊ณผ ERD๋ฅผ ์์ฑํ ๋ ์์ฃผ ๋ง๋๋ ์ค๊ณ ํฌ์ธํธ๋ฅผ ์ ๋ฆฌํ๋ค. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋จ์ํ ํ ์ด๋ธ์ ๋ง๋๋ ์์ ์ด ์๋๋ผ, ์ ๋ฌด์์ ๊ด๋ฆฌํด์ผ ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ๊ณ ๊ด๊ณ๋ฅผ ๋ช ํํ ์ ์ํ๋ ๊ณผ์ ์ด๋ค.
์ค์ต ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ ํํด๋ ๋์ง๋ง, ์์ ์์๋ ERD Cloud์ ERD Editor๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ๋ ์ ์ ๋ฆฌํ๋ค.
- ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋จ๊ณ
- ์๋ณ ๊ด๊ณ์ ๋น์๋ณ ๊ด๊ณ
- M:N ๊ด๊ณ ํด์
- ์์ฑ์ ์ ํ
- ์ค๊ณ ์์ฑ๊ณผ ํ์ ์์ฑ
- ์ํผํ์ ๊ณผ ์๋ธํ์
- ํ์ฌ/์ง์/ํ๋ก์ ํธ ์์ ์ ์ค๋ฌธ์ง ํ๋ก์ ํธ ์์
2. ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ ์ฒด ํ๋ฆ
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๋ณดํต ๊ฐ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, ๋ ผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง, ๋ฌผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ์์๋ก ์งํ๋๋ค. ๊ฐ ๋จ๊ณ๋ ๋ชฉ์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ฒ์๋ถํฐ ์ปฌ๋ผ ํ์ ์ด๋ ์ธ๋ฑ์ค๋ฅผ ๊ณ ๋ฏผํ๊ธฐ๋ณด๋ค, ๋จผ์ ์ ๋ฌด์์ ์ด๋ค ๋ฐ์ดํฐ๊ฐ ํ์ํ์ง ํ์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
2.1 ๊ฐ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
๊ฐ๋ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ ๋ฌด์์ ๊ด๋ฆฌํด์ผ ํ๋ ํต์ฌ ์ํฐํฐ๋ฅผ ์ถ์ถํ๊ณ , ์ ์ฒด ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ณจ๊ฒฉ์ ๋ง๋๋ ๋จ๊ณ๋ค. ์ด ๋จ๊ณ์์๋ ์์ธ ์ปฌ๋ผ๋ณด๋ค๋ ์ํฐํฐ์ ์ํฐํฐ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ํ์ ํ๋ ๋ฐ ์ง์คํ๋ค.
- ํต์ฌ ์ํฐํฐ ์ถ์ถ
- ์ ์ฒด ๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ณจ๊ฒฉ ์์ฑ
- ๊ฐ์ฒด-๊ด๊ณ ๋ค์ด์ด๊ทธ๋จ ์์ฑ
2.2 ๋ ผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
๋ ผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ๊ฐ๋ ๋ชจ๋ธ๋ง์์ ์ ์ํ ์ํฐํฐ์ ๊ด๊ณ๋ฅผ ๋ฐํ์ผ๋ก ์์ธ ์์ฑ์ ์ ์ํ๋ ๋จ๊ณ๋ค. ์ด ๋จ๊ณ์์๋ ์๋ณ์๋ฅผ ํ์ ํ๊ณ , ์ ๊ทํ์ ๊ฐ์ ์์ธํ ๊ณผ์ ์ ์ํํ๋ค.
- ์ํฐํฐ๋ณ ์์ธ ์์ฑ ์ ์
- ์๋ณ์ ํ์
- ์ ๊ทํ ์ํ
- ํธ๋์ญ์ ์ธํฐํ์ด์ค ์ค๊ณ
2.3 ๋ฌผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
๋ฌผ๋ฆฌ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ค์ ์ฌ์ฉํ DBMS์ ํน์ฑ๊ณผ ๊ตฌํ ํ๊ฒฝ์ ๊ณ ๋ คํด ์คํค๋ง๋ฅผ ๊ตฌ์ฒดํํ๋ ๋จ๊ณ๋ค. ๋ ผ๋ฆฌ ๋ชจ๋ธ์ ์ค์ ํ ์ด๋ธ, ์ปฌ๋ผ, ์ธ๋ฑ์ค ๊ตฌ์กฐ๋ก ๋ณํํ๋ค.
- ์ปฌ๋ผ์ ๋ฐ์ดํฐ ํ์ ๊ณผ ํฌ๊ธฐ ์ ์
- ์ธ๋ฑ์ค ์ ์
- ์ฑ๋ฅ์ ๊ณ ๋ คํ ์ญ์ ๊ทํ ๊ฒํ
- ๋ชฉํ DBMS์ ๋ง๋ ์คํค๋ง ๋์ถ
3. Entity์ Relationship ์ค๊ณ
3.1 Entity ๋์ถ
์ํฐํฐ๋ ์ ๋ฌด์์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ๋ฐ์ดํฐ์ ์งํฉ์ด๋ค. ์๋ฅผ ๋ค์ด ํ์ฌ ๊ด๋ฆฌ ์์คํ ์์๋ ํ์ฌ, ๋ถ์, ์ง์, ํ๋ก์ ํธ, ๋ถ์๊ฐ์กฑ ๋ฑ์ด ์ํฐํฐ ํ๋ณด๊ฐ ๋ ์ ์๋ค.
์ํฐํฐ๋ฅผ ๋์ถํ ๋๋ ๋ค์ ์ง๋ฌธ์ ๊ธฐ์ค์ผ๋ก ํ๋จํ๋ฉด ์ข๋ค.
- ์ ๋ฌด์์ ๋ ๋ฆฝ์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ ๋์์ธ๊ฐ?
- ์ฌ๋ฌ ๊ฐ์ ์ธ์คํด์ค๊ฐ ์กด์ฌํ ์ ์๋๊ฐ?
- ์์ฑ์ ๊ฐ์ง ์ ์๋๊ฐ?
- ๋ค๋ฅธ ์ํฐํฐ์ ๊ด๊ณ๋ฅผ ๋งบ๋๊ฐ?
3.2 ์๋ณ ๊ด๊ณ์ ๋น์๋ณ ๊ด๊ณ
์๋ณ ๊ด๊ณ์ ๋น์๋ณ ๊ด๊ณ๋ ๋ถ๋ชจ ์ํฐํฐ์ ํค๊ฐ ์์ ์ํฐํฐ์์ ์ด๋ค ์ญํ ์ ํ๋์ง์ ๋ฐ๋ผ ๊ตฌ๋ถ๋๋ค.
- ์๋ณ ๊ด๊ณ: ๋ถ๋ชจ ํ ์ด๋ธ์ ํค๊ฐ ์์ ํ ์ด๋ธ๋ก ์ ์ด๋์์ ๋, ์์ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค์ ํฌํจ๋๋ ๊ด๊ณ
- ๋น์๋ณ ๊ด๊ณ: ๋ถ๋ชจ ํ ์ด๋ธ์ ํค๊ฐ ์์ ํ ์ด๋ธ๋ก ์ ์ด๋์์ง๋ง, ์์ ํ ์ด๋ธ์ ์ผ๋ฐ ์ธ๋ํค๋ก๋ง ์ฌ์ฉ๋๋ ๊ด๊ณ
ERD์์๋ ๋ณดํต ์๋ณ ๊ด๊ณ๋ฅผ ์ค์ , ๋น์๋ณ ๊ด๊ณ๋ฅผ ์ ์ ์ผ๋ก ํํํ๋ค. ์๋ฅผ ๋ค์ด ๋ถ์์ ์ฌ์์ด ์์ ๋, ์ฌ์์ด ๋ฐ๋์ ๋ถ์์ ํค๋ฅผ ์์ ์ ๊ธฐ๋ณธํค๋ก ํฌํจํด์ผ ํ๋ ๊ตฌ์กฐ๋ผ๋ฉด ์๋ณ ๊ด๊ณ๊ฐ ๋๋ค. ๋ฐ๋๋ก ์ฌ์ ํ ์ด๋ธ์ด ๋ณ๋์ ์ฌ์๋ฒํธ๋ฅผ ๊ธฐ๋ณธํค๋ก ๊ฐ์ง๊ณ , ๋ถ์๋ฒํธ๋ ์์์ ๋ํ๋ด๋ ์ธ๋ํค๋ก๋ง ์ฌ์ฉ๋๋ค๋ฉด ๋น์๋ณ ๊ด๊ณ๊ฐ ๋๋ค.
3.3 M:N ๊ด๊ณ ํด์
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ M:N ๊ด๊ณ๋ฅผ ์ง์ ํํํ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์, ๋ณดํต ์ค๊ฐ ํ ์ด๋ธ์ ๋ง๋ค์ด 1:N ๊ด๊ณ ๋ ๊ฐ๋ก ๋ถํดํ๋ค.
์๋ฅผ ๋ค์ด ์ฑ
๊ณผ ์ ์์ ๊ด๊ณ๋ฅผ ์๊ฐํด๋ณด๋ฉด, ํ ๊ถ์ ์ฑ
์ ์ฌ๋ฌ ์ ์๋ฅผ ๊ฐ์ง ์ ์๊ณ ํ ๋ช
์ ์ ์๋ ์ฌ๋ฌ ์ฑ
์ ์ธ ์ ์๋ค.
์ด ๊ฒฝ์ฐ ์ฑ
๊ณผ ์ ์ ์ฌ์ด์ ์ฑ
_์ ์ ๊ฐ์ ์ฐ๊ฒฐ ํ
์ด๋ธ์ ๋๋ค.
erDiagram
direction LR
BOOK ||--o{ BOOK_AUTHOR : "ํฌํจ"
AUTHOR ||--o{ BOOK_AUTHOR : "์ฐธ์ฌ"
BOOK["์ฑ
"] {
int book_id PK "์ฑ
ID"
string book_name "์ฑ
์ด๋ฆ"
}
AUTHOR["์ ์"] {
int author_id PK "์ ์ID"
string author_name "์ ์์ด๋ฆ"
}
BOOK_AUTHOR["์ฑ
_์ ์"] {
int book_id PK, FK "์ฑ
ID"
int author_id PK, FK "์ ์ID"
}๋ค๋ง ์กฐํ ์ฑ๋ฅ์ ์ด์ ๋ก ์ฐ๊ฒฐ ํ
์ด๋ธ์ ์ฑ
์ด๋ฆ, ์ ์์ด๋ฆ ๊ฐ์ ๊ฐ์ ํจ๊ป ์ ์ฅํ๊ณ ์ถ์ด์ง ์ ์๋ค.
ํ์ง๋ง ์ด๋ ์ฑ
์ด๋ฆ์ด ์ฑ
ID์ ์ข
์๋๊ณ , ์ ์ ์ด๋ฆ์ด ์ ์ ID์ ์ข
์๋๋ ๊ตฌ์กฐ์ด๋ฏ๋ก 2์ ๊ทํ์ ์๋ฐํ๋ค.
์ฑ๋ฅ ๋๋ฌธ์ ๋ฐ์ ๊ทํ๋ฅผ ์ ํํ ์๋ ์์ง๋ง, ์ด ๊ฒฝ์ฐ ๋ฐ์ดํฐ ์ค๋ณต๊ณผ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ ์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋์์ ๋ ์ค๋ณต ์ ์ฅ๋ ๊ฐ์ด ํจ๊ป ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉด ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ๊นจ์ง๋ค. ๋ฐ์ ๊ทํ๋ฅผ ์ ์ฉํด์ผ ํ๋ค๋ฉด Trigger, ๊ณ์ฐ ์ปฌ๋ผ, ๋ฐฐ์น ์์ ๋ฑ์ผ๋ก ์ ํฉ์ฑ์ ์ ์งํ ๋ฐฉ๋ฒ์ ํจ๊ป ์ค๊ณํด์ผ ํ๋ค.
4. Attribute ์ค๊ณ
์์ฑ์ ์ํฐํฐ์ ์ฑ์ง, ๋ถ๋ฅ, ์๋, ์ํ, ํน์ฑ ๋ฑ์ ๋ํ๋ด๋ ์ธ๋ถ ํญ๋ชฉ์ด๋ค. ์ํฐํฐ๊ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ดํด์ผ ํ๋์ง ๊ตฌ์ฒดํํ๋ ๋จ๊ณ์์ ์์ฑ์ ์ ์ํ๋ค.
4.1 ๊ธฐ๋ณธ ์์ฑ
๊ธฐ๋ณธ ์์ฑ์ ํด๋น ์ํฐํฐ๊ฐ ์ ๋ฌด์ ์ผ๋ก ์๋ ๊ฐ์ง๊ณ ์๋ ์์ฑ์ด๋ค. ์๋ฅผ ๋ค์ด ์ง์ ์ํฐํฐ์ ์ง์๋ช , ์ฃผ์, ๊ธ์ฌ, ์ฑ๋ณ, ์๋ ์์ผ ๋ฑ์ ๊ธฐ๋ณธ ์์ฑ์ ํด๋นํ๋ค.
4.2 ์ค๊ณ ์์ฑ
์ค๊ณ ์์ฑ์ ์๋ ์ ๋ฌด์๋ ์กด์ฌํ์ง ์์ง๋ง, ์์คํ ์ ํจ์จ์ฑ์ด๋ ์๋ณ์ ์ํด ์์๋ก ์ถ๊ฐํ๋ ์์ฑ์ด๋ค. ๋ํ์ ์ผ๋ก ์ฝ๋, ์ผ๋ จ๋ฒํธ, ์๋ฒ ๊ฐ์ ๊ฐ์ด ์๋ค.
์๋ฅผ ๋ค์ด ๊ณ ๊ฐ์ผํฐ ์ฅ์ ์กฐ์น ์ด๋ ฅ์ ๊ด๋ฆฌํ๋ค๊ณ ๊ฐ์ ํด๋ณด์. ํ ๊ณ ๊ฐ์๊ฒ ์ฌ๋ฌ ๋ฒ ๋ฐฉ๋ฌธํ ์ ์๋๋ฐ, ๋ฐฉ๋ฌธ์ผ์๋ฅผ ๊ธฐ๋ณธํค์ ํฌํจํ๋ฉด ๊ฐ์ ๋ ์ฌ๋ฌ ๋ฒ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ์ฐ๋ฅผ ํํํ๊ธฐ ์ด๋ ต๋ค. ๋ฐฉ๋ฌธ์ผ์๋ฅผ ๋ถ ๋จ์๊น์ง ๋๋ฆด ์๋ ์์ง๋ง, ํค ๊ฐ์ด ๊ธธ์ด์ง๊ณ ๊ด๋ฆฌ๊ฐ ๋ณต์กํด์ง๋ค.
์ด๋ด ๋ ๋ฐฉ๋ฌธ ์๋ฒ ๊ฐ์ ์ค๊ณ ์์ฑ์ ์ถ๊ฐํ๋ฉด ์ค๋ณต์ ๋ฐฉ์งํ๋ฉด์ ๋ฐฉ๋ฌธ ์ด๋ ฅ์ ์์ ์ ์ผ๋ก ์๋ณํ ์ ์๋ค.
erDiagram
direction LR
CUSTOMER ||--o{ VISIT : "์์ฒญ"
CUSTOMER["๊ณ ๊ฐ"] {
int customer_id PK "๊ณ ๊ฐ๋ฒํธ"
string customer_name "๊ณ ๊ฐ๋ช
"
}
VISIT["๋ฐฉ๋ฌธ"] {
int customer_id PK, FK "๊ณ ๊ฐ๋ฒํธ"
int visit_seq PK "๋ฐฉ๋ฌธ์๋ฒ"
datetime visited_at "๋ฐฉ๋ฌธ์ผ์"
string visit_content "๋ฐฉ๋ฌธ๋ด์ฉ"
}4.3 ํ์ ์์ฑ
ํ์ ์์ฑ์ ๋ค๋ฅธ ์์ฑ์ด๋ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ก๋ถํฐ ๊ณ์ฐํ๊ฑฐ๋ ๋ณํํด์ ์ป์ ์ ์๋ ์์ฑ์ด๋ค. ํ์ ์์ฑ์ ๋ฐ์ดํฐ ์ค๋ณต๊ณผ ๋ฌด๊ฒฐ์ฑ ๋ฌธ์ ๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ธ์ ์ ๊ฒ ์ ์ํ๋ ๊ฒ์ด ์ข๋ค.
์๋ฅผ ๋ค์ด ์ฌ์ ํ
์ด๋ธ์ ๋ถ์์์ ์ปฌ๋ผ์ ์ ์ฅํ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด๋ณผ ์ ์๋ค.
๋ถ์์์๋ ๋ถ์๊ฐ์กฑ ํ
์ด๋ธ์์ COUNT(*)๋ก ๊ณ์ฐํ ์ ์๋ ๊ฐ์ด๋ฏ๋ก ํ์ ์์ฑ์ด๋ค.
erDiagram
direction LR
EMPLOYEE ||--o{ DEPENDENT : "๊ฐ์ง"
EMPLOYEE["์ฌ์"] {
int employee_id PK "์ฌ์๋ฒํธ"
string employee_name "์ฌ์๋ช
"
int dependent_count "๋ถ์์์"
}
DEPENDENT["๋ถ์๊ฐ์กฑ"] {
int employee_id PK, FK "์ฌ์๋ฒํธ"
string dependent_name PK "๋ถ์๊ฐ์กฑ๋ช
"
string relationship "๊ด๊ณ"
}์ฌ์.๋ถ์์์๋ฅผ ๋ณ๋ ์ปฌ๋ผ์ผ๋ก ์ ์ฅํ๋ฉด ๋ถ์๊ฐ์กฑ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ, ์์ , ์ญ์ ๋ ๋๋ง๋ค ํจ๊ป ๊ฐฑ์ ํด์ผ ํ๋ค.
๋ง์ฝ ์ค์ ๋ถ์๊ฐ์กฑ์ 3๋ช
์ธ๋ฐ ์ฌ์ ํ
์ด๋ธ์ ๋ถ์์์๊ฐ 2๋ช
์ด๋ผ๋ฉด ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ๊นจ์ง ์ํ๊ฐ ๋๋ค.
๋ฐ๋ผ์ ๋ถ์์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์กฐํ ์์ ์ ๊ณ์ฐํ๋ ๊ฒ์ด ์ ์ ํ๋ค. ์ฑ๋ฅ์ ๋ฐ๋์ ์ ์ฅํด์ผ ํ๋ค๋ฉด Trigger, Computed Column, ๋ฐฐ์น ์์ ๋ฑ์ ํตํด ์ ํฉ์ฑ์ ์ ์งํด์ผ ํ๋ค.
5. ์ค๊ณ ์ ์ฃผ์ํด์ผ ํ ๋ฌธ์
5.1 ์ค๋ณต ์์ฑ ๋ฌธ์
๋ฐฉ๋ฌธ1์ผ์, ๋ฐฉ๋ฌธ1๋ด์ฉ, ๋ฐฉ๋ฌธ2์ผ์, ๋ฐฉ๋ฌธ2๋ด์ฉ์ฒ๋ผ ๋ฐ๋ณต๋๋ ์์ฑ์ ์ปฌ๋ผ์ผ๋ก ๊ณ์ ์ถ๊ฐํ๋ ๋ฐฉ์์ ์ข์ง ์๋ค. ๋ฐฉ๋ฌธ ํ์๊ฐ ๋์ด๋ ๋๋ง๋ค ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๊ณ , ์กฐํ์ ๊ด๋ฆฌ๋ ์ด๋ ค์์ง๋ค.
์ด๋ฐ ๊ฒฝ์ฐ ๋ฐ๋ณต๋๋ ์์ฑ์ ๋ณ๋์ ์ํฐํฐ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค. ๋ฐฉ๋ฌธ์ ๊ณ ๊ฐ์ ์ข ์๋ ๋ฐ๋ณต ๋ฐ์ดํฐ์ด๋ฏ๋ก ๋ฐฉ๋ฌธ ํ ์ด๋ธ์ ๋ฐ๋ก ๋ง๋ค๊ณ , ๊ณ ๊ฐ๊ณผ ๋ฐฉ๋ฌธ์ 1:N ๊ด๊ณ๋ก ์ค๊ณํ๋ ๊ฒ์ด ์ ์ ํ๋ค.
5.2 ํ์ ์์ฑ์ ์ ํฉ์ฑ ๋ฌธ์
ํ์ ์์ฑ์ ํธ๋ฆฌํ์ง๋ง ์ ํฉ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๋ค. ๋ค๋ฅธ ํ ์ด๋ธ์์ ๊ณ์ฐ ๊ฐ๋ฅํ ๊ฐ์ ์ปฌ๋ผ์ผ๋ก ์ ์ฅํ๋ฉด, ์๋ณธ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ํ์ ์ปฌ๋ผ๋ ํจ๊ป ๊ฐฑ์ ๋์ด์ผ ํ๋ค.
๋ฐ๋ผ์ ํ์ ์์ฑ์ ์ ์ฅํ ๋๋ ๋ค์ ๊ธฐ์ค์ ํจ๊ป ๊ฒํ ํด์ผ ํ๋ค.
- ์กฐํ ์ฑ๋ฅ์ ์ ๋ง ์ ์ฅ์ด ํ์ํ๊ฐ?
- ์๋ณธ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ์ ํ์ ๊ฐ์ ์ด๋ป๊ฒ ๊ฐฑ์ ํ ๊ฒ์ธ๊ฐ?
- Trigger, ๊ณ์ฐ ์ปฌ๋ผ, ๋ฐฐ์น ์์ ์ค ์ด๋ค ๋ฐฉ์์ด ์ ์ ํ๊ฐ?
- ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ์ ๋ ๊ฒ์ฆํ ์ ์๋๊ฐ?
5.3 ๋ฐ์ ๊ทํ์ ์ฑ๋ฅ ์ฌ์ด์ ๊ท ํ
์ ๊ทํ๋ ๋ฐ์ดํฐ ์ค๋ณต์ ์ค์ด๊ณ ๋ฌด๊ฒฐ์ฑ์ ๋์ด๋ ๋ฐ ๋์์ด ๋๋ค. ํ์ง๋ง ๋ชจ๋ ์กฐํ์์ ์ฌ๋ฌ ํ ์ด๋ธ ์กฐ์ธ์ด ๋ฐ๋ณต๋๋ฉด ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์ฑ ID, ์ ์ ID, ์ฑ ์ด๋ฆ, ์ ์ ์ด๋ฆ์ ์์ฃผ ์กฐํํด์ผ ํ๋ค๋ฉด ์ฑ , ์ ์, ์ฑ _์ ์ ์ธ ํ ์ด๋ธ์ ๋งค๋ฒ ์กฐ์ธํด์ผ ํ๋ค. ์ด ๊ฒฝ์ฐ ์ฑ๋ฅ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์ผ๋ถ ๊ฐ์ ์ค๋ณต ์ ์ฅํ๋ ๋ฐ์ ๊ทํ๋ฅผ ๊ฒํ ํ ์ ์๋ค.
๋ค๋ง ๋ฐ์ ๊ทํ๋ ์ ๊ทํ ์๋ฐ์ ์๋์ ์ผ๋ก ๊ฐ์ํ๋ ์ค๊ณ๋ค. ๋ฐ๋ผ์ ์ฑ๋ฅ ์ด์ ๊ณผ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋น์ฉ์ ํจ๊ป ํ๋จํด์ผ ํ๋ค.
6. ์ํผํ์ ๊ณผ ์๋ธํ์
์ํผํ์ ๊ณผ ์๋ธํ์ ์ ๊ณตํต ์์ฑ๊ณผ ๊ฐ๋ณ ์์ฑ์ ๋ถ๋ฆฌํ๊ธฐ ์ํ ๋ชจ๋ธ๋ง ๋ฐฉ์์ด๋ค. ์ํผํ์ ์ ๊ณตํต์ฌํญ์ ์ถ์ํํ ๋ถ๋ชจ ์ํฐํฐ์ด๊ณ , ์๋ธํ์ ์ ๊ตฌ์ฒด์ ์ธ ์ ํ์ ๋ํ๋ด๋ ์์ ์ํฐํฐ๋ค.
์๋ฅผ ๋ค์ด ์ฌ์์ด๋ผ๋ ๊ณตํต ๊ฐ๋ ์๋์ ๊ธฐ์ ์ง๊ณผ ๊ด๋ฆฌ์ง์ด ์์ ์ ์๋ค. ์ฌ์ ํ ์ด๋ธ์๋ ๋ชจ๋ ์ฌ์์ด ๊ณตํต์ผ๋ก ๊ฐ์ง๋ ์์ฑ์ ๋๊ณ , ๊ธฐ์ ์ง๊ณผ ๊ด๋ฆฌ์ง ํ ์ด๋ธ์๋ ๊ฐ ์ ํ๋ง ๊ฐ์ง๋ ์์ฑ์ ๋๋ค.
๋ฐฐํ์ ๊ด๊ณ๋ ์ํผํ์ ์ ํ๋์ ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ์๋ธํ์ ์ค ๋ฐ๋์ ํ๋์ ์๋ธํ์ ์๋ง ์ํ๋ ๊ด๊ณ๋ฅผ ๋งํ๋ค. ์ฆ, ์ด๋ค ์ฌ์์ ๊ธฐ์ ์ง์ด๊ฑฐ๋ ๊ด๋ฆฌ์ง์ด๋ฉฐ ๋์์ ๋ ์ ํ์ ์ํ์ง ์๋ ๊ตฌ์กฐ๋ค.
7. ์ค์ต ERD ์ ๋ฆฌ
7.1 ํ์ฌ-๋ถ์-์ง์-ํ๋ก์ ํธ ์์
๋ค์์ ํ์ฌ, ๋ถ์, ์ง์, ํ๋ก์ ํธ, ์ง์ญ, ๋ถ์๊ฐ์กฑ์ ๊ธฐ์ค์ผ๋ก ์ ๋ฆฌํ ERD ์์ ๋ค.
์ง์๊ณผ ํ๋ก์ ํธ๋ M:N ๊ด๊ณ์ด๋ฏ๋ก ์ง์_ํ๋ก์ ํธ ์ฐ๊ฒฐ ํ
์ด๋ธ๋ก ํด์ํ๋ค.
erDiagram
direction LR
COMPANY ||--o{ DEPARTMENT : "๊ตฌ์ฑ"
DEPARTMENT ||..o{ EMPLOYEE : "์์"
EMPLOYEE ||..o| DEPARTMENT : "๊ด๋ฆฌ"
DEPARTMENT ||..o{ LOCATION : "์์น"
DEPARTMENT ||..o{ PROJECT : "๊ด๋ฆฌ"
EMPLOYEE ||--o{ EMPLOYEE_PROJECT : "์ฐธ์ฌ"
PROJECT ||--o{ EMPLOYEE_PROJECT : "ํฌํจ"
EMPLOYEE ||--o{ DEPENDENT : "๊ฐ์ง"
EMPLOYEE ||..o{ EMPLOYEE : "๊ฐ๋
"
PROJECT ||..|| LOCATION : "์์น"
COMPANY["ํ์ฌ"] {
int company_id PK "ํ์ฌ๋ฒํธ"
}
DEPARTMENT["๋ถ์"] {
int department_id PK "๋ถ์๋ฒํธ"
int company_id PK, FK "ํ์ฌ๋ฒํธ"
int manager_employee_id FK "๊ด๋ฆฌ์์ง์๋ฒํธ"
string department_name "๋ถ์๋ช
"
int employee_count "๋ถ์๋ด์ง์์"
date manager_started_at "๊ด๋ฆฌ์๊ทผ๋ฌด์์์ผ"
}
LOCATION["์ง์ญ"] {
int location_id PK "์ง์ญID"
int department_id FK "๋ถ์๋ฒํธ"
string location_name "์ง์ญ๋ช
"
}
PROJECT["ํ๋ก์ ํธ"] {
int project_id PK "ํ๋ก์ ํธ๋ฒํธ"
int department_id FK "๋ถ์๋ฒํธ"
int location_id FK "์ง์ญID"
string project_name "ํ๋ก์ ํธ๋ช
"
}
EMPLOYEE["์ง์"] {
int employee_id PK "์ง์๋ฒํธ"
int supervisor_employee_id FK "์ง์์์ฌ์ง์๋ฒํธ"
int department_id FK "๋ถ์๋ฒํธ"
string resident_number "์ฃผ๋ฏผ๋ฒํธ"
string employee_name "์ง์๋ช
"
string address "์ฃผ์"
int salary "๊ธ์ฌ"
string gender "์ฑ๋ณ"
date birth_date "์๋
์์ผ"
}
EMPLOYEE_PROJECT["์ง์_ํ๋ก์ ํธ"] {
int employee_id PK, FK "์ง์๋ฒํธ"
int project_id PK, FK "ํ๋ก์ ํธ๋ฒํธ"
int work_hours "๊ทผ๋ฌด์๊ฐ"
}
DEPENDENT["๋ถ์๊ฐ์กฑ"] {
string dependent_name PK "๋ถ์๊ฐ์กฑ๋ช
"
int employee_id PK, FK "์ง์๋ฒํธ"
string gender "์ฑ๋ณ"
date birth_date "์๋
์์ผ"
string relationship "๊ด๊ณ"
}7.2 ์ค๋ฌธ์ง ํ๋ก์ ํธ ์์
์ค๋ฌธ์ง ํ๋ก์ ํธ์์๋ ์ค๋ฌธ์ง, ์ค๋ฌธ์งํญ๋ชฉ, ์ค๋ฌธ์ง๋ฌธํญ์ ์ํฐํฐ๋ก ๋์ถํ ์ ์๋ค. ํ๋์ ์ค๋ฌธ์ง๋ ์ฌ๋ฌ ํญ๋ชฉ์ ๊ฐ์ง๊ณ , ํ๋์ ํญ๋ชฉ์ ์ฌ๋ฌ ๋ฌธํญ์ ๊ฐ์ง๋ค.
erDiagram
direction LR
SURVEY ||--o{ SURVEY_ITEM : "ํฌํจ"
SURVEY_ITEM ||--|{ SURVEY_OPTION : "๊ตฌ์ฑ"
SURVEY["์ค๋ฌธ์ง"] {
int survey_id PK "์ค๋ฌธ์ง๋ฒํธ"
string title "์ ๋ชฉ"
date created_at "์์ฑ์ผ์"
date started_at "์ค๋ฌธ์ง์์์ผ"
date ended_at "์ค๋ฌธ์ง์ข
๋ฃ์ผ"
string is_closed "์ค๋ฌธ์ง์์ฑ๋ง๊ฐ์ฌ๋ถ"
string description "์ค๋ช
"
}
SURVEY_ITEM["์ค๋ฌธ์งํญ๋ชฉ"] {
int question_id PK "๋ฌธ์ ๋ฒํธ"
string question "๋ฌธ์ "
int survey_id FK "์ค๋ฌธ์ง๋ฒํธ"
}
SURVEY_OPTION["์ค๋ฌธ์ง๋ฌธํญ"] {
int survey_id PK, FK "์ค๋ฌธ์ง๋ฒํธ"
int question_id FK "๋ฌธ์ ๋ฒํธ"
int option_id "๋ฌธํญ๋ฒํธ"
string option_content "๋ฌธํญ๋ด์ฉ"
}8. ์ค๋์ ํ๊ณ
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์์ ์ค์ํ ๊ฒ์ ํ ์ด๋ธ์ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ, ์ ๋ฌด ๊ท์น์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ ํํ๊ฒ ํํํ๋ ๊ฒ์ด๋ค. ํนํ M:N ๊ด๊ณ ํด์, ์๋ณ ๊ด๊ณ์ ๋น์๋ณ ๊ด๊ณ ๊ตฌ๋ถ, ํ์ ์์ฑ์ ์ ์ฅ ์ฌ๋ถ๋ ์ค์ ์ค๊ณ์์ ์์ฃผ ๊ณ ๋ฏผํด์ผ ํ๋ ๋ถ๋ถ์ด๋ค.
์ ๊ทํ๋ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์งํค๊ธฐ ์ํ ๊ธฐ๋ณธ ์์น์ด๊ณ , ๋ฐ์ ๊ทํ๋ ์ฑ๋ฅ ์๊ตฌ์ฌํญ ๋๋ฌธ์ ์ ํํ๋ ์์ธ์ ์ธ ์ค๊ณ๋ค. ๋ฐ๋ผ์ ๋ฐ์ ๊ทํ๋ฅผ ์ ์ฉํ ๋๋ ์ค๋ณต ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ์ด๋ป๊ฒ ์ ์งํ ์ง๊น์ง ํจ๊ป ์ค๊ณํด์ผ ํ๋ค.
์ฐธ๊ณ ์๋ฃ
KEEP READING
Related writing

Woojin
๊ตฌ์กฐ์ ์ผ๋ก ์ฌ๊ณ ํ๊ณ , ๊ทผ๊ฑฐ ์๊ฒ ๊ตฌํํ๊ธฐ ์ํด ๊ธฐ๋กํฉ๋๋ค.