이 게시글에서는 DB모델링에 대해 정리해보려고 한다.
데이터모델링 ?
데이터 모델링은 데이터를 중심으로 모델링을 진행하는 방법으로, 주어진 개념으로부터 논리적인 데이터 모델을 구성하는 작업을 의미한다.
데이터 모델링은 다음과 같은 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에 맞게 구현하는 과정을 의미한다.
- 엔터티의 속성은 테이블의 칼럼으로 생성
- 주식별자는 Primary Key (PK)로 지정
- 보조식별자는 Unique Key로 지정
- 외부식별자는 Foreign Key로 지정
- 추가로 필요한 객체 (뷰, 인덱스 등)을 생성
다음 게시글에서는 테이블 생성, 수정, 삭제에 대해 작성할 예정이다.
'데이터베이스 > MariaDB' 카테고리의 다른 글
마리아DB (6) _ 뷰(View) (0) | 2024.05.27 |
---|---|
마리아DB (5) _ 테이블 생성, 수정, 삭제하기 (0) | 2024.05.26 |
마리아DB (3) _ 서브쿼리 작성하기 (0) | 2024.05.23 |
마리아DB (2) _ 윈도우함수, 조인 (0) | 2024.05.23 |
마리아DB (1) _ DB설치, 기본명령어 (0) | 2024.05.21 |