성장일기

내가 보려고 정리하는 공부기록

데이터베이스/MariaDB

마리아DB _ 데이터모델링 (개념적, 논리적, 물리적 모델링 / 정규화)

와나나나 2024. 5. 25. 00:53
728x90

이 게시글에서는 DB모델링에 대해 정리해보려고 한다.

 

데이터모델링 ?

데이터 모델링은 데이터를 중심으로 모델링을 진행하는 방법으로, 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 의미한다. 

데이터 모델링은 다음과 같은 3가지 과정으로 분류할 수 있다.

  1. 개념적 모델링
  2. 논리적 모델링
  3. 물리적 모델링

모델링을 하기 전에, 업무를 파악하고 요구사항을 분석해야 한다. 

 

개념적모델링

요구사항을 분석하는 단계에서 정의된 핵심 개체와 그들의 관계를 바탕으로 ERD를 생성하는 단계이다.

 

다음은 학생이라는 개체를 나타낸 것이다.

학번
나이
이름
성별

 

엔터티 (Entity)

관리해야 할 구체적인 대상을 의미한다. 위에서는 학생 자체를 엔터티라고 한다. 엔터티도 형태의 유무에 따라서 유형엔터티무형엔터티로 나눌 수 있다. 

 

  • 무형엔터티 ex| 구매내역 등
  • 유형엔터티 ex| 학생, 고객 등

 

속성 (Attribute)

엔터티가 갖고있는 특징들을 속성이라고 한다. 위에서는 학번, 나이, 이름, 성별이 이에 해당한다. 속성에도 역할에 따라 여러가지로 나누어진다.

  • 주식별자 : 엔터티에 있는 데이터를 구분해줄 수 있는 속성 ex | 기본키
  • 보조식별자 : 주식별자를 대체할 수 있는 속성 
    • 주식별자는 중복X 속성와 null이 안 되는 속성이 있어서 이 속성들을 가진 열이라면 보조식별자가 될 수 있다.
  • 외래식별자 : 엔터티와의 관계를 연결해주는 속성 ex | 외래키

 

관계 (Relation)

관계는 대응하는 데이터의 개수에 따라 일대일 관계, 일대다 관계, 다대다 관계로 나눌 수 있고, 부모엔터티가 자식 엔터티의 주 식별자 역할을 하느냐에 따라 식별관계, 비식별관계로 나눌 수 있다.

 

일대일 관계 (OneToOne), 일대다 관계 (OneToMany), 다대다 관계 (ManyToMany)

일대일 관계

A엔터티에 존재하는 1건의 데이터와 대응하는 B엔터티의 데이터 또한 1건인 경우를 의미한다.

예를 들어, 인간이 자식을 단 한명밖에 못 낳는다는 가능세계라고 가정한다면 엄마와 자식은 일대일 관계이다.

 

일대다 관계

A엔터티에 존재하는 1건의 데이터와 대응하는 B엔터티의 데이터가 여러건인 경우를 의미한다.

예를 들면 학생과 담당교수의 관계가 있을 것이다. 학생은 각자 한 명의 담당교수를 갖지만, 담당교수는 많은 학생을 담당할 수 있다.

 

다대다 관계

A엔터티에 존재하는 여러건의 데이터와 대응하는 B엔터티의 데이터가 여러건인 경우를 의미한다. 

출처 : 한화시스템 비욘드 부트캠프 제공자료

 

이 경우에는 일대다 관계가 되도록 새로운 엔터티를 추가해주어야하며, 이를 매핑테이블이라고 부른다.

 

 

식별관계, 비식별관계

식별관계

부모 엔터티의 주 식별자를 자식 엔터티의 주 식별자, 외래식별자로 사용하는 것을 의미한다. 위 테이블에서 학생테이블의 주식별자인 학번을 수강과목 테이블에서도 주식별자로 사용하는 것을 예로 들 수 있다.

 

비식별관계

부모 엔티티의 주 식별자를 자식 엔티티의 외래 식별자로만 사용하는 관계를 의미한다. 테이블을 조인할 때 보통 비식별관계가 된다.

 

 

논리적모델링

개념적 모델링 과정에서 추상화 된 데이터를 구체화해서 테이블화, 상세화 하는 과정을 의미한다.

테이블화 하는 과정에서 모든 정보를 한 테이블에 넣게 되면, 데이터를 삽입, 수정, 삭제하는 과정에서 예기치못한 현상이 일어날 수 있는데, 이를 이상이라고 한다.

 

이상을 막기 위해서 우리는 테이블을 분리하는 정규화라는 과정을 거친다. 보통 1정규화부터 5정규화까지 있고, 대체로 이 순서대로 정규화 과정을 거친다. (물론 아닌 경우도 있다)

 

1정규화

하나의 속성이 하나의 값만 갖도록 분리한다.

 

출처 : 한화시스템 부트캠프 제공

 

2정규화

주 식별자 전체에 종속적이지 않는 속성을 분리한다. 즉, 완전 함수적 종속을 만족하도록 하여 관련있는 데이터끼리 묶어 테이블을 나눈다.

3정규화

주 식별자에 종속적이지 않은 속성을 분리한다.

 

반정규화

정규화가 테이블을 분리하는 작업이라면, 반정규화는 테이블을 합치는 작업이다. 테이블을 무조건 분리한다고 좋은 것이 아니고, 합치는 게 성능에 더 좋을 때도 있기 때문에 반정규화 작업도 필요할 수 있다!

 

 

물리적모델링

논리적 모델링에서 표현된 데이터를 실제 DB에 맞게 구현하는 과정을 의미한다. 

  1. 엔터티의 속성테이블의 칼럼으로 생성
  2. 주식별자Primary Key (PK)로 지정
  3. 보조식별자Unique Key로 지정
  4. 외부식별자Foreign Key로 지정
  5. 추가로 필요한 객체 (뷰, 인덱스 등)을 생성

 

다음 게시글에서는 테이블 생성, 수정, 삭제에 대해 작성할 예정이다.