Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

wintertreey 님의 블로그

[DB] DB 정규화 본문

팀 프로젝트

[DB] DB 정규화

wintertreey 2024. 8. 16. 14:30

팀 프로젝트 디비 작업물입니다. 무단 출처를 금합니다.

 

Ref: "place"."p_no" < "likes"."target_no"

Ref: "review"."r_no" < "likes"."target_no"

Ref: "flea_market"."m_no" < "likes"."target_no"

Ref: "flea_market"."m_id" < "files"."f_user_id"

Ref: "user"."id" < "flea_market"."m_id"

Ref: "flea_market"."m_no" < "chat"."c_flea_no"

Ref: "review"."r_no" < "report"."report_target_no"

Ref: "flea_market"."m_no" < "report"."report_target_no"

 

대부분의 테이블 no에 pk를 주었고, 연관되는 테이블의 칼럼들을 일대다 관계로 까마귀발모양으로 엮어두었다. 

 

DB작업시 중요한것은 정규화이다. 우리는 테이블들을 만든뒤, BCNF정규화에 맞추고자 했다. 

정규화에 대해 알아보고 넘어가자.


 

정규화

데이터베이스 설계에서 데이터 무결성과 효율성을 유지하기 위해 중요한 과정.

정규화의 주요 목적은 중복을 줄이고 데이터 무결성을 보장하는 것!!

 

정규화의 단계

  1. 1NF (First Normal Form): 데이터베이스 테이블이 원자적(atomic) 값으로 구성되어 있고, 각 컬럼이 단일 값을 가지며, 행의 순서가 중요하지 않도록 합니다.
  2. 2NF (Second Normal Form): 1NF를 만족하면서, 테이블의 모든 비주요 속성이 기본 키에 완전히 함수 종속되어 있어야 합니다. 즉, 부분 종속성을 제거합니다.
  3. 3NF (Third Normal Form): 2NF를 만족하면서, 테이블의 모든 비주요 속성이 기본 키에만 종속되며, 이른바 "이행적 종속"을 제거합니다. 즉, 비주요 속성이 다른 비주요 속성에 종속되지 않도록 합니다.
  4. BCNF (Boyce-Codd Normal Form): 3NF를 만족하면서, 테이블의 모든 결정자가 후보 키여야 합니다. 즉, 모든 결정자(속성을 기준으로 값을 결정할 수 있는 속성)가 후보 키가 되어야 합니다.
  5. 4NF (Fourth Normal Form): BCNF를 만족하면서, 다치 종속성(다중 값 종속성)을 제거합니다. 즉, 하나의 테이블에 여러 개의 독립적인 다치 종속성이 있어서는 안 됩니다.
  6. 5NF (Fifth Normal Form): 4NF를 만족하면서, 조인 종속성(Join Dependency)을 제거합니다. 즉, 관계가 조인으로 완전히 표현될 수 있어야 합니다.
  7. 6NF (Sixth Normal Form): 5NF를 만족하면서, 시간에 따른 데이터 변화를 고려하여 각 속성이 독립적인 값을 가질 수 있도록 합니다. 이는 특히 복잡한 시계열 데이터에서 중요합니다.

 

BCNF 정규화의 적합성

BCNF는 상당히 강력한 정규화 형태로, 일반적으로 3NF보다 더 엄격한 규칙을 적용합니다. BCNF는 다음과 같은 경우에 유용합니다:

  • 모든 결정자가 후보 키인 경우: BCNF는 특히 후보 키가 아닌 다른 결정자가 존재하는 경우에 문제를 해결합니다.
  • 복잡한 데이터 관계: 비정규형 관계가 있는 복잡한 데이터베이스 설계에서 BCNF는 데이터 중복을 줄이고 무결성을 강화합니다.

정규화의 최선의 방법

정규화 단계의 선택은 데이터베이스의 요구 사항과 설계 목표에 따라 달라집니다:

  • 비즈니스 요구 사항: 데이터베이스 설계 시 비즈니스 요구 사항과 데이터 처리 성능을 고려해야 합니다. 지나치게 높은 정규화 수준은 복잡성과 성능 문제를 초래할 수 있습니다.
  • 성능과 무결성: BCNF 정규화는 데이터 무결성을 보장하지만, 일부 경우에는 성능 저하를 초래할 수 있습니다. 성능이 중요한 경우, 실무에서는 정규화와 비정규화의 적절한 균형을 맞추는 것이 필요할 수 있습니다.