CS전공지식(ERD & 정규화)

박정호·2022년 8월 10일
0

CS

목록 보기
14/18
post-thumbnail

ERD(Entity Relationship Diagram)

  • 데이터베이스를 구축할 때 가장 기초적인 뼈대 역할
  • 릴레이션 간의 관계들을 정의하는 것
  • 서비스를 구축한다면 가장 먼저 신경 써야할 부분

ERD의 중요성

  • ERD는 시스템의 요구사항을 기반으로 작성되며 이 ERD를 기반으로 데이터베이스를 구축
  • 데이터베이스를 구축한 이후에도 디버깅 또는 비즈니스 프로세스 재설계가 필요한 경우 설계도 역할을 담당
  • ERD는 관계형 구조로 표현할 수 있는 데이터를 구성하는데 유용할 수 있지만 비정형 데이터를 충분히 표현할 수 없다는 단점 존재

잠깐) 비정형 데이터

  • 비구조화 데이터를 말하며, 미리 정의된 데이터 모델이 없거나 미리 정의된 방식으로 정리되지 않은 정보를 말한다

ERD 예제

승원 영업부서의 ERD
요구사항

  • 영원사업은 0~n명의 고객을 관리
  • 고객인 0~n개의 주문을 넣을 수 있다
  • 주문에는 1~n개의 상품이 들어간다

게임 속 ERD
요구사항

  • 선수들은 1명의 챔피언을 고를 수 있다
  • 챔피언은 한개 이상의 스킬을 갖는다
  • 스킬은 한개 이상의 특성을 갖는다

정규화 과정

  • 릴레이션 간의 잘못된 종속 관계로 인해 데이터베이스 이상 현상이 일어나서 이를 해결하거나, 저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정
  • 정규형 원칙을 기반으로 정규형을 만들어간 과정

데이터 이상 현상

  • 데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성이 저하. 이러한 원인은 데이터 이상 현상(Anomaly)에 의해 발생하며, 이상 현상으로 인해  현실세계의 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생
    참고사이트: https://developer-talk.tistory.com/256

정규형 원칙

  • 같은 의미를 표현하는 릴레이션이지만 좀 더 좋은 구조로 만들어야하고, 자료의 중복성은 감소해야하고, 독립적인 관계를 별개의 릴레이션으로 표현해야 하며, 각각의 릴레이션은 독립적인 표현이 가능해야 하는 것

제 1정규형

  • 릴레이션의 모든 도메인이 더 이상 분해될 수 없는 원자 값만으로 구성되어야 한다
  • 릴레이션의 속성 값 중에서 한개의 기본키에 대해 두개 이상의 값을 가지는 반복 집합이 존재하면 X (만약 반복집합 존재시 꼭 제거)

제 2정규형

  • 1정규형을 만족하며 종속성을 제거한 형태
  • 부분함수의 종속성 제거란 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속적인 것
  • 주의해야 할 점은 릴레이션을 분해할 때 동등한 릴레이션으로 분해해야 하고, 정보 손실이 발생하지 않는 무손실 분해되어야 한다는 것

제 3정규형

  • 2정규형을 만족하고, 기본키가 아닌 모든 속성이 이행적 함수 종속을 만족하지 않는 상태

이행적 함수 종속

  • A-> B와 B->C가 존재한다면 A->C를 만족하고, C가 A에 이행적으로 함수 종속

보이스/코드 정규형

  • 3 정규형을 만족하고, 결정자가 후보키가 아닌 함수 종속 관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태

잠깐) 결정자

  • 함수 종속 관계에서 특정 종속자를 결정짓는 요소
  • X -> Y일 때 X는 결정자, Y는 종속자

ex) 다음과 같은 경우 {학번, 수강명}, {학번, 강사}가 후보키
-> 학번에 NULL 존재로 문제 발생

학번-강사-수강명 함수 종속

강사 속성이 결정자이지만 후보키가 아니므로 이 강사 속성을 분리

정규형 과정 주의

  • 정규형 과정을 거쳐 테이블을 나눈다고 해서 성능이 100% 좋아지는 것은 아니다
  • 테이블을 나누게 되면 어떠한 쿼리는 조인을 해야 하는 경우도 발생해서 오히려 느려질 수 있고 따라서 서비스에 따라서 정규화 또는 비정규화 과정을 진행해야 한다
profile
기록하여 기억하고, 계획하여 실천하자. will be a FE developer (HOME버튼을 클릭하여 Notion으로 놀러오세요!)

0개의 댓글