데이터 알못의 정규화 이해하기

GDana
5 min readAug 11, 2019

--

한달에 두번의 개발관련 포스팅을 하는 글또라는 모임에서 리뷰어로 지정된 분의 피드백을 위해 데이터베이스 정규화 글을 읽는데 정규화는 무엇이고 ERD와 엔티티는 또 무엇이였던가.. 이 수많은 개념들을 매번 찾아 읽는 것도 일이다 싶었다.

그래서 데이터베이스 정규화를 이해하고 싶어 공부한 내용을 기록해본다.

정규화를 이해하기 위해 작성한 내용이라 정확하지 않은 정보를 전달하고 있을지 모릅니다. 혹시 잘못된 내용이나 부족한 부분이 있다면 코멘트 부탁드립니다 : )

데이터 베이스란?

여러 사람이 공유하고 사용할 수 있도록 체계화된 데이터의 집합

데이터 베이스를 선택한다는 것은?

데이터를 관계형 데이터 베이스인 SQL의 특징을 사용할 것인가 아니면 Non Relational Operation Database SQL의 줄임말인 NoSQL 특징을 사용할 것인가로 볼 수 있다.

이러한 SQL은 대표적으로 무결성과 데이터 중복 제거의 특징이 있고 NoSQL은 유연성과 데이터 중복 허용이라는 특징이 있다.

데이터 모델링이란?

무한히 복잡한 데이터를 표로 만들어서 처리할 수 있는 방법론을 가리킨 말이 데이터 모델링이다.

데이터 모델링 순서

사용자 요구사항 수집 및 분석 → 개념적 모델링 → 논리적 모델링 → 물리적 모델링

①사용자 요구사항 수집 및 분석: 사용자의 요구사항을 수집하고 분석한다.

②개념적 모델링: 수집하고 분석한 요구사항을 ERD로 그려내는 과정

③논리적 모델링: 그려낸 ERD로 데이터들간의 상세속성과 관계를 정의하는 과정

④물리적 모델링: 관계 정의가 끝난 데이터가 하드웨어에 어떻게 표현될 것인가 정의하는 과정

개념적 모델링

사용자의 요구사항 수집 및 분석이 끝낸 데이터의 핵심 데이터와 그에 따른 데이터들간의 관계를 표현하는 과정이며 이를 표현하기 위해 ‘엔티티 관계 다이어그램(Entity Relationship Diagram)’을 그린다.

ERD를 통해 데이터들 간의 관계를 설정해야하며, 핵심 데이터의 특성을 나타내는 항목인 속성과 이러한 속성 중 핵심 데이터를 대표할 수 있는 식별자를 정의해야 한다.

핵심 데이터 집합 설정(Entity)

데이터 집합의 특성을 나타내는 핵심 데이터를 정의하며 이 데이터를 엔티티라고 부른다.

관계 설정(Cardinality)

  1. 1:1 일대일 관계: 하나의 엔티티와 다른 엔티티가 서로에게 유일한 관계
  2. 1:N 일대다 관계: 하나의 엔티티가 여러 엔티티와 대응할 수 있는 관계
  3. N:M : 여러 엔티티가 여러 엔티티와 대응할 수 있는 관계

식별자 정의(Identifier)

하나의 엔티티를 대표할 수 있는 속성을 식별자라 부른다.

  1. 후보키(candidate key): 식별자가 될 수 있는 키
  2. 기본키(primary key): 후보키 중에서 선택한 키
  3. 대체키(alternate key): 기본키가 아닌 다른 키
  4. 중복키(composite key): 두가지를 합쳐서 식별하는 키

데이터베이스 정규화란?

정제되지 않은 데이터를 관계형 데이터 베이스에 적합한 데이터로 만드는 방법이다.

정규화라고 해서 데이터 모델링의 과정을 거치지 않고 정규화라는 과정을 한번에 진행하는 것이 아니라 제 1정규화, 제 2정규화.. 를 차례대로 거쳐 관계형 데이터 베이스에 어울리는 데이터를 만들어 나가는 것이 정규화이다.

제 1정규화

Atomic columns(cells have single value)의 중복이 없는 조건을 만족하는 데이터

제 2정규화

제 1정규화를 만족하면서 No Partial dependencies(values depend on the whole of every Candidate key) 부분 종속성이 없는 조건을 만족하는 데이터

제 3정규화

제 1,2정규화를 만족하면서 No transitive dependencies(values depend only on Candidate keys) 다른 데이터에 이행적 종속성을 만족하는 데이터

데이터베이스 정규화를 이해하기 위해 데이터베이스란? 관계형 데이터 베이스란? 데이터 모델링이란?… 계속해서 원시적인 개념을 타고 올라가 정규화를 위한 배경지식을 만들어 가야 했다.

하지만 아직까지도 부분종속성이며 IE표기법 등 눈이 핑글핑글 돌아가는 것들 투성이라 공부했던 거라며 적어나가도 진정 내것이 된 것 같다는 느낌이 들지 않아 찜찜했지만 적어도 리뷰를 하고자 처음 화면을 띄웠을 때보다는 이게 이거였던가? 하면서 찾아보며 이해할 수 있게 되어서 기뻤다 : )

다음번에는 기왕이면 실습을 통해 포스팅을 하면 부족한 글이라도 스스로의 학습 만족도는 훨씬 높고 좋을 것 같다!

--

--