[DB][MySQL][κ°œλ…] πŸ”₯ λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§ λνŒμ™•! κ°œλ…λΆ€ν„° 물리적 μ„€κ³„κΉŒμ§€ ν•œ λ²ˆμ— λ§ˆμŠ€ν„° πŸ’₯

κΉ€μƒμš±Β·2024λ…„ 9μ›” 16일
0
post-thumbnail

λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§ πŸ“Š

λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ΄λž€ 정보화 μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜κΈ° μœ„ν•΄ ν˜„μ‹€ μ„Έκ³„μ˜ 데이터λ₯Ό μ²΄κ³„μ μœΌλ‘œ μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 방법을 κ³„νšν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 주둜 데이터λ₯Ό λΆ„μ„ν•˜κ³  μ„€κ³„ν•˜λ©°, 이 과정은 크게 μš”κ΅¬ 사항 뢄석, 섀계, κ΅¬ν˜„ λ‹¨κ³„λ‘œ λ‚˜λ‰©λ‹ˆλ‹€. 각각의 λ‹¨κ³„λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ쑰와 μ„±λŠ₯에 μ€‘λŒ€ν•œ 영ν–₯을 λ―ΈμΉ˜λ―€λ‘œ κΌΌκΌΌν•œ κ³„νšμ΄ ν•„μš”ν•©λ‹ˆλ‹€. 이제 각 단계λ₯Ό μ°¨κ·Όμ°¨κ·Ό μ‚΄νŽ΄λ³ΌκΉŒμš”? 😊


1. μš”κ΅¬ 사항 μˆ˜μ§‘ 및 뢄석 πŸ”

첫 λ‹¨κ³„λŠ” μ‹œμŠ€ν…œμ—μ„œ ν•„μš”ν•œ 데이터λ₯Ό νŒŒμ•…ν•˜κ³  λΆ„μ„ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. ν˜„μ‹€ μ„Έκ³„μ˜ 정보와 μ‚¬μš©μžμ˜ μš”κ΅¬ 사항을 기반으둜 λ°μ΄ν„°λ² μ΄μŠ€μ— 담겨야 ν•  데이터λ₯Ό μ •λ¦¬ν•˜λŠ” μž‘μ—…μ΄μ—μš”.

  • μ‚¬μš©μž 식별: μ‹œμŠ€ν…œμ„ μ‚¬μš©ν•  μ£Όμš” μ‚¬μš©μžλ₯Ό νŒŒμ•…ν•©λ‹ˆλ‹€. λˆ„κ°€ 데이터λ₯Ό μƒμ„±ν•˜κ³ , μˆ˜μ •ν•˜λ©°, μ‘°νšŒν•  것인지 μ•Œμ•„μ•Ό μ‹œμŠ€ν…œ 섀계에 λ°˜μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ°μ΄ν„°λ² μ΄μŠ€ μš©λ„ 식별: λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ‹œμŠ€ν…œμ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ μ§€ μ •μ˜ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‚¬μš©μžκ°€ 데이터λ₯Ό λ‹¨μˆœ 쑰회만 ν•  것인지, 데이터λ₯Ό μž…λ ₯ν•˜κ³  μˆ˜μ •ν•  ν•„μš”λ„ μžˆλŠ”μ§€ λΆ„μ„ν•©λ‹ˆλ‹€.

  • μ‚¬μš©μž μš”κ΅¬ 사항 μˆ˜μ§‘ 및 λͺ…μ„Έ: μ‚¬μš©μž 인터뷰, μ„€λ¬Έ 쑰사 λ“±μœΌλ‘œ ν•„μš”ν•œ 데이터λ₯Ό μˆ˜μ§‘ν•˜κ³ , 이λ₯Ό λ°”νƒ•μœΌλ‘œ λͺ…μ„Έμ„œλ₯Ό μž‘μ„±ν•΄ 섀계 λ‹¨κ³„μ—μ„œ μ°Έκ³ ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.


2. 섀계 πŸ› 

섀계 λ‹¨κ³„λŠ” 크게 κ°œλ…μ , 논리적, 물리적 μ„€κ³„λ‘œ λ‚˜λ‰©λ‹ˆλ‹€. 각 μ„€κ³„λŠ” 데이터λ₯Ό μ–΄λ–»κ²Œ ꡬ쑰화할지 κ΅¬μ²΄ν™”ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. ν•˜λ‚˜μ”© μ‚΄νŽ΄λ³ΌκΉŒμš”?

2-1. κ°œλ…μ  λͺ¨λΈλ§ πŸ’‘

이 λ‹¨κ³„μ—μ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— 포함될 μ€‘μš”ν•œ κ°œλ…λ“€μ„ μ •μ˜ν•˜κ³ , 이듀을 μ–΄λ–»κ²Œ ν‘œν˜„ν• μ§€λ₯Ό κ΅¬μƒν•©λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ(DBMS)에 λŒ€ν•œ ꡬ체적인 사항은 κ³ λ €ν•˜μ§€ μ•Šκ³ , ν˜„μ‹€ μ„Έκ³„μ˜ 데이터λ₯Ό μ–΄λ–»κ²Œ ꡬ쑰화할 것인지λ₯Ό μ„€κ³„ν•˜λŠ” 것이 λͺ©ν‘œμž…λ‹ˆλ‹€.

  • 핡심 Entity λ„μΆœ: ν˜„μ‹€ μ„Έκ³„μ—μ„œ μ€‘μš”ν•œ κ°œμ²΄λ“€μ„ μ‹λ³„ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 학ꡐ μ‹œμŠ€ν…œμ΄λΌλ©΄ 학생, 강사, κ³Όλͺ© 등이 μ£Όμš” κ°œμ²΄κ°€ 될 수 μžˆμ–΄μš”.

  • ERD μž‘μ„±: ERD(Entity Relationship Diagram)λŠ” μ—”ν‹°ν‹°, 관계, 속성을 μ‹œκ°μ μœΌλ‘œ λ‚˜νƒ€λ‚Έ λ‹€μ΄μ–΄κ·Έλž¨μž…λ‹ˆλ‹€. 이 λ‹€μ΄μ–΄κ·Έλž¨μ„ 톡해 데이터 ꡬ쑰λ₯Ό κ°œλ…μ μœΌλ‘œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • DBMS κ²°μ •: λ§ˆμ§€λ§‰μœΌλ‘œ, μ‹œμŠ€ν…œ μš”κ΅¬ 사항에 λ§žλŠ” DBMSλ₯Ό κ²°μ •ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, MySQL, PostgreSQL, Oracle 등이 μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

2-2. 논리적 λͺ¨λΈλ§ 🧩

논리적 λͺ¨λΈλ§μ€ κ°œλ…μ  λͺ¨λΈλ§μ—μ„œ κ΅¬μ²΄ν™”λœ κ°œλ…λ“€μ„ μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©ν•  수 μžˆλ„λ‘ κ΅¬μ²΄ν™”ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€.

  • ERD 맀핑: κ°œλ…μ μœΌλ‘œ μž‘μ„±λœ ERDλ₯Ό νŠΉμ • κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ— 맞게 λ³€ν™˜ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ—”ν‹°ν‹°λ₯Ό ν…Œμ΄λΈ”λ‘œ, μ—”ν‹°ν‹° κ°„μ˜ 관계λ₯Ό μ™Έλž˜ ν‚€λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

  • 상세 속성 μ •μ˜: 각 ν…Œμ΄λΈ”μ˜ 컬럼과 속성, 데이터 νƒ€μž… 등을 ꡬ체적으둜 μ •μ˜ν•©λ‹ˆλ‹€. 컬럼 μ œμ•½ 쑰건, κΈ°λ³Έκ°’, 인덱슀 μ„€μ • 등도 ν¬ν•¨λ©λ‹ˆλ‹€.

  • μ •κ·œν™”: 데이터λ₯Ό 쀑볡 없이 μ €μž₯ν•˜κ³  무결성을 μœ μ§€ν•˜κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ„ μ •κ·œν™”ν•©λ‹ˆλ‹€. μ •κ·œν™”λŠ” 데이터λ₯Ό μ—¬λŸ¬ ν…Œμ΄λΈ”λ‘œ 뢄리해 쀑볡을 μ΅œμ†Œν™”ν•˜λŠ” μž‘μ—…μ΄μ—μš”.

2-3. 물리적 λͺ¨λΈλ§ πŸ—

이 λ‹¨κ³„λŠ” μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ΅¬μΆ•ν•˜κΈ° μœ„ν•œ 물리적 μ„€κ³„μž…λ‹ˆλ‹€. DBMS의 νŠΉμ„±μ— 따라 λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ΅œμ ν™”ν•˜λŠ” 과정이 ν¬ν•¨λ©λ‹ˆλ‹€.

  • DB 개체 μ •μ˜: ν…Œμ΄λΈ”, 인덱슀, λ·°, μ €μž₯ ν”„λ‘œμ‹œμ € λ“±μ˜ λ°μ΄ν„°λ² μ΄μŠ€ κ°œμ²΄λ“€μ„ μ„€κ³„ν•˜κ³  μƒμ„±ν•©λ‹ˆλ‹€.

  • ν…Œμ΄λΈ” 및 인덱슀 섀계: μ„±λŠ₯을 κ³ λ €ν•œ ν…Œμ΄λΈ”μ˜ 물리적 μ €μž₯ ꡬ쑰λ₯Ό μ„€κ³„ν•˜κ³ , μ μ ˆν•œ 인덱슀λ₯Ό μ •μ˜ν•΄ λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 μ΅œμ ν™”ν•©λ‹ˆλ‹€.


3. λ°μ΄ν„°λ² μ΄μŠ€ κ΅¬ν˜„ πŸš€

λ§ˆμ§€λ§‰ λ‹¨κ³„λŠ” μ„€κ³„λœ λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈμ„ μ‹€μ œ μ‹œμŠ€ν…œμ— κ΅¬ν˜„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이제 본격적으둜 λ°μ΄ν„°λ² μ΄μŠ€κ°€ κ΅¬μΆ•λ˜κ³  운영되기 μ‹œμž‘ν•΄μš”!

  • 쿼리 μž‘μ„±: μ„€κ³„λœ ν…Œμ΄λΈ”κ³Ό 인덱슀, 트리거, λ·° 등을 μƒμ„±ν•œ ν›„, 데이터λ₯Ό μ‚½μž…ν•˜κ³  쿼리λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
  • μ„±λŠ₯ μ΅œμ ν™”: λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 높이기 μœ„ν•΄ 인덱슀λ₯Ό μ΅œμ ν™”ν•˜κ³ , μ„±λŠ₯ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ”μ§€ μ κ²€ν•©λ‹ˆλ‹€.

κ°œλ…μ  λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§ 🎨

κ°œλ…μ  λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ€ 업무 뢄석 λ‹¨κ³„μ—μ„œ 얻어진 정보λ₯Ό λ°”νƒ•μœΌλ‘œ Entity(싀체)λ₯Ό μΆ”μΆœν•˜κ³ , 각 Entity의 속성을 κ΅¬μ„±ν•˜λ©°, Entity κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜μ—¬ ER-Diagram(ERD)λ₯Ό μž‘μ„±ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. μ΄λŠ” ν˜„μ‹€ μ„Έκ³„μ˜ 데이터λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰λ₯Ό λͺ…ν™•νžˆ μ΄ν•΄ν•˜κ³  섀계할 수 있게 ν•©λ‹ˆλ‹€. 🌐


1. μ‚¬μš©μž λΆ€λ¬Έμ˜ 처리 ν˜„μƒ 뢄석 πŸ”

처리 ν˜„μƒ 뢄석은 μ‹€μ œ μ—…λ¬΄μ—μ„œ μ–΄λ–€ 데이터가 μ²˜λ¦¬λ˜λŠ”μ§€λ₯Ό λΆ„μ„ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. 이 뢄석은 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©μžκ°€ μ–΄λ–€ 데이터λ₯Ό 닀루고 μ²˜λ¦¬ν•˜λŠ”μ§€λ₯Ό λͺ…ν™•νžˆ νŒŒμ•…ν•˜λŠ” μ€‘μš”ν•œ μΆœλ°œμ μž…λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: 온라인 μ‡Όν•‘λͺ°μ˜ 경우, 고객이 μ£Όλ¬Έν•˜κ³  결제λ₯Ό μ™„λ£Œν•˜λŠ” κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” μ£Όλ¬Έ 정보, 결제 정보 등이 ν•„μš”ν•œ λ°μ΄ν„°μž…λ‹ˆλ‹€.

2. 싀체와 관계 νŒŒμ•…ν•˜μ—¬ ERD μž‘μ„± 🧩

λ‹€μŒμœΌλ‘œ, λΆ„μ„λœ 데이터λ₯Ό λ°”νƒ•μœΌλ‘œ μ‹œμŠ€ν…œμ—μ„œ μ€‘μš”ν•œ 싀체(Entity)와 이듀 κ°„μ˜ 관계(Relationship)λ₯Ό νŒŒμ•…ν•©λ‹ˆλ‹€. 이후, 각 싀체와 관계λ₯Ό μ‹œκ°μ μœΌλ‘œ λ‚˜νƒ€λ‚Έ ERDλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: 고객은 μ—¬λŸ¬ 주문을 ν•  수 있고, ν•˜λ‚˜μ˜ μ£Όλ¬Έμ—λŠ” μ—¬λŸ¬ μƒν’ˆμ΄ 포함될 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 관계λ₯Ό ERD에 ν‘œν˜„ν•΄ 싀체 κ°„μ˜ 관계λ₯Ό λͺ…ν™•νžˆ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. πŸ“ˆ

3. 싀체에 λŒ€ν•œ 상세 μ •μ˜ πŸ“

싀체(Entity)λ₯Ό ꡬ체적으둜 μ •μ˜ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 이 λ‹¨κ³„μ—μ„œλŠ” 싀체가 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ–΄λ–€ 역할을 ν•˜κ³ , μ–΄λ–€ νŠΉμ„±μ„ κ°€μ§ˆμ§€ μ„€λͺ…ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: '고객' μ‹€μ²΄μ—λŠ” 고객 ID, 고객 이름, μ£Όμ†Œ λ“±μ˜ 속성이 ν¬ν•¨λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 속성을 μ •μ˜ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ μ‹€μ²΄μ˜ 역할을 κ΅¬μ²΄ν™”ν•©λ‹ˆλ‹€.

4. μ‹λ³„μž μ •μ˜ 및 업무 κ·œμΉ™ μ„€μ • πŸ”

각 싀체λ₯Ό κ³ μœ ν•˜κ²Œ ꡬ뢄할 수 μžˆλŠ” μ‹λ³„μž(Identifier)λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€. 이 μ‹λ³„μžλŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ‚΄μ—μ„œ 싀체λ₯Ό κ΅¬λΆ„ν•˜λŠ” μ€‘μš”ν•œ 속성이며, 업무 κ·œμΉ™μ— 따라 κ΄€λ¦¬λ©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: '고객 ID'λŠ” 고객을 κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” μ‹λ³„μžμž…λ‹ˆλ‹€. 이 값은 쀑볡될 수 μ—†λ‹€λŠ” κ·œμΉ™μ„ μ„€μ •ν•΄ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 μœ μ§€ν•©λ‹ˆλ‹€.

5. 싀체별 속성 상세화 ✍️

싀체가 κ°€μ§€λŠ” 속성(Attribute)을 ꡬ체적으둜 μ •μ˜ν•©λ‹ˆλ‹€. 각 μ‹€μ²΄μ˜ 속성을 λ‚˜μ—΄ν•˜κ³ , 이 μ†μ„±λ“€μ˜ 데이터 νƒ€μž…κ³Ό μ œμ•½ 쑰건을 μ„€μ •ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: '고객' μ‹€μ²΄μ˜ μ†μ„±μœΌλ‘œλŠ” 고객 이름, 이메일, μ „ν™”λ²ˆν˜Έκ°€ 있으며, 각각의 데이터 νƒ€μž…μ€ λ¬Έμžμ—΄κ³Ό 숫자 ν˜•μ‹μœΌλ‘œ μ •μ˜λ©λ‹ˆλ‹€.

6. 속성 및 μ˜μ—­ 상세 μ •μ˜ πŸ“

μ†μ„±μ˜ 값이 κ°€μ Έμ•Ό ν•  λ²”μœ„(μ˜μ—­)λ₯Ό μ •μ˜ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. 속성 값이 κ°€μ§ˆ 수 μžˆλŠ” μ΅œμ†Œκ°’, μ΅œλŒ€κ°’ λ˜λŠ” νŠΉμ • ν˜•μ‹ 등을 μ§€μ •ν•˜μ—¬ λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: 고객의 이메일 속성은 '@' 문자λ₯Ό 포함해야 ν•˜λ©°, μ „ν™”λ²ˆν˜ΈλŠ” 10자리 숫자둜 μ œν•œν•˜λŠ” λ°©μ‹μœΌλ‘œ μ •μ˜λ©λ‹ˆλ‹€.

7. 속성에 λŒ€ν•œ 업무 κ·œμΉ™ μ •μ˜ πŸ“œ

각 속성에 λŒ€ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ μ„€μ •ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. μ΄λŠ” μ†μ„±μ˜ 값에 λŒ€ν•œ μ‘°κ±΄μ΄λ‚˜ 값이 λ³€κ²½λ˜λŠ” κ·œμΉ™ 등을 μ„€μ •ν•˜μ—¬ λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 무결성을 μœ μ§€ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: 'μ£Όλ¬Έ' μ‹€μ²΄μ—μ„œλŠ” μ£Όλ¬Έ μƒνƒœκ°€ '처리 쀑', '배솑 쀑', 'μ™„λ£Œ' 쀑 ν•˜λ‚˜λ‘œ μ œν•œλ˜λ©°, μ£Όλ¬Έ κΈˆμ•‘μ€ μŒμˆ˜κ°€ 될 수 μ—†λ‹€λŠ” κ·œμΉ™μ„ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

8. μ‚¬μš©μžμ™€ ν•¨κ»˜ λͺ¨λΈ κ²€ν†  πŸ‘₯

λ§ˆμ§€λ§‰μœΌλ‘œ, μ„€κ³„λœ ERD와 속성, κ·œμΉ™ 등을 μ‚¬μš©μžμ™€ ν•¨κ»˜ κ²€ν† ν•˜λŠ” λ‹¨κ³„μž…λ‹ˆλ‹€. μ‚¬μš©μžμ˜ μš”κ΅¬ 사항이 μ •ν™•νžˆ λ°˜μ˜λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κ³ , λˆ„λ½λœ 뢀뢄이 μ—†λŠ”μ§€ κ²€ν† ν•©λ‹ˆλ‹€. ν”Όλ“œλ°±μ„ λ°˜μ˜ν•΄ λͺ¨λΈμ„ μˆ˜μ •ν•˜κ±°λ‚˜ 보완할 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: 온라인 μ‡Όν•‘λͺ° μ‹œμŠ€ν…œμ˜ 경우, 고객 μ„œλΉ„μŠ€ λ‹΄λ‹Ήμžμ™€ ν•¨κ»˜ 데이터 λͺ¨λΈμ„ κ²€ν† ν•˜μ—¬ 싀무에 ν•„μš”ν•œ λͺ¨λ“  데이터가 잘 μ •μ˜λ˜μ—ˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.


1. 개체 (Entity) πŸ§‘β€πŸ’Ό

개체(Entity)λŠ” ν˜„μ‹€ μ„Έκ³„μ—μ„œ λ°μ΄ν„°λ‘œ κ΄€λ¦¬λ˜μ–΄μ•Ό ν•  μ‚¬λžŒ, 사물, μž₯μ†Œ, 사건 등을 μ˜λ―Έν•΄μš”. μ΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯되고 κ΄€λ¦¬λ˜λŠ” μ€‘μš”ν•œ 객체둜, 예λ₯Ό λ“€μ–΄ 고객, μ œν’ˆ, μ£Όλ¬Έ 등이 이에 ν•΄λ‹Ήν•©λ‹ˆλ‹€.

  • Entity μ°ΎλŠ” 법:

    • μ˜μ†μ μœΌλ‘œ μ‘΄μž¬ν•˜λŠ” 것: ν•œ 번 μƒμ„±λ˜λ©΄ μ§€μ†μ μœΌλ‘œ κ΄€λ¦¬λ˜μ–΄μ•Ό ν•  λŒ€μƒμ΄μ—μš”. μΌμ‹œμ μΈ 것이 μ•„λ‹ˆλΌ, μž₯κΈ°κ°„ μ‘΄μž¬ν•˜κ±°λ‚˜ 좔적할 ν•„μš”κ°€ μžˆλŠ” κ°μ²΄μž…λ‹ˆλ‹€.

      • 예: 고객, μ œν’ˆ, μ£Όλ¬Έ 등은 μ‹œκ°„μ΄ μ§€λ‚˜λ„ κΎΈμ€€νžˆ κ΄€λ¦¬λ˜μ–΄μ•Ό ν•˜λŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€.
    • κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” 데이터 μš”μ†Œ: 각 κ°œμ²΄λŠ” κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” 속성을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 같은 μœ ν˜•μ˜ μ—¬λŸ¬ 개체λ₯Ό ꡬ뢄할 수 있죠.

      • 예: 고객 ID, μ œν’ˆ 번호, μ£Όλ¬Έ 번호 등이 개체λ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” μ†μ„±μž…λ‹ˆλ‹€.
    • λ°˜λ“œμ‹œ 속성을 κ°€μ Έμ•Ό 함: κ°œμ²΄λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ 속성(Attribute)을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€. 속성은 κ°œμ²΄μ— λŒ€ν•œ ꡬ체적인 정보λ₯Ό λ‚˜νƒ€λ‚΄μ£ .

      • 예: '고객' κ°œμ²΄λŠ” 고객 이름, μ „ν™”λ²ˆν˜Έ λ“±μ˜ 속성을 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • λͺ…사적 ν‘œν˜„: κ°œμ²΄λŠ” 주둜 λͺ…μ‚¬λ‘œ ν‘œν˜„λΌμš”. μ‹œμŠ€ν…œ λ‚΄μ—μ„œ μ€‘μš”ν•œ 역할을 ν•˜λŠ” 객체이기 λ•Œλ¬Έμ—, λͺ…μ‚¬ν˜• λ‹¨μ–΄λ‘œ ν‘œν˜„ν•˜λŠ” 것이 μΌλ°˜μ μž…λ‹ˆλ‹€.

      • 예: 고객(Customer), μ£Όλ¬Έ(Order), μ œν’ˆ(Product) λ“±.

2. 속성 (Attribute) 🏷️

속성(Attribute)은 κ°œμ²΄μ— κ΄€ν•œ ꡬ체적인 정보λ₯Ό μ €μž₯ν•˜λŠ” μš”μ†Œμž…λ‹ˆλ‹€. 속성은 개체의 μ„±μ§ˆ, μƒνƒœ, νŠΉμ„± 등을 λ‚˜νƒ€λ‚΄λ©°, μ΅œμ’…μ μœΌλ‘œλŠ” ν…Œμ΄λΈ”μ˜ 컬럼(Column)으둜 μ‚¬μš©λ©λ‹ˆλ‹€.

  • μ†μ„±μ˜ νŠΉμ§•:

    • μ €μž₯ν•  ν•„μš”κ°€ μžˆλŠ” 정보: 속성은 λ°μ΄ν„°λ² μ΄μŠ€μ— μ €μž₯ν•  κ°€μΉ˜κ°€ μžˆλŠ” 정보λ₯Ό λ‹΄μŠ΅λ‹ˆλ‹€.

      • 예: '고객' 개체의 μ†μ„±μœΌλ‘œλŠ” 고객 이름, μ£Όμ†Œ, μ „ν™”λ²ˆν˜Έ 등이 μžˆμŠ΅λ‹ˆλ‹€.
    • 개체의 νŠΉμ„±: 속성은 κ°œμ²΄κ°€ 가진 λ‹€μ–‘ν•œ 정보λ₯Ό λ‚˜νƒ€λ‚΄λ©°, 이λ₯Ό 톡해 개체의 νŠΉμ§•μ„ νŒŒμ•…ν•  수 μžˆμ–΄μš”.

      • 예: μ œν’ˆμ˜ 가격, 재고 μƒνƒœ, μ£Όλ¬Έ λ‚ μ§œ 등이 μ†μ„±μœΌλ‘œ μ •μ˜λ  수 μžˆμŠ΅λ‹ˆλ‹€.
    • μ†μ„±μ˜ 개수: κ°œμ²΄μ— ν¬ν•¨λ˜λŠ” 속성은 10개 λ‚΄μ™Έλ‘œ μœ μ§€ν•˜λŠ” 것이 λ°”λžŒμ§ν•©λ‹ˆλ‹€. λ„ˆλ¬΄ 많으면 관리가 λ³΅μž‘ν•΄μ§ˆ 수 있죠.

  • μ†μ„±μ˜ μœ ν˜•:

    • κΈ°μ΄ˆμ†μ„±: κ°œμ²΄κ°€ μ›λž˜ 가지고 μžˆλŠ” κΈ°λ³Έ μ†μ„±μž…λ‹ˆλ‹€.

      • 예: '고객'의 이름, μ£Όμ†Œ, μ „ν™”λ²ˆν˜Έ.
    • μΆ”μΆœμ†μ„±: 기초 속성을 λ°”νƒ•μœΌλ‘œ κ³„μ‚°λœ μ†μ„±μž…λ‹ˆλ‹€.

      • 예: 'μ£Όλ¬Έ'μ—μ„œ μƒν’ˆ 가격과 μˆ˜λŸ‰μ„ κ³±ν•΄ κ³„μ‚°λœ 총 μ£Όλ¬Έ κΈˆμ•‘.
    • 섀계속성: νš¨μœ¨μ„±μ„ 높이기 μœ„ν•΄ μΆ”κ°€λœ μ†μ„±μž…λ‹ˆλ‹€.

      • 예: μ£Όλ¬Έ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” 'μ£Όλ¬Έ μƒνƒœ' 속성.

3. μ‹λ³„μž (Identifier) πŸ†”

μ‹λ³„μž(Identifier)λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν•˜λ‚˜μ˜ 개체 λ‚΄μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μœ μΌν•˜κ²Œ ꡬ뢄할 수 μžˆλŠ” μ†μ„±μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 각 μΈμŠ€ν„΄μŠ€λ₯Ό μ •ν™•νžˆ 식별할 수 μžˆμŠ΅λ‹ˆλ‹€.


4. 후보킀 (Candidate Key) 🎯

후보킀(Candidate Key)λŠ” 개체 λ‚΄μ—μ„œ 각 μΈμŠ€ν„΄μŠ€λ₯Ό κ³ μœ ν•˜κ²Œ ꡬ뢄할 수 μžˆλŠ” 속성 λ˜λŠ” 속성 그룹을 λ§ν•΄μš”. κ·Έ 쀑 ν•˜λ‚˜λŠ” κΈ°λ³Έν‚€(Primary Key)둜 μ„ νƒλ©λ‹ˆλ‹€.

  • νŠΉμ§•: μ€‘λ³΅λ˜μ§€ μ•Šκ³  각 μΈμŠ€ν„΄μŠ€λ₯Ό κ³ μœ ν•˜κ²Œ ꡬ뢄할 수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: 고객 ID와 이메일 μ£Όμ†Œκ°€ κ³ μœ ν•  경우, λ‘˜ λ‹€ 후보킀가 될 수 μžˆμŠ΅λ‹ˆλ‹€.

5. κΈ°λ³Έν‚€ (Primary Key) πŸ”‘

κΈ°λ³Έν‚€(Primary Key)λŠ” 후보킀 μ€‘μ—μ„œ 개체 λ‚΄ μΈμŠ€ν„΄μŠ€λ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” κ°€μž₯ μ ν•©ν•œ ν‚€μž…λ‹ˆλ‹€. 각 λ ˆμ½”λ“œλ₯Ό μœ μΌν•˜κ²Œ κ΅¬λΆ„ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 μœ μ§€ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•΄μš”.

  • κΈ°λ³Έν‚€ μ„ μ • κΈ°μ€€:
    • λŒ€ν‘œμ„±: 싀체λ₯Ό λŒ€ν‘œν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • 짧은 길이: λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 κ³ λ €ν•΄ κ°€λŠ₯ν•œ 짧은 길이둜 μ„€μ •ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: 고객 IDλŠ” 고객을 κ³ μœ ν•˜κ²Œ 식별할 수 μžˆλŠ” λŒ€ν‘œμ μΈ κΈ°λ³Έν‚€μž…λ‹ˆλ‹€.

6. λŒ€μ²΄ν‚€ (Alternate Key) πŸ”„

λŒ€μ²΄ν‚€(Alternate Key)λŠ” 후보킀 쀑 κΈ°λ³Έν‚€λ‘œ μ„ νƒλ˜μ§€ μ•Šμ€ μ†μ„±μž…λ‹ˆλ‹€. μ—¬μ „νžˆ 각 μΈμŠ€ν„΄μŠ€λ₯Ό κ³ μœ ν•˜κ²Œ ꡬ뢄할 수 μžˆλŠ” ν‚€μ˜ˆμš”.

  • μ˜ˆμ‹œ: 고객 IDκ°€ κΈ°λ³Έν‚€λ‘œ μ„ νƒλ˜λ©΄, 이메일 μ£Όμ†ŒλŠ” λŒ€μ²΄ν‚€κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

7. 볡합킀 (Composite Key) πŸ”—

볡합킀(Composite Key)λŠ” λ‘˜ μ΄μƒμ˜ 속성을 κ²°ν•©ν•΄ κΈ°λ³Έν‚€λ‘œ μ‚¬μš©ν•˜λŠ” κ²½μš°μž…λ‹ˆλ‹€. μ—¬λŸ¬ μ†μ„±μ˜ 쑰합을 톡해 μœ μΌν•œ μ‹λ³„μžλ₯Ό λ§Œλ“œλŠ” 방식이죠.

  • νŠΉμ§•: κ°œλ³„ 속성은 κ³ μœ ν•˜μ§€ μ•Šμ§€λ§Œ, μ—¬λŸ¬ 속성을 ν•©μΉ˜λ©΄ κ³ μœ ν•΄μ§ˆ λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: μ£Όλ¬Έ λ²ˆν˜Έμ™€ μ œν’ˆ IDλ₯Ό κ²°ν•©ν•΄ λ³΅ν•©ν‚€λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

8. λŒ€λ¦¬ν‚€ (Surrogate Key) 🧩

λŒ€λ¦¬ν‚€(Surrogate Key)λŠ” μ›λž˜ 데이터에 μ‘΄μž¬ν•˜μ§€ μ•Šμ§€λ§Œ, μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ μΆ”κ°€λœ μΈμœ„μ μΈ ν‚€μž…λ‹ˆλ‹€. 주둜 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μžλ™μœΌλ‘œ μƒμ„±λ˜λŠ” κ°’μœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

  • νŠΉμ§•: 의미 없이 식별 λͺ©μ μœΌλ‘œλ§Œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • μ˜ˆμ‹œ: μžλ™ μƒμ„±λ˜λŠ” μ£Όλ¬Έ IDλŠ” λŒ€λ¦¬ν‚€λ‘œ μ‚¬μš©λ  수 μžˆμŠ΅λ‹ˆλ‹€.

1. 관계 (Relationship) πŸ”—

관계(Relationship)λŠ” 두 개 μ΄μƒμ˜ Entity(개체) κ°„μ˜ 업무적인 연관성을 μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, '고객'κ³Ό 'μ£Όλ¬Έ'은 μ„œλ‘œ 관련이 있으며, 고객이 주문을 ν•œλ‹€λŠ” 사싀이 κ΄€κ³„λ‘œ ν‘œν˜„λ  수 μžˆμ–΄μš”. κ΄€κ³„λŠ” 싀체듀이 μ„œλ‘œ μ–΄λ–»κ²Œ μƒν˜Έμž‘μš©ν•˜κ³ , μ–΄λ–€ 연관성을 κ°€μ§€λŠ”μ§€λ₯Ό λͺ…ν™•νžˆ μ •μ˜ν•˜λŠ” μ€‘μš”ν•œ μš”μ†Œμž…λ‹ˆλ‹€.


2. 관계 뢄석 (Relationship Analysis) πŸ”

관계 λΆ„μ„μ—μ„œλŠ” 두 Entity κ°„μ˜ 연관성을 ꡬ체적으둜 νŒŒμ•…ν•˜κ³ , μ‹œμŠ€ν…œμ˜ ν˜„μž¬μ™€ λ―Έλž˜κΉŒμ§€ κ³ λ €ν•œ 뢄석이 ν•„μš”ν•©λ‹ˆλ‹€. μ‹œμŠ€ν…œμ΄ ν™•μž₯λ˜λ”λΌλ„ 이 관계가 μœ νš¨ν•œμ§€ ν™•μΈν•˜λŠ” 것이 μ€‘μš”ν•΄μš”.

  • 각 Entity κ°„ 쑴재 μ—¬λΆ€ κ²°μ •: 두 싀체가 μ‹€μ œλ‘œ 관계λ₯Ό 가지고 μžˆλŠ”μ§€, λ˜λŠ” λ―Έλž˜μ— μ–΄λ–€ λ°©μ‹μœΌλ‘œ 관계λ₯Ό κ°€μ§ˆ 수 μžˆλŠ”μ§€ λΆ„μ„ν•©λ‹ˆλ‹€.
    • 예: '고객'은 'μ£Όλ¬Έ'을 ν•  수 있고, 'μ£Όλ¬Έ'은 '고객'에 μ˜ν•΄ λ°œμƒν•˜λ―€λ‘œ 두 Entity 간에 관계가 μ‘΄μž¬ν•©λ‹ˆλ‹€.
  • 미래 μ‚¬μš© κ³ λ €: ν˜„μž¬λΏλ§Œ μ•„λ‹ˆλΌ, μ‹œμŠ€ν…œμ΄ ν™•μž₯될 λ•Œμ—λ„ 관계가 μœ νš¨ν•œμ§€ κ²€ν† ν•©λ‹ˆλ‹€. 미래의 κΈ°λŠ₯μ΄λ‚˜ μš”κ΅¬μ‚¬ν•­μ„ 염두에 두고 뢄석해야 ν•©λ‹ˆλ‹€.

3. E-R Diagram으둜 관계 μ„€μ •ν•˜λŠ” μˆœμ„œ πŸ“Š

E-R Diagram(ERD)은 Entity와 κ·Έλ“€ κ°„μ˜ 관계λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” λ‹€μ΄μ–΄κ·Έλž¨μ΄μ—μš”. Entity κ°„ 관계λ₯Ό μ„€μ •ν•  λ•ŒλŠ” λ‹€μŒμ˜ μˆœμ„œλ₯Ό λ”°λ¦…λ‹ˆλ‹€.

1. 관계 μžˆλŠ” 두 싀체λ₯Ό μ‹€μ„ μœΌλ‘œ μ—°κ²°ν•˜κ³  관계λ₯Ό λΆ€μ—¬ πŸ–‡οΈ

λ¨Όμ €, 두 개의 Entityκ°€ μ–΄λ–€ 관계에 μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚΄κΈ° μœ„ν•΄ μ‹€μ„ μœΌλ‘œ μ—°κ²°ν•˜κ³ , κ·Έ 관계에 λŒ€ν•΄ 라벨을 λΆ™μ—¬ μ„€λͺ…ν•©λ‹ˆλ‹€.

  • μ˜ˆμ‹œ: '고객'κ³Ό 'μ£Όλ¬Έ'을 μ‹€μ„ μœΌλ‘œ μ—°κ²°ν•˜κ³ , "고객은 μ£Όλ¬Έν•œλ‹€"λΌλŠ” 관계λ₯Ό λΆ€μ—¬ν•  수 μžˆμ–΄μš”.

2. 관계 차수(Cardinality)λ₯Ό ν‘œν˜„ πŸ”’

μ°¨μˆ˜μ„±(Cardinality)은 ν•˜λ‚˜μ˜ Entity μΈμŠ€ν„΄μŠ€κ°€ λ‹€λ₯Έ Entity μΈμŠ€ν„΄μŠ€μ™€ λͺ‡ 개의 관계λ₯Ό 맺을 수 μžˆλŠ”μ§€ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  • μ°¨μˆ˜μ„±μ˜ μ’…λ₯˜:

    • 1:1 (μΌλŒ€μΌ): 두 μ‹€μ²΄μ˜ μΈμŠ€ν„΄μŠ€κ°€ μ„œλ‘œ ν•˜λ‚˜μ”©λ§Œ λŒ€μ‘λ˜λŠ” 경우.

      • 예: '직원'κ³Ό '사원증'의 κ΄€κ³„λŠ” 1:1일 수 μžˆμŠ΅λ‹ˆλ‹€. 각 직원은 ν•˜λ‚˜μ˜ μ‚¬μ›μ¦λ§Œ 가지고, 사원증은 ν•œ μ§μ›μ—κ²Œλ§Œ λŒ€μ‘λ©λ‹ˆλ‹€.
    • 1:N (μΌλŒ€λ‹€): ν•œ μ‹€μ²΄μ˜ μΈμŠ€ν„΄μŠ€κ°€ λ‹€λ₯Έ μ‹€μ²΄μ˜ μ—¬λŸ¬ μΈμŠ€ν„΄μŠ€μ™€ 연결될 수 μžˆλŠ” 경우.

      • 예: '고객'κ³Ό 'μ£Όλ¬Έ' κ°„μ˜ κ΄€κ³„λŠ” 1:Nμž…λ‹ˆλ‹€. ν•œ 고객은 μ—¬λŸ¬ 주문을 ν•  수 μžˆμ§€λ§Œ, 각 주문은 ν•œ κ³ κ°μ—λ§Œ μ†ν•©λ‹ˆλ‹€.
    • N:N (λ‹€λŒ€λ‹€): 두 싀체가 μ„œλ‘œ μ—¬λŸ¬ 개의 μΈμŠ€ν„΄μŠ€μ™€ 관계λ₯Ό 맺을 수 μžˆλŠ” 경우.

      • 예: '학생'κ³Ό 'κ°•μ˜' κ°„μ˜ κ΄€κ³„λŠ” N:Nμž…λ‹ˆλ‹€. μ—¬λŸ¬ 학생이 μ—¬λŸ¬ κ°•μ˜λ₯Ό 듀을 수 있고, ν•œ κ°•μ˜μ—λŠ” μ—¬λŸ¬ 학생이 μ°Έμ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

3. 선택성(Optionality)을 ν‘œμ‹œ βœ…

선택성(Optionality)은 두 Entity κ°„μ˜ 관계가 ν•„μˆ˜μΈμ§€, 선택적인지 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  • ν•„μˆ˜(Mandatory): 관계가 λ°˜λ“œμ‹œ 성립해야 ν•˜λŠ” 경우.
    • 예: 'μ£Όλ¬Έ'은 λ°˜λ“œμ‹œ '고객'에 μ˜ν•΄ μƒμ„±λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ, μ£Όλ¬Έκ³Ό 고객 κ°„μ˜ κ΄€κ³„λŠ” ν•„μˆ˜μž…λ‹ˆλ‹€.
  • 선택적(Optional): 관계가 μ„±λ¦½λ˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλŠ” 경우.
    • 예: '고객'은 λ°˜λ“œμ‹œ 주문을 ν•  ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ, 고객과 μ£Όλ¬Έ κ°„μ˜ κ΄€κ³„λŠ” 선택적일 수 μžˆμŠ΅λ‹ˆλ‹€.

선택성 μ„€μ • 방법:

  • 업무 κ·œμΉ™μ— 따라 선택성을 λ¨Όμ € νŒλ‹¨ν•©λ‹ˆλ‹€.
  • 관계가 항상 성립해야 ν•˜λŠ”μ§€, λ˜λŠ” μ„±λ¦½λ˜μ§€ μ•Šμ•„λ„ λ˜λŠ” κ²½μš°κ°€ μžˆλŠ”μ§€ κ³ λ €ν•©λ‹ˆλ‹€.
  • 각 Entityμ—μ„œ μ–‘μͺ½ λ°©ν–₯으둜 관계λ₯Ό μ‘°μ‚¬ν•˜μ—¬ 선택성을 μ„€μ •ν•©λ‹ˆλ‹€.
    • 예: 고객은 주문을 ν•˜μ§€ μ•Šμ•„λ„ λ˜μ§€λ§Œ, 주문은 λ°˜λ“œμ‹œ 고객에 μ˜ν•΄ μƒμ„±λ˜μ–΄μ•Ό ν•˜λŠ” 경우, 고객과 μ£Όλ¬Έ κ°„μ˜ 선택성은 λ‹€λ₯Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

논리적 λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§ πŸ› οΈ

논리적 λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ€ κ°œλ…μ  λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ—μ„œ μ •μ˜λœ ER-Diagram을 μ‹€μ œ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(RDBMS)μ—μ„œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ κ΅¬μ²΄ν™”ν•˜λŠ” κ³Όμ •μ΄μ—μš”. 이 λ‹¨κ³„μ—μ„œλŠ” ERDλ₯Ό ν…Œμ΄λΈ”λ‘œ λ³€ν™˜ν•˜κ³ , μŠ€ν‚€λ§ˆ 섀계λ₯Ό 톡해 데이터 ꡬ쑰λ₯Ό μ„Έλ°€ν•˜κ²Œ λ‹€λ“¬μŠ΅λ‹ˆλ‹€. λ˜ν•œ, 데이터 μ •κ·œν™”(Normalization)λ₯Ό 톡해 쀑볡을 μ΅œμ†Œν™”ν•˜κ³ , λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 μœ μ§€ν•©λ‹ˆλ‹€.


논리적 λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ˜ μ£Όμš” κ°œλ… πŸ’‘

  1. κ°œλ…μ  λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ—μ„œ μ •μ˜λœ ER-Diagram πŸ—ΊοΈ

    • κ°œλ…μ  λͺ¨λΈλ§μ—μ„œλŠ” ν˜„μ‹€ μ„Έκ³„μ˜ 싀체(Entity)와 κ·Έλ“€ κ°„μ˜ 관계(Relationship)λ₯Ό μΆ”μƒμ μœΌλ‘œ ν‘œν˜„ν•œ ERDλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.
    • ERDλŠ” 싀체, 속성, 관계λ₯Ό μ‹œκ°μ μœΌλ‘œ ν‘œν˜„ν•œ λͺ¨λΈλ‘œ, 논리적 λͺ¨λΈλ§ λ‹¨κ³„μ—μ„œλŠ” 이λ₯Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.
  2. Mapping Rule 적용 πŸ”„

    • Mapping Rule은 ERD의 μš”μ†Œλ₯Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰에 맞게 λ³€ν™˜ν•˜λŠ” κ·œμΉ™μ΄μ—μš”.
    • 각 싀체(Entity)λŠ” ν…Œμ΄λΈ”(Table)둜, 속성(Attribute)은 컬럼(Column)으둜, 관계(Relationship)λŠ” μ™Έλž˜ν‚€(Foreign Key)둜 λ³€ν™˜λ©λ‹ˆλ‹€.
    • μ£Όμš” Mapping Rule:
      • Entity -> Table: 싀체(Entity)λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ”λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.
      • Attribute -> Column: 속성(Attribute)은 ν…Œμ΄λΈ”μ˜ 컬럼으둜 λ³€ν™˜λ©λ‹ˆλ‹€.
      • Relationship -> Foreign Key: 싀체 κ°„μ˜ κ΄€κ³„λŠ” μ™Έλž˜ν‚€λ₯Ό 톡해 μ—°κ²°λ˜λ©°, λ°μ΄ν„°μ˜ μ°Έμ‘° 무결성을 μœ μ§€ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€.

    μ˜ˆμ‹œ:

    • '고객'κ³Ό 'μ£Όλ¬Έ'이 1:N 관계인 경우, 고객 ν…Œμ΄λΈ”κ³Ό μ£Όλ¬Έ ν…Œμ΄λΈ”μ„ λ§Œλ“€κ³ , μ£Όλ¬Έ ν…Œμ΄λΈ”μ— 고객 IDλ₯Ό μ™Έλž˜ν‚€λ‘œ μΆ”κ°€ν•˜μ—¬ 두 ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. μ •κ·œν™”(Normalization) βš™οΈ

    • μ •κ·œν™”λŠ” 데이터λ₯Ό 쀑볡 없이 μ €μž₯ν•˜κ³ , 데이터 무결성을 μœ μ§€ν•˜κΈ° μœ„ν•œ κ³Όμ •μž…λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 κ°œμ„ ν•˜κ³  비일관성 문제λ₯Ό λ°©μ§€ν•˜λŠ” 데 μ€‘μš”ν•œ 역할을 ν•˜μ£ .
    • μ •κ·œν™”μ˜ λͺ©μ μ€ 데이터 쀑볡을 μ΅œμ†Œν™”ν•˜κ³ , 데이터 λ³€κ²½ μž‘μ—…(μ—…λ°μ΄νŠΈ, μ‚­μ œ, μ‚½μž…)μ—μ„œ λ°œμƒν•  수 μžˆλŠ” 비일관성 문제λ₯Ό λ°©μ§€ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

    μ •κ·œν™” κ³Όμ •:

    • 제1μ •κ·œν˜•(1NF): 각 μ»¬λŸΌμ€ 단일 값을 κ°€μ Έμ•Ό ν•΄μš”. μ—¬λŸ¬ 값을 μ»¬λŸΌμ— μ €μž₯ν•˜μ§€ μ•Šκ³ , λ°μ΄ν„°λŠ” μ›μžμ„±μ„ κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.
    • 제2μ •κ·œν˜•(2NF): 제1μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜λ©΄μ„œ, κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ λͺ¨λ“  속성이 κΈ°λ³Έν‚€ 전체에 λŒ€ν•΄ μ™„μ „ ν•¨μˆ˜μ  쒅속을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.
    • 제3μ •κ·œν˜•(3NF): 제2μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜λ©΄μ„œ, κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성듀이 이행적 쒅속 관계에 μžˆμ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

    μ •κ·œν™” μ˜ˆμ‹œ:

    • 1NF: 'μ£Όλ¬Έ' ν…Œμ΄λΈ”μ—μ„œ 'μ œν’ˆ' μ»¬λŸΌμ— μ—¬λŸ¬ μ œν’ˆμ„ μ €μž₯ν•˜λŠ” λŒ€μ‹ , 각 주문에 λŒ€ν•΄ ν•˜λ‚˜μ˜ μ œν’ˆλ§Œ 기둝.
    • 2NF: 'μ£Όλ¬Έ' ν…Œμ΄λΈ”μ—μ„œ 'μ£Όλ¬Έ 번호'둜 주문을 κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜κ³ , '고객 ID'λŠ” ν•΄λ‹Ή 주문에 λŒ€ν•΄ μ™„μ „ν•˜κ²Œ μ’…μ†λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
    • 3NF: '고객' ν…Œμ΄λΈ”μ—μ„œ 고객의 μ£Όμ†Œμ™€ μ „ν™”λ²ˆν˜Έκ°€ μ„œλ‘œ 쒅속적이지 μ•Šκ²Œ 뢄리.

    주의:

    • κ³Όλ„ν•œ μ •κ·œν™”λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ„±λŠ₯을 μ €ν•˜μ‹œν‚¬ 수 μžˆμœΌλ―€λ‘œ, μ‹€λ¬΄μ—μ„œλŠ” μ μ ˆν•œ μˆ˜μ€€μ—μ„œ μ •κ·œν™”λ₯Ό μ μš©ν•˜λŠ” 것이 μ€‘μš”ν•΄μš”.

κΈ°λ³Έν‚€(Primary Key) πŸ”‘

  • 후보킀 μ€‘μ—μ„œ μ„ μ •λœ μ£Ό ν‚€: 후보킀 μ€‘μ—μ„œ ν•œ 개λ₯Ό μ„ νƒν•˜μ—¬ 각 λ ˆμ½”λ“œλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • Null 값을 κ°€μ§ˆ 수 μ—†μŒ: κΈ°λ³Έν‚€λŠ” λ ˆμ½”λ“œλ₯Ό κ³ μœ ν•˜κ²Œ 식별해야 ν•˜λ―€λ‘œ, λΉ„μ–΄μžˆλŠ” κ°’(Null)을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • 쀑볡 λΆˆκ°€: κΈ°λ³Έν‚€λŠ” 각 λ ˆμ½”λ“œκ°€ κ³ μœ ν•΄μ•Ό ν•˜λ―€λ‘œ, λ™μΌν•œ 값이 μ€‘λ³΅λ˜μ–΄ μ €μž₯될 수 μ—†μŠ΅λ‹ˆλ‹€.

μ°Έμ‘°ν‚€, μ™Έλž˜ν‚€ (Foreign Key) πŸ”—

  • 관계 섀정을 μœ„ν•œ ν‚€: 두 μ—”ν„°ν‹°(Entity) 간에 관계λ₯Ό 맺을 λ•Œ, ν•œ μ—”ν„°ν‹°μ˜ 속성(Attribute)을 λ‹€λ₯Έ μ—”ν„°ν‹°μ—μ„œ μ°Έμ‘°ν•˜λŠ” ν‚€λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.
  • λ¦΄λ ˆμ΄μ…˜ κ°„μ˜ μ°Έμ‘°: μ°Έμ‘°ν‚€λŠ” λ¦΄λ ˆμ΄μ…˜(ν…Œμ΄λΈ”) κ°„μ˜ 연결을 μœ μ§€ν•˜λ©°, 데이터 무결성을 보μž₯ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, 'μ£Όλ¬Έ' ν…Œμ΄λΈ”μ˜ 고객 IDλŠ” '고객' ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€λ₯Ό μ°Έμ‘°ν•˜λŠ” μ™Έλž˜ν‚€κ°€ 될 수 μžˆμŠ΅λ‹ˆλ‹€.

Mapping Rule 🧩

Mapping Rule은 κ°œλ…μ  λͺ¨λΈλ§μ—μ„œ λ„μΆœλœ 개체(Entity)와 관계(Relationship)λ₯Ό μ‹€μ œ ν…Œμ΄λΈ”κ³Ό 컬럼으둜 λ³€ν™˜ν•˜λŠ” κ·œμΉ™μž…λ‹ˆλ‹€.

  • λ‹¨μˆœ μ—”ν„°ν‹° -> ν…Œμ΄λΈ”(Table): 개체(Entity)λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ ν…Œμ΄λΈ”λ‘œ λ³€ν™˜λ©λ‹ˆλ‹€.
  • 속성(Attribute) -> 컬럼(Column): 개체 λ‚΄μ˜ 속성은 λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ˜ 컬럼으둜 λ³€ν™˜λ©λ‹ˆλ‹€.
  • μ‹λ³„μž(Identifier) -> κΈ°λ³Έν‚€(Primary Key): 개체의 μ‹λ³„μžλŠ” ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€λ‘œ μ„€μ •λ©λ‹ˆλ‹€.
  • 관계(Relationship) -> μ™Έλž˜ν‚€(Foreign Key): 개체 κ°„μ˜ κ΄€κ³„λŠ” μ°Έμ‘°ν‚€(μ™Έλž˜ν‚€)λ₯Ό 톡해 ν…Œμ΄λΈ” κ°„μ˜ μ—°κ²°λ‘œ κ΅¬ν˜„λ©λ‹ˆλ‹€.

1:1 (μΌλŒ€μΌ) 관계 μ˜ˆμ‹œ πŸ‘₯

사원(Employee) ν…Œμ΄λΈ”

Employee_IDNameDepartment
1John DoeHR
2Jane SmithIT
3Alice BrownMarketing

사원증(Badge) ν…Œμ΄λΈ”

Badge_IDEmployee_ID (FK)Issue_Date
10112023-01-15
10222023-02-01
10332023-03-10
  • 1:1 관계 μ„€λͺ…: 각 사원(Employee)은 ν•˜λ‚˜μ˜ 사원증(Badge)을 가지고 있으며, Employee_IDκ°€ Badge ν…Œμ΄λΈ”μ—μ„œ μ™Έλž˜ν‚€(Foreign Key)둜 μ‚¬μš©λ©λ‹ˆλ‹€. 즉, 각 EmployeeλŠ” ν•˜λ‚˜μ˜ Badge만 κ°€μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. μΌλŒ€μΌ κ΄€κ³„λŠ” μ‚¬μ›μ˜ κ³ μœ ν•œ μ‹ λΆ„ 증λͺ…κ³Ό 같은 정보에 μ ν•©ν•©λ‹ˆλ‹€.

1:N (μΌλŒ€λ‹€) 관계 μ˜ˆμ‹œ πŸ‘€βž‘οΈπŸ“¦

고객(Customer) ν…Œμ΄λΈ”

Customer_IDNamePhone
1John Doe010-1234-5678
2Jane Smith010-9876-5432
3Alice Brown010-5555-7777

μ£Όλ¬Έ(Order) ν…Œμ΄λΈ”

Order_IDCustomer_ID (FK)Order_Date
100112024-01-10
100222024-01-11
100312024-01-12
100432024-01-13
  • 1:N 관계 μ„€λͺ…: ν•œ 고객(Customer)은 μ—¬λŸ¬ 개의 μ£Όλ¬Έ(Order)을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Customer_IDκ°€ μ£Όλ¬Έ ν…Œμ΄λΈ”μ—μ„œ μ™Έλž˜ν‚€(Foreign Key)둜 μ‚¬μš©λ˜μ–΄, 각 주문이 μ–΄λ–€ 고객에 μ˜ν•΄ λ°œμƒν–ˆλŠ”μ§€ λͺ…μ‹œλ©λ‹ˆλ‹€. μ΄λŠ” 고객이 μ—¬λŸ¬ 번 ꡬ맀할 수 μžˆλŠ” 상황에 μ ν•©ν•œ 데이터 κ΅¬μ‘°μž…λ‹ˆλ‹€.

M:N (λ‹€λŒ€λ‹€) 관계 μ˜ˆμ‹œ πŸ‘©β€πŸŽ“β†”οΈπŸ“š

학생(Student) ν…Œμ΄λΈ”

Student_IDName
1John Doe
2Jane Smith
3Alice Brown

κ°•μ˜(Course) ν…Œμ΄λΈ”

Course_IDCourse_Name
101Database Design
102Data Structures
103Operating Systems

학생-κ°•μ˜(Student_Course) ꡐ차 ν…Œμ΄λΈ”

Student_ID (FK)Course_ID (FK)
1101
1102
2101
3103
3102
  • M:N 관계 μ„€λͺ…: μ—¬λŸ¬ 학생(Student)이 μ—¬λŸ¬ κ°•μ˜(Course)λ₯Ό μˆ˜κ°•ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ ꡐ차 ν…Œμ΄λΈ”(Student_Course)이 μ‚¬μš©λ˜λ©°, 볡합킀(Student_ID, Course_ID)λ₯Ό 톡해 M:N 관계가 μ„€μ •λ©λ‹ˆλ‹€. 이λ₯Ό 톡해 학생과 κ°•μ˜ κ°„μ˜ λ‹€λŒ€λ‹€ 관계λ₯Ό κ΄€λ¦¬ν•˜λ©°, κ°•μ˜λ₯Ό λ“£λŠ” μ—¬λŸ¬ 학생과, μ—¬λŸ¬ κ°•μ˜λ₯Ό λ“£λŠ” 학생듀을 μ‰½κ²Œ 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ •κ·œν™”(Normalization) πŸ› οΈ

μ •κ·œν™”λŠ” Attribute(속성) 간에 μ‘΄μž¬ν•˜λŠ” ν•¨μˆ˜μ  쒅속성을 λΆ„μ„ν•˜μ—¬, κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆλ₯Ό 더 효율적이고 일관성 있게 μ •μ œν•΄ λ‚˜κ°€λŠ” 일련의 κ³Όμ •μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λ°μ΄ν„°μ˜ 쀑볡을 쀄이고, 속성듀이 본래의 μœ„μΉ˜μ— 적절히 λ°°μΉ˜λ˜λ„λ‘ ν•©λ‹ˆλ‹€.

μ •κ·œν™”μ˜ μ£Όμš” λͺ©μ  🎯

  1. 데이터 쀑볡 제거: 데이터 쀑볡을 μ΅œμ†Œν™”ν•˜μ—¬ μ €μž₯ 곡간을 μ ˆμ•½ν•˜κ³ , 데이터 λ³€κ²½ μ‹œ λ°œμƒν•  수 μžˆλŠ” 비일관성 문제λ₯Ό λ°©μ§€ν•©λ‹ˆλ‹€.
  2. 데이터 무결성 μœ μ§€: μ •κ·œν™”λ₯Ό 톡해 λ°μ΄ν„°μ˜ μ •ν™•μ„±κ³Ό 일관성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  3. 속성 μœ„μΉ˜ μ΅œμ ν™”: 속성듀이 ν•΄λ‹Ή 싀체(Entity) λ˜λŠ” ν…Œμ΄λΈ”μ— μ˜¬λ°”λ₯΄κ²Œ λ°°μΉ˜λ˜λ„λ‘ ν•˜μ—¬ 관리와 쑰회 νš¨μœ¨μ„±μ„ λ†’μž…λ‹ˆλ‹€.

μ •κ·œν™”λŠ” μ—¬λŸ¬ λ‹¨κ³„λ‘œ λ‚˜λ‰˜λ©°, 각각의 λ‹¨κ³„μ—μ„œ 데이터 ꡬ쑰가 λ”μš± 정ꡐ해지고, 쀑볡이 μ œκ±°λ©λ‹ˆλ‹€. 각 λ‹¨κ³„λŠ” μƒμœ„ λ‹¨κ³„μ˜ μš”κ΅¬ 사항을 λ§Œμ‘±ν•˜λ©΄μ„œ 더 κ°•λ ₯ν•œ 데이터 ꡬ쑰λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.


제1μ •κ·œν˜•(First Normal Form, 1NF) 🌟

제1μ •κ·œν˜•(1NF)은 λ°μ΄ν„°λ² μ΄μŠ€ μ •κ·œν™”μ˜ 첫 번째 λ‹¨κ³„λ‘œ, λͺ¨λ“  속성값이 μ›μžκ°’(Atomic Value)이어야 ν•˜λ©°, μ€‘λ³΅λœ λ°μ΄ν„°λ‚˜ λ°˜λ³΅λ˜λŠ” κ·Έλ£Ή 속성이 제거된 μƒνƒœλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 제1μ •κ·œν˜•μ—μ„œλŠ” 각 컬럼이 λΆ„ν•΄ν•  수 μ—†λŠ” 단일 값을 μ €μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.


제1μ •κ·œν˜•μ—μ„œ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” 문제점 ❗

  1. λΆ€μˆ˜μ μΈ 데이터 쀑볡: κΈ°λ³Έ 데이터와 반볡적인 데이터가 ν•¨κ»˜ μ €μž₯λ˜λ©΄μ„œ 데이터 쀑볡이 λ°œμƒν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, ν•˜λ‚˜μ˜ μ»¬λŸΌμ— μ—¬λŸ¬ 값이 μ €μž₯될 경우 데이터가 λΆˆν•„μš”ν•˜κ²Œ μ€‘λ³΅λ©λ‹ˆλ‹€.
  2. 반볡 집합: 같은 μœ ν˜•μ˜ 데이터λ₯Ό μ—¬λŸ¬ μ»¬λŸΌμ— λ‚˜λˆ„μ–΄ μ €μž₯ν•˜λ©΄ λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•˜κΈ° μ–΄λ €μš°λ©°, μ€‘λ³΅λœ 데이터가 λ§Žμ•„μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄κ²° 방법 πŸ’‘

  • λ°˜λ³΅λ˜λŠ” κ·Έλ£Ή 속성 제거: 같은 μ„±κ²©μ˜ 데이터가 μ—¬λŸ¬ μ»¬λŸΌμ— λ‚˜λˆ„μ–΄ μ €μž₯λ˜λŠ” 상황을 ν”Όν•˜κΈ° μœ„ν•΄ μƒˆλ‘œμš΄ ν…Œμ΄λΈ”μ„ 생성해 데이터λ₯Ό λΆ„λ¦¬ν•©λ‹ˆλ‹€.
  • μƒˆλ‘œμš΄ ν…Œμ΄λΈ” 생성: λ°˜λ³΅λ˜λŠ” 데이터λ₯Ό λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜κ³ , κΈ°λ³Έ ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€λ₯Ό μ΄μš©ν•΄ 두 ν…Œμ΄λΈ” 간에 1:N 관계λ₯Ό ν˜•μ„±ν•©λ‹ˆλ‹€.

제1μ •κ·œν˜•μ˜ νŠΉμ§• 🎯

  • λ°˜λ³΅λ˜λŠ” κ·Έλ£Ή 속성 제거: λ™μΌν•œ μ„±κ²©μ˜ 데이터가 μ—¬λŸ¬ μ»¬λŸΌμ— λ‚˜μ—΄λ˜μ§€ μ•Šλ„λ‘ μ œκ±°ν•©λ‹ˆλ‹€.
  • μ›μžκ°’μœΌλ‘œ ꡬ성: 각 컬럼의 값은 더 이상 λΆ„ν•΄ν•  수 μ—†λŠ” 단일 값을 κ°€μ Έμ•Ό ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ πŸ”

λΉ„μ •κ·œ λ¦΄λ ˆμ΄μ…˜ (1NF 적용 μ „)

학생과 그듀이 μˆ˜κ°•ν•˜λŠ” κ³Όλͺ©μ„ λΉ„μ •κ·œ λ¦΄λ ˆμ΄μ…˜μœΌλ‘œ λ‚˜νƒ€λ‚Έ ν…Œμ΄λΈ”μž…λ‹ˆλ‹€.

학생_ID학생λͺ…κ³Όλͺ©1κ³Όλͺ©2κ³Όλͺ©3
1Johnμˆ˜ν•™κ³Όν•™μ˜μ–΄
2Aliceμˆ˜ν•™κ³Όν•™NULL
3Bobμ˜μ–΄NULLNULL

문제점 🚩

  • μ€‘λ³΅λœ 데이터: κ³Όλͺ©μ΄ μ—¬λŸ¬ 개일 λ•Œ 각 학생에 λŒ€ν•΄ μ€‘λ³΅λœ 정보가 μ €μž₯λ©λ‹ˆλ‹€.
  • 반볡 집합: ν•œ 학생이 μ—¬λŸ¬ κ³Όλͺ©μ„ λ“£λŠ” 경우, λ™μΌν•œ 데이터가 반볡적으둜 μ—¬λŸ¬ μ»¬λŸΌμ— λ‚˜μ—΄λ©λ‹ˆλ‹€.

제1μ •κ·œν˜• 적용 ν›„ πŸ› οΈ

데이터λ₯Ό μ›μžκ°’μœΌλ‘œ λ§Œλ“€κΈ° μœ„ν•΄, 학생 정보와 μˆ˜κ°• κ³Όλͺ©μ„ λΆ„λ¦¬ν•˜μ—¬ 두 개의 ν…Œμ΄λΈ”λ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.

1. 학생 ν…Œμ΄λΈ”
학생_ID학생λͺ…
1John
2Alice
3Bob
2. 학생_κ³Όλͺ© ν…Œμ΄λΈ”
학생_IDκ³Όλͺ©
1μˆ˜ν•™
1κ³Όν•™
1μ˜μ–΄
2μˆ˜ν•™
2κ³Όν•™
3μ˜μ–΄

제1μ •κ·œν˜• 적용 κ²°κ³Ό βœ…

  • μ€‘λ³΅λœ 데이터 제거: μ€‘λ³΅λ˜λŠ” κ³Όλͺ© 정보λ₯Ό 학생_κ³Όλͺ© ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ 효율적인 데이터 μ €μž₯ ꡬ쑰λ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€.
  • 반볡 집합 제거: 더 이상 같은 μ„±κ²©μ˜ 데이터λ₯Ό μ—¬λŸ¬ μ»¬λŸΌμ— λ‚˜λˆ„μ–΄ μ €μž₯ν•˜μ§€ μ•Šκ³ , 각 데이터λ₯Ό μ›μžκ°’μœΌλ‘œ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  • 1:N 관계 ν˜•μ„±: 학생 ν…Œμ΄λΈ”κ³Ό 학생_κ³Όλͺ© ν…Œμ΄λΈ” 간에 1:N 관계가 μ„±λ¦½λ˜μ—ˆμŠ΅λ‹ˆλ‹€. ν•œ λͺ…μ˜ 학생이 μ—¬λŸ¬ κ³Όλͺ©μ„ μˆ˜κ°•ν•  수 μžˆμœΌλ―€λ‘œ 두 ν…Œμ΄λΈ”μ€ 1:N κ΄€κ³„μž…λ‹ˆλ‹€.

제2μ •κ·œν˜•(Second Normal Form, 2NF) 🌟

제2μ •κ·œν˜•(2NF)은 제1μ •κ·œν˜•(1NF)을 λ§Œμ‘±ν•˜λ©΄μ„œ, λΆ€λΆ„ ν•¨μˆ˜ 쒅속성을 μ œκ±°ν•œ μƒνƒœμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ λΆ€λΆ„ ν•¨μˆ˜ μ’…μ†μ„±μ΄λž€ 볡합킀(Composite Primary Key)의 μΌλΆ€μ—λ§Œ μ’…μ†λœ 속성을 λ§ν•©λ‹ˆλ‹€. 제2μ •κ·œν˜•μ—μ„œλŠ” μ΄λŸ¬ν•œ λΆ€λΆ„ ν•¨μˆ˜ 쒅속성을 μ œκ±°ν•˜μ—¬ λͺ¨λ“  속성이 κΈ°λ³Έν‚€ 전체에 μ™„μ „ μ’…μ†λ˜λ„λ‘ λ§Œλ“­λ‹ˆλ‹€.


제2μ •κ·œν˜•μ—μ„œ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” 문제점 πŸ› οΈ

  1. λΆ€λΆ„ ν•¨μˆ˜ 쒅속성: ν…Œμ΄λΈ”μ˜ κΈ°λ³Έν‚€κ°€ μ—¬λŸ¬ 개의 컬럼으둜 κ΅¬μ„±λœ 경우(볡합킀), κΈ°λ³Έν‚€μ˜ 일뢀 μ»¬λŸΌμ—λ§Œ μ’…μ†λœ 속성이 μ‘΄μž¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이둜 인해 데이터 쀑볡 및 관리 λΉ„νš¨μœ¨μ„±μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. λΆˆν•„μš”ν•œ 데이터 쀑볡: λ³΅ν•©ν‚€μ˜ μΌλΆ€μ—λ§Œ μ˜μ‘΄ν•˜λŠ” 속성듀은 데이터 쀑볡을 μ•ΌκΈ°ν•˜κ³ , λ³€κ²½ μ‹œ λΉ„νš¨μœ¨μ μΈ ꡬ쑰λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄κ²° 방법 πŸ’‘

  • λ³΅ν•©ν‚€μ˜ μΌλΆ€μ—λ§Œ μ’…μ†λœ 속성 제거: κΈ°λ³Έν‚€μ˜ 일뢀 μ†μ„±μ—λ§Œ μ’…μ†λœ 속성듀을 λΆ„λ¦¬ν•˜μ—¬, λͺ¨λ“  속성이 κΈ°λ³Έν‚€ 전체에 μ™„μ „ μ’…μ†λ˜λ„λ‘ ꡬ쑰λ₯Ό μž¬κ΅¬μ„±ν•©λ‹ˆλ‹€.
  • μƒˆλ‘œμš΄ ν…Œμ΄λΈ” 생성: λ³΅ν•©ν‚€μ˜ 일뢀에 μ’…μ†λœ 데이터λ₯Ό λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ 뢄리해 λΆ€λΆ„ ν•¨μˆ˜ 쒅속성을 μ œκ±°ν•˜κ³ , 효율적인 ꡬ쑰둜 λ³€ν™˜ν•©λ‹ˆλ‹€.

제2μ •κ·œν˜•μ˜ νŠΉμ§• 🎯

  • 제1μ •κ·œν˜•(1NF)을 λ§Œμ‘±ν•˜λ©΄μ„œ, κΈ°λ³Έν‚€μ˜ μΌλΆ€μ—λ§Œ μ’…μ†λœ 속성을 μ œκ±°ν•˜μ—¬ μ™„μ „ ν•¨μˆ˜ 쒅속을 λ§Œμ‘±μ‹œν‚΅λ‹ˆλ‹€.
  • 볡합킀(Composite Key)κ°€ μ‘΄μž¬ν•˜λŠ” ν…Œμ΄λΈ”μ— 주둜 적용되며, 볡합킀가 μ•„λ‹Œ κ²½μš°λŠ” 제1μ •κ·œν˜•μœΌλ‘œ μΆ©λΆ„ν•œ κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

μ˜ˆμ‹œ πŸ”

제2μ •κ·œν˜• 적용 μ „: λΉ„μ •κ·œ λ¦΄λ ˆμ΄μ…˜ (1NF μƒνƒœ)

μ•„λž˜λŠ” μ£Όλ¬Έ 정보가 ν¬ν•¨λœ ν…Œμ΄λΈ”μž…λ‹ˆλ‹€. 이 ν…Œμ΄λΈ”μ€ 볡합킀(Order_ID, Product_ID)둜 κ΅¬μ„±λ˜μ–΄ μžˆμ§€λ§Œ, 일뢀 속성(μƒν’ˆλͺ…, λ‹¨μœ„, 단가)은 Product_IDμ—λ§Œ μ’…μ†λ˜μ–΄ μžˆλŠ” μƒνƒœμž…λ‹ˆλ‹€.

Order_IDProduct_IDProduct_NameUnitPriceQuantity
10011λ…ΈνŠΈλΆλŒ€λ‹Ή1,000,0002
10012λ§ˆμš°μŠ€κ°œλ‹Ή20,0005
10021λ…ΈνŠΈλΆλŒ€λ‹Ή1,000,0001
10023ν‚€λ³΄λ“œκ°œλ‹Ή30,0003

문제점 🚩

  • λΆ€λΆ„ ν•¨μˆ˜ 쒅속성: Product_Name, Unit, PriceλŠ” Product_IDμ—λ§Œ μ’…μ†λ˜μ–΄ 있으며, Order_IDμ™€λŠ” λ¬΄κ΄€ν•©λ‹ˆλ‹€. μ΄λŠ” λΆ€λΆ„ ν•¨μˆ˜ 쒅속성을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • 데이터 쀑볡: μƒν’ˆλͺ…, λ‹¨μœ„, 단가 λ“±μ˜ 정보가 μ€‘λ³΅λ˜μ–΄ μ €μž₯되고 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ…ΈνŠΈλΆμ˜ 정보가 μ—¬λŸ¬ 주문에 반볡적으둜 기둝되고 μžˆμŠ΅λ‹ˆλ‹€.

제2μ •κ·œν˜• 적용 ν›„ πŸ› οΈ

λΆ€λΆ„ ν•¨μˆ˜ 쒅속성을 ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μƒν’ˆ 정보λ₯Ό λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 Product_IDμ—λ§Œ μ’…μ†λœ 속성듀은 Product ν…Œμ΄λΈ”λ‘œ μ΄λ™λ˜κ³ , μ£Όλ¬Έ 상세 ν…Œμ΄λΈ”μ—λŠ” κΈ°λ³Έν‚€ 전체에 μ™„μ „ μ’…μ†λœ μ†μ„±λ§Œ λ‚¨κΉλ‹ˆλ‹€.

1. μ£Όλ¬Έ 상세(Order_Detail) ν…Œμ΄λΈ”
Order_IDProduct_ID (FK)Quantity
100112
100125
100211
100233
2. μƒν’ˆ(Product) ν…Œμ΄λΈ”
Product_IDProduct_NameUnitPrice
1λ…ΈνŠΈλΆλŒ€λ‹Ή1,000,000
2λ§ˆμš°μŠ€κ°œλ‹Ή20,000
3ν‚€λ³΄λ“œκ°œλ‹Ή30,000

제2μ •κ·œν˜• 적용 κ²°κ³Ό βœ…

  • λΆ€λΆ„ ν•¨μˆ˜ 쒅속성 제거: Product_Name, Unit, PriceλŠ” 이제 Product ν…Œμ΄λΈ”μ— μ €μž₯되며, Product_ID에 μ™„μ „νžˆ μ’…μ†λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • 데이터 쀑볡 제거: μ€‘λ³΅λ˜λ˜ μƒν’ˆ μ •λ³΄λŠ” Product ν…Œμ΄λΈ”μ—μ„œ ν•œ 번만 μ €μž₯되고, μ£Όλ¬Έ μ •λ³΄λŠ” μ£Όλ¬Έ 상세 ν…Œμ΄λΈ”μ—μ„œ κ΄€λ¦¬λ©λ‹ˆλ‹€.
  • 1:N 관계 ν˜•μ„±: Order_Detail ν…Œμ΄λΈ”μ€ μ£Όλ¬Έκ³Ό μƒν’ˆ κ°„μ˜ 1:N 관계λ₯Ό μœ μ§€ν•˜λ©°, μƒν’ˆ μ •λ³΄λŠ” λ³„λ„μ˜ Product ν…Œμ΄λΈ”μ—μ„œ κ΄€λ¦¬λ©λ‹ˆλ‹€.

제3μ •κ·œν˜•(Third Normal Form, 3NF) 🌟

제3μ •κ·œν˜•(3NF)은 제2μ •κ·œν˜•(2NF)을 λ§Œμ‘±ν•˜λ©΄μ„œ, 이행적 ν•¨μˆ˜ 쒅속성(Transitive Dependency)을 μ œκ±°ν•œ μƒνƒœμž…λ‹ˆλ‹€. 이행적 ν•¨μˆ˜ μ’…μ†μ„±μ΄λž€ κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 속성이 λ‹€λ₯Έ 일반 속성에 μ’…μ†λ˜λŠ” 상황을 λ§ν•©λ‹ˆλ‹€. 제3μ •κ·œν˜•μ—μ„œλŠ” 기본킀에 μ§μ ‘μ μœΌλ‘œ μ’…μ†λ˜μ§€ μ•Šκ³ , λ‹€λ₯Έ 일반 μ»¬λŸΌμ— μ’…μ†λœ 속성을 λΆ„λ¦¬ν•˜μ—¬ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 더 κ΅¬μ‘°ν™”ν•˜κ³  쀑볡을 μ€„μž…λ‹ˆλ‹€.


제3μ •κ·œν˜•μ—μ„œ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” 문제점 πŸ› οΈ

  1. 이행적 ν•¨μˆ˜ 쒅속성: κΈ°λ³Έν‚€κ°€ μ•„λ‹Œ 컬럼이 λ‹€λ₯Έ 일반 μ»¬λŸΌμ— μ’…μ†λ˜λŠ” 경우, 데이터가 λΆˆν•„μš”ν•˜κ²Œ μ€‘λ³΅λ˜κ³  관리가 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.
  2. 데이터 쀑볡: 이행적 쒅속성을 가진 컬럼이 μ—¬λŸ¬ 번 μ€‘λ³΅λ˜μ–΄ μ €μž₯λ˜λ―€λ‘œ, λ°μ΄ν„°μ˜ λΉ„νš¨μœ¨μ μΈ κ΄€λ¦¬λ‘œ μ΄μ–΄μ§‘λ‹ˆλ‹€.

ν•΄κ²° 방법 πŸ’‘

  • 이행적 ν•¨μˆ˜ 쒅속성 제거: 기본킀에 직접 μ’…μ†λ˜μ§€ μ•Šκ³ , λ‹€λ₯Έ μ»¬λŸΌμ— μ’…μ†λœ 속성을 λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ 이행적 ν•¨μˆ˜ 쒅속성을 μ œκ±°ν•©λ‹ˆλ‹€.
  • μƒˆλ‘œμš΄ ν…Œμ΄λΈ” 생성: 이행적 쒅속 관계에 μžˆλŠ” 속성듀을 λ³„λ„λ‘œ κ΄€λ¦¬ν•˜μ—¬ κΈ°λ³Έ ν…Œμ΄λΈ”μ€ 기본킀에 직접 μ’…μ†λœ μ†μ„±λ§Œ 남기고, 쀑볡을 μ€„μž…λ‹ˆλ‹€.

제3μ •κ·œν˜•μ˜ νŠΉμ§• 🎯

  • 기본킀에 μ§μ ‘μ μœΌλ‘œ ν•¨μˆ˜ 쒅속: λͺ¨λ“  μ»¬λŸΌμ€ 기본킀에 μ§μ ‘μ μœΌλ‘œ μ’…μ†λ˜μ–΄μ•Ό ν•˜λ©°, λ‹€λ₯Έ μ»¬λŸΌμ— μ˜μ‘΄ν•˜λŠ” 이행적 쒅속성을 μ œκ±°ν•©λ‹ˆλ‹€.
  • 제2μ •κ·œν˜•(2NF)을 λ§Œμ‘±ν•˜λ©΄μ„œ 이행적 쒅속성을 μ œκ±°ν•˜μ—¬ 데이터 쀑볡을 μ΅œμ†Œν™”ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ πŸ”

제3μ •κ·œν˜• 적용 μ „: 제2μ •κ·œν˜• μƒνƒœ

λ‹€μŒμ€ μ£Όλ¬Έ 정보λ₯Ό ν¬ν•¨ν•œ ν…Œμ΄λΈ”μž…λ‹ˆλ‹€. 이 ν…Œμ΄λΈ”μ€ 제2μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜μ§€λ§Œ, Shipping_ZipCodeλŠ” Shipping_Address에 μ’…μ†λ˜μ–΄ μžˆμœΌλ―€λ‘œ 이행적 쒅속성이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

Order_IDCustomer_IDShipping_AddressShipping_ZipCodeOrder_Date
10011μ„œμšΈμ‹œ 강남ꡬ123452024-01-10
10022μ„œμšΈμ‹œ 강동ꡬ543212024-01-11
10031μ„œμšΈμ‹œ 강남ꡬ123452024-01-12
10043μ„œμšΈμ‹œ 쀑ꡬ678902024-01-13

문제점 🚩

  • 이행적 ν•¨μˆ˜ 쒅속성: Shipping_ZipCodeλŠ” Shipping_Address에 μ’…μ†λ˜μ–΄ μžˆμ–΄, 같은 μ£Όμ†Œμ— λŒ€ν•œ μš°νŽΈλ²ˆν˜Έκ°€ 반볡 μ €μž₯되고 μžˆμŠ΅λ‹ˆλ‹€.
  • 데이터 쀑볡: λ™μΌν•œ μ£Όμ†Œμ˜ 경우 μš°νŽΈλ²ˆν˜Έκ°€ 반볡 μ €μž₯λ˜λ―€λ‘œ, 데이터 쀑볡이 λ°œμƒν•˜κ³  κ΄€λ¦¬μ˜ λΉ„νš¨μœ¨μ„±μ΄ μƒκΉλ‹ˆλ‹€.

제3μ •κ·œν˜• 적용 ν›„ πŸ› οΈ

이행적 ν•¨μˆ˜ 쒅속성을 μ œκ±°ν•˜κΈ° μœ„ν•΄, Shipping_Address와 Shipping_ZipCodeλ₯Ό 배솑지(Shipping) ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€. Order ν…Œμ΄λΈ”μ€ Shipping_IDλ₯Ό μ™Έλž˜ν‚€λ‘œ μ°Έμ‘°ν•˜μ—¬ 배솑 정보λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.

1. μ£Όλ¬Έ(Order) ν…Œμ΄λΈ”
Order_IDCustomer_IDShipping_ID (FK)Order_Date
1001112024-01-10
1002222024-01-11
1003112024-01-12
1004332024-01-13
2. 배솑지(Shipping) ν…Œμ΄λΈ”
Shipping_IDShipping_AddressShipping_ZipCode
1μ„œμšΈμ‹œ 강남ꡬ12345
2μ„œμšΈμ‹œ 강동ꡬ54321
3μ„œμšΈμ‹œ 쀑ꡬ67890

제3μ •κ·œν˜• 적용 κ²°κ³Ό βœ…

  • 이행적 ν•¨μˆ˜ 쒅속성 제거: Shipping_ZipCodeκ°€ 더 이상 Shipping_Address에 μ’…μ†λ˜μ§€ μ•Šκ³ , λ³„λ„μ˜ 배솑지(Shipping) ν…Œμ΄λΈ”μ—μ„œ κ΄€λ¦¬λ©λ‹ˆλ‹€.
  • 데이터 쀑볡 제거: λ™μΌν•œ μ£Όμ†Œμ— λŒ€ν•œ μš°νŽΈλ²ˆν˜Έκ°€ 더 이상 μ€‘λ³΅λ˜μ§€ μ•Šκ³ , μ€‘λ³΅λœ 데이터가 μ‚¬λΌμ§‘λ‹ˆλ‹€.
  • 관계 μ„€μ •: Order ν…Œμ΄λΈ”κ³Ό Shipping ν…Œμ΄λΈ” 간에 1:N 관계λ₯Ό ν˜•μ„±ν•˜μ—¬, μ—¬λŸ¬ 주문이 λ™μΌν•œ 배솑지λ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

BCNF (Boyce-Codd Normal Form) 🌟

BCNF (Boyce-Codd Normal Form)λŠ” 제3μ •κ·œν˜•(3NF)을 ν™•μž₯ν•œ μ •κ·œν˜•μž…λ‹ˆλ‹€. 제3μ •κ·œν˜•μ΄ ν•΄κ²°ν•˜μ§€ λͺ»ν•˜λŠ” 후보킀가 μ•„λ‹Œ κ²°μ •μžλ‘œ μΈν•œ 쒅속성 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ„μž…λ˜μ—ˆμŠ΅λ‹ˆλ‹€. BCNFλŠ” λͺ¨λ“  κ²°μ •μž(Determinant)κ°€ 후보킀여야 ν•œλ‹€λŠ” κ·œμΉ™μ„ 톡해, λ°μ΄ν„°λ² μ΄μŠ€ 쒅속성을 더 κ°•ν•˜κ²Œ μ œν•œν•˜μ—¬ 데이터 무결성을 보μž₯ν•©λ‹ˆλ‹€.


BCNFμ—μ„œ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” 문제점 πŸ› οΈ

  1. κ²°μ •μž(Determinant): ν…Œμ΄λΈ”μ—μ„œ ν•˜λ‚˜μ˜ 속성이 λ‹€λ₯Έ μ†μ„±μ˜ 값을 κ²°μ •ν•˜λŠ” 속성을 κ²°μ •μžλΌκ³  ν•©λ‹ˆλ‹€. κΈ°λ³Έν‚€λŠ” κ²°μ •μžμ˜ ν•œ 예둜, λ‹€λ₯Έ 컬럼의 값을 κ²°μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. 후보킀가 μ•„λ‹Œ κ²°μ •μž: ν…Œμ΄λΈ”μ—μ„œ 후보킀가 μ•„λ‹Œ 속성이 κ²°μ •μž 역할을 ν•˜λ©΄, 데이터 무결성 λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” 데이터 쀑볡을 μ΄ˆλž˜ν•˜κ³  λΉ„νš¨μœ¨μ μΈ ꡬ쑰둜 μ΄μ–΄μ§‘λ‹ˆλ‹€.
  3. 제3μ •κ·œν˜•μ˜ ν•œκ³„: 제3μ •κ·œν˜•μ€ 이행적 쒅속성을 ν•΄κ²°ν•˜μ§€λ§Œ, 후보킀가 μ•„λ‹Œ κ²°μ •μžμ— μ˜ν•œ 쒅속성 λ¬Έμ œλŠ” ν•΄κ²°ν•˜μ§€ λͺ»ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

ν•΄κ²° 방법 πŸ’‘

  • 후보킀가 μ•„λ‹Œ κ²°μ •μžλ₯Ό 제거: 후보킀가 μ•„λ‹Œ 속성이 κ²°μ •μž 역할을 ν•  경우, ν•΄λ‹Ή 속성을 λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ ꡬ쑰λ₯Ό μž¬μ„€κ³„ν•©λ‹ˆλ‹€.

BCNF의 νŠΉμ§• 🎯

  • λͺ¨λ“  κ²°μ •μžλŠ” 후보킀여야 함: 즉, ν…Œμ΄λΈ” λ‚΄μ—μ„œ λ‹€λ₯Έ 속성을 κ²°μ •ν•˜λŠ” λͺ¨λ“  속성은 λ°˜λ“œμ‹œ 후보킀여야 ν•˜λ©°, 후보킀가 μ•„λ‹Œ κ²°μ •μžλŠ” μ œκ±°λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • 제3μ •κ·œν˜•λ³΄λ‹€ 더 μ—„κ²©ν•œ 데이터 무결성 보μž₯: BCNFλŠ” 제3μ •κ·œν˜•λ³΄λ‹€ 더 κ°•ν•œ μ œμ•½μ„ 두어 λ°μ΄ν„°λ² μ΄μŠ€μ˜ 무결성을 보μž₯ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ πŸ”

BCNF 적용 μ „: 제3μ •κ·œν˜• μƒνƒœ

λ‹€μŒμ€ 제3μ •κ·œν˜•μ„ λ§Œμ‘±ν•˜λŠ” ν…Œμ΄λΈ”μž…λ‹ˆλ‹€. 이 ν…Œμ΄λΈ”μ—μ„œ Instructor_IDλŠ” κ°•μ˜(Course_ID)와 κ°•μ˜μ‹€(Room_No)을 κ²°μ •ν•˜μ§€λ§Œ, Instructor_IDλŠ” 후보킀가 μ•„λ‹™λ‹ˆλ‹€. λ˜ν•œ, κ°•μ˜μ‹€(Room_No)은 κ°•μ˜ μ‹œκ°„(Time)을 κ²°μ •ν•©λ‹ˆλ‹€.

Course_IDInstructor_IDRoom_NoTime
CS10112019:00 AM
CS102220210:00 AM
CS10312019:00 AM
CS104220210:00 AM

문제점 🚩

  • 후보킀가 μ•„λ‹Œ κ²°μ •μž 쑴재: Instructor_IDλŠ” 후보킀가 μ•„λ‹ˆμ§€λ§Œ, Room_No와 Time을 κ²°μ •ν•©λ‹ˆλ‹€.
  • 쒅속성 문제: νŠΉμ • κ°•μ˜μ‹€κ³Ό μ‹œκ°„μ€ λ™μΌν•œ 강사에 μ˜ν•΄ 반볡적으둜 μ‚¬μš©λ˜λ―€λ‘œ 데이터 쀑볡이 λ°œμƒν•©λ‹ˆλ‹€.
  • BCNF μœ„λ°˜: 이 ν…Œμ΄λΈ”μ€ 제3μ •κ·œν˜•μ€ λ§Œμ‘±ν•˜μ§€λ§Œ, BCNF κ·œμΉ™μ— 따라 λͺ¨λ“  κ²°μ •μžκ°€ 후보킀여야 ν•œλ‹€λŠ” 쑰건을 μœ„λ°˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

BCNF 적용 ν›„ πŸ› οΈ

BCNFλ₯Ό λ§Œμ‘±μ‹œν‚€κΈ° μœ„ν•΄, 후보킀가 μ•„λ‹Œ κ²°μ •μžμΈ Instructor_IDκ°€ κ²°μ •ν•˜λŠ” Room_No와 Time을 λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€.

1. κ°•μ˜(Course) ν…Œμ΄λΈ”
Course_IDInstructor_ID (FK)
CS1011
CS1022
CS1031
CS1042
2. 강사-κ°•μ˜μ‹€(Instructor_Room) ν…Œμ΄λΈ”
Instructor_IDRoom_NoTime
12019:00 AM
220210:00 AM

BCNF 적용 κ²°κ³Ό βœ…

  • 후보킀가 μ•„λ‹Œ κ²°μ •μž 제거: Instructor_ID에 μ˜ν•΄ κ²°μ •λ˜λŠ” Room_No와 Time을 Instructor_Room ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬, λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜λ„λ‘ μ„€κ³„ν–ˆμŠ΅λ‹ˆλ‹€.
  • μ€‘λ³΅λœ 데이터 제거: κ°•μ˜μ— κ΄€λ ¨λœ μ •λ³΄λŠ” Course ν…Œμ΄λΈ”μ—μ„œ κ΄€λ¦¬ν•˜κ³ , κ°•μ˜μ‹€κ³Ό μ‹œκ°„ μ •λ³΄λŠ” Instructor_Room ν…Œμ΄λΈ”μ—μ„œ κ΄€λ¦¬ν•˜μ—¬ 쀑볡을 μ€„μ˜€μŠ΅λ‹ˆλ‹€.
  • 데이터 무결성 보μž₯: BCNF κ·œμΉ™μ„ λ§Œμ‘±ν•˜κ²Œ λ˜μ–΄, λͺ¨λ“  κ²°μ •μžκ°€ 후보킀가 λ˜μ—ˆκ³ , λ°μ΄ν„°μ˜ 무결성이 보μž₯λ©λ‹ˆλ‹€.

물리적 λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§ 🌟

물리적 λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ€ 논리적 λͺ¨λΈλ§μ—μ„œ μ„€κ³„λœ 데이터λ₯Ό μ‹€μ œ λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œ(DBMS)μ—μ„œ κ΅¬ν˜„ν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•œ μ—¬λŸ¬ 기법듀이 적용되며, λ°μ΄ν„°λ² μ΄μŠ€μ˜ ꡬ체적인 μ €μž₯ ꡬ쑰와 μ„±λŠ₯을 κ³ λ €ν•˜μ—¬ 섀계가 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.


물리적 λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ˜ μ£Όμš” κ°œλ… πŸ’‘

  1. DBMS νŠΉμ„±μ— λ§žλŠ” λ°μ΄ν„°λ² μ΄μŠ€ 개체 μ •μ˜

    • 도메인(domain): ν…Œμ΄λΈ”μ˜ 각 μ»¬λŸΌμ— λŒ€ν•œ ꡬ체적인 μžλ£Œν˜•μ„ μ •μ˜ν•©λ‹ˆλ‹€. μžλ£Œν˜•μ€ DBMS에 λ§žλŠ” νƒ€μž…μœΌλ‘œ μ„€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.
      • μ˜ˆμ‹œ: int, varchar, date, float와 같은 μžλ£Œν˜•μ„ μ‚¬μš©ν•΄ 데이터λ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€.
  2. 효율적인 λ°μ΄ν„°λ² μ΄μŠ€ 섀계λ₯Ό μœ„ν•œ 뢄석

    • 데이터 μ‚¬μš©λŸ‰ 뢄석: 자주 μ‘°νšŒλ˜κ±°λ‚˜ μ—…λ°μ΄νŠΈλ˜λŠ” μ»¬λŸΌμ„ νŒŒμ•…ν•˜μ—¬, 졜적의 μ„±λŠ₯을 λ„μΆœν•  수 μžˆλ„λ‘ μ„€κ³„ν•©λ‹ˆλ‹€.
    • 업무 ν”„λ‘œμ„ΈμŠ€ 뢄석: λ°μ΄ν„°λ² μ΄μŠ€κ°€ μ‹€μ œ 업무 흐름에 맞게 μ΅œμ ν™”λ˜μ–΄ μžˆλŠ”μ§€ λΆ„μ„ν•˜μ—¬, 데이터 처리 속도λ₯Ό κ°œμ„ ν•©λ‹ˆλ‹€.
  3. 효율적인 인덱슀 μ •μ˜

    • μΈλ±μŠ€λŠ” 데이터 검색을 λΉ λ₯΄κ²Œ ν•˜κΈ° μœ„ν•œ κ΅¬μ‘°μž…λ‹ˆλ‹€. 자주 μ‘°νšŒλ˜λŠ” μ»¬λŸΌμ— 인덱슀λ₯Ό μΆ”κ°€ν•˜λ©΄ μ„±λŠ₯이 크게 ν–₯μƒλ©λ‹ˆλ‹€.
    • μ£Όμ˜μ‚¬ν•­: μΈλ±μŠ€κ°€ λ„ˆλ¬΄ λ§Žμ•„μ§€λ©΄ μ‚½μž… 및 μˆ˜μ • μ‹œ μ„±λŠ₯이 μ €ν•˜λ  수 μžˆμœΌλ―€λ‘œ μ μ ˆν•œ 인덱슀 개수λ₯Ό μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  4. Trigger(트리거) μ„€μ •

    • 트리거(Trigger)λŠ” νŠΉμ • μ΄λ²€νŠΈκ°€ λ°œμƒν•  λ•Œ μžλ™μœΌλ‘œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œκ·Έλž¨μž…λ‹ˆλ‹€. 데이터λ₯Ό μžλ™μœΌλ‘œ μ²˜λ¦¬ν•˜κ³  무결성을 μœ μ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
      • μ˜ˆμ‹œ: 주문이 μƒμ„±λ˜λ©΄, μž¬κ³ κ°€ μžλ™μœΌλ‘œ μ—…λ°μ΄νŠΈλ˜λ„λ‘ 트리거λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  5. μ—­μ •κ·œν™”(Denormalization) μž‘μ—…

    • μ„±λŠ₯ μ΅œμ ν™”λ₯Ό μœ„ν•΄ μ •κ·œν™”λœ 데이터λ₯Ό 일뢀 μ—­μ •κ·œν™”ν•˜μ—¬ 쀑볡 μ €μž₯ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. μ„±λŠ₯이 μ€‘μš”ν•œ 경우 쑰회 속도λ₯Ό ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ μ‚¬μš©λ˜μ§€λ§Œ, 데이터 일관성 문제λ₯Ό μ•ΌκΈ°ν•  수 μžˆμœΌλ―€λ‘œ μ‹ μ€‘ν•˜κ²Œ μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ—­μ •κ·œν™”(DeNormalization) μ„€λͺ… πŸš€

μ—­μ •κ·œν™”(DeNormalization)λŠ” μ •κ·œν™”λœ λ°μ΄ν„°λ² μ΄μŠ€ κ΅¬μ‘°μ—μ„œ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κΈ° μœ„ν•΄ 데이터λ₯Ό 쀑볡 μ €μž₯ν•˜κ±°λ‚˜ ν…Œμ΄λΈ”μ„ μž¬κ΅¬μ„±ν•˜λŠ” μž‘μ—…μž…λ‹ˆλ‹€. 쑰인 연산을 μ€„μ΄κ±°λ‚˜ λ³΅μž‘ν•œ 연산을 ν”Όν•˜κΈ° μœ„ν•΄ μ˜λ„μ μœΌλ‘œ 데이터 쀑볡을 ν—ˆμš©ν•˜μ—¬ μ„±λŠ₯을 λ†’μž…λ‹ˆλ‹€.


μ—­μ •κ·œν™” 방법 πŸ”§

  1. 데이터 쀑볡 (컬럼 μ—­μ •κ·œν™”):

    • 데이터 쑰인 μž‘μ—…μ„ 쀄이기 μœ„ν•΄ μ€‘λ³΅λœ 데이터λ₯Ό μ»¬λŸΌμ— μΆ”κ°€ν•˜μ—¬ 쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
    • μ˜ˆμ‹œ: μ£Όλ¬Έ ν…Œμ΄λΈ”μ— 고객 μ£Όμ†Œ 정보λ₯Ό 쀑볡 μ €μž₯ν•˜μ—¬ 쑰인 없이 μ‘°νšŒν•  수 μžˆλ„λ‘ 섀계.
  2. νŒŒμƒ 컬럼의 생성:

    • 연산을 반볡적으둜 μˆ˜ν–‰ν•˜μ§€ μ•Šλ„λ‘, 미리 κ³„μ‚°λœ 값을 μ €μž₯ν•˜λŠ” νŒŒμƒ μ»¬λŸΌμ„ μƒμ„±ν•˜μ—¬ 쑰회 μ„±λŠ₯을 λ†’μž…λ‹ˆλ‹€.
    • μ˜ˆμ‹œ: 판맀 κΈˆμ•‘(μˆ˜λŸ‰ * 단가)을 미리 계산해 μ €μž₯ν•˜λŠ” μ»¬λŸΌμ„ μΆ”κ°€ν•΄ 쑰회 속도λ₯Ό λ†’μž…λ‹ˆλ‹€.
  3. ν…Œμ΄λΈ” 뢄리:

    • 컬럼 μˆ˜λ‚˜ λ ˆμ½”λ“œ μˆ˜κ°€ λ§Žμ€ ν…Œμ΄λΈ”μ„ μž‘μ€ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•©λ‹ˆλ‹€.
    • μ˜ˆμ‹œ: 고객 ν…Œμ΄λΈ”μ—μ„œ 자주 μ‘°νšŒλ˜μ§€ μ•ŠλŠ” μ£Όμ†Œ 정보λ₯Ό λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ 관리.
  4. μš”μ•½ ν…Œμ΄λΈ” 생성(Summary Table):

    • 자주 μ§‘κ³„λ˜λŠ” 데이터λ₯Ό 미리 κ³„μ‚°ν•˜μ—¬ μ €μž₯ν•˜λŠ” μš”μ•½ ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜μ—¬ μ„±λŠ₯을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
    • μ˜ˆμ‹œ: 일일 총 νŒλ§€λŸ‰μ„ 미리 μ €μž₯ν•˜μ—¬ λ³΅μž‘ν•œ 쑰회 μž‘μ—…μ„ μ€„μž„.
  5. ν…Œμ΄λΈ” 톡합:

    • 자주 μ‘°μΈλ˜λŠ” ν…Œμ΄λΈ”μ„ ν†΅ν•©ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•©λ‹ˆλ‹€.
    • μ˜ˆμ‹œ: 고객과 μ£Όλ¬Έ ν…Œμ΄λΈ”μ„ 자주 쑰인해야 ν•  경우, 이λ₯Ό ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”λ‘œ ν†΅ν•©ν•˜μ—¬ 쑰회 μ„±λŠ₯을 λ†’μž…λ‹ˆλ‹€.

μ—­μ •κ·œν™”μ˜ μž₯점과 단점 βš–οΈ

  • μž₯점: 쑰회 μ„±λŠ₯이 크게 ν–₯μƒλ˜κ³ , λ³΅μž‘ν•œ μ—°μ‚°μ΄λ‚˜ 쑰인 μž‘μ—…μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 단점: 데이터 μ€‘λ³΅μœΌλ‘œ 인해 일관성 μœ μ§€κ°€ μ–΄λ €μ›Œμ§€κ³ , μ—…λ°μ΄νŠΈ μ‹œ μ€‘λ³΅λœ 데이터λ₯Ό λͺ¨λ‘ μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” μΆ”κ°€ μž‘μ—…μ΄ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄μƒμœΌλ‘œ 물리적 λ°μ΄ν„°λ² μ΄μŠ€ λͺ¨λΈλ§μ— λŒ€ν•œ μ„€λͺ…을 λ§ˆμΉ˜κ² μŠ΅λ‹ˆλ‹€. 😊 물리적 λͺ¨λΈλ§μ€ λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ„±λŠ₯κ³Ό νš¨μœ¨μ„±μ„ μ΅œμ ν™”ν•˜λŠ” μ€‘μš”ν•œ λ‹¨κ³„μž…λ‹ˆλ‹€. 섀계 λ‹¨κ³„μ—μ„œμ˜ μž‘μ€ 선택이 λ°μ΄ν„°λ² μ΄μŠ€μ˜ μ„±λŠ₯κ³Ό 무결성에 큰 영ν–₯을 미치기 λ•Œλ¬Έμ—, 각 기법을 상황에 맞게 μ‹ μ€‘ν•˜κ²Œ μ μš©ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ μ΅œμ ν™”λ₯Ό 톡해 λ”μš± λΉ λ₯΄κ³  효율적인 μ‹œμŠ€ν…œμ„ ꡬ좕해 λ³΄μ„Έμš”! πŸš€

0개의 λŒ“κΈ€