데이터베이스 모델링 - 생활 속 DB모델링
데이터 모델링은 일상 속에 존재한다. 복싱 동호회 고고복싱 운영자인 김복서는 회원정보를 관리하기 위해서 표를 만들려한다. 회원의 이름, 연락처, 나이, 경력 등에 대한 정보를 분석해서 고고복싱 회원들의 평균 경력은 2년입니다. 같은 분석결과를 제공하려고 한다. 어떻게 하면 될까? 김복서 씨는 처음에 아래와 같은 표를 작성을 했다.
회원개인정보
성명 |
나이 |
주소 |
폰번호 |
경력 |
좋아하는선수 |
김대식 |
24 |
서울 서대문구 |
010-1234-4567 |
3년 |
알리 |
강민준 |
35 |
서울 종로구 |
010-4321-4321 |
1년 |
메이웨더 |
이향미 |
26 |
서울 광진구 |
010-8852-88852 |
3년 |
파퀴아오 |
김대식 |
24 |
서울 서대문구 |
010-1234-4567 |
3년 |
로마첸코 |
문제가 발생했다. 김대식이 좋아하는 선수가 두 명이라서 이를 관리하기 위해서 두개의 행으로 표현을 했다. 이렇게 되면 개인정보가 좋아하는 선수 수만큼 만복될 수 밖에 없다. 또한 회원이 기준이 아니라 좋아하는 선수가 기준이 우선시 되는 것 같아서 표의 성격이 변질된 것 같다. 표에서 한 줄을 차지하는 정보의 단위가 각각의 회원이 아닌 회원이 좋아하는 선수가 되었기 때문이다. 그래서 김복서는 성격이 다른 두 정보를 함께 관리하려다보니 일어난 문제임을 자각하고 표를 두개로 분리 했다.
성격이 다른 정보 분리
회원개인정보
성명 |
나이 |
주소 |
폰번호 |
경력 |
김대식 |
24 |
서울 서대문구 |
010-1234-4567 |
3년 |
강민준 |
35 |
서울 종로구 |
010-4321-4321 |
1년 |
이향미 |
26 |
서울 광진구 |
010-8852-88852 |
3년 |
박서진 |
35 |
서울 관악구 |
010-4833-4833 |
5년 |
좋아하는 선수에는 소유자를 확인 할 수 있게 회원의 이름을 입력해서 회원개인 정보 표와 연결고리를 만들어 주었다.
좋아하는 선수
성명 |
좋아하는선수 |
김대식 |
알리 |
강민준 |
메이웨더 |
이향미 |
파퀴아오 |
김대식 |
로마첸코 |
박서진 |
mayweather |
또 문제가 생겨났다. 이름이 똑같은 회원이 나타나서 중복된 데이터가 발생을 한 것이다. 그래서 이름만으로 각각의 회원을 구별하기 힘들게 되어 회원번호라는 새로운 칼럼을 만들어 주었다.
중복되는 주식별자 문제해결
회원개인정보
회원번호 |
성명 |
나이 |
주소 |
폰번호 |
경력 |
1 |
김대식 |
24 |
서울 서대문구 |
010-1234-4567 |
3년 |
2 |
강민준 |
35 |
서울 종로구 |
010-4321-4321 |
1년 |
3 |
이향미 |
26 |
서울 광진구 |
010-8852-88852 |
3년 |
4 |
박서진 |
35 |
서울 관악구 |
010-4833-4833 |
5년 |
5 |
박서진 |
28 |
서울 마포구 |
010-3444-2333 |
1년 |
좋아하는 선수
회원번호 |
좋아하는선수 |
1 |
알리 |
2 |
메이웨더 |
3 |
파퀴아오 |
1 |
로마첸코 |
4 |
mayweather |
또 문제가 생겼다. 좋아하는 선수 이름을 제대로 분석하려면 선수이름이 한글이던 영어던 통일이 되어야 한다.(표준화) 예를 들어 이메일도 email , e-mail 이런 식으로 다르게 표현되어 있다면 분석하는데 어려움이 있다. 그래서 위의 표에서 메이웨더가 한국발음으로 메이웨더가 있고 영어로 mayweather가 있는데 선수이름은 한글로 통일해 주었다.
통일되지 않은 용어 표준화
회원개인정보
회원번호 |
성명 |
나이 |
주소 |
폰번호 |
경력 |
1 |
김대식 |
24 |
서울 서대문구 |
010-1234-4567 |
3년 |
2 |
강민준 |
35 |
서울 종로구 |
010-4321-4321 |
1년 |
3 |
이향미 |
26 |
서울 광진구 |
010-8852-88852 |
3년 |
4 |
박서진 |
35 |
서울 관악구 |
010-4833-4833 |
5년 |
좋아하는 선수
회원번호 |
좋아하는선수 |
1 |
알리 |
2 |
메이웨더 |
3 |
파퀴아오 |
1 |
로마첸코 |
4 |
메이웨더 |
이제 정리가 거의 다 되었다. 그런데 최근 복싱동호회가 점점 커지면서 복싱용품업체 등 복싱관련업체들이 광고를 하려고 들어오기 시작했다.
성격이 다른 테이블 생성 - 엔티티
업체명 |
주소 |
업종 |
대표자명 |
연락처 |
아이러브복싱 |
서울 종로구 |
복싱용품 |
강알리 |
02-8522-8522 |
렛츠고 복싱 |
서울 마포구 |
복싱용품 |
김웨더 |
02-9999-9999 |
지금까지 일상속에서 발생하는 정보를 어떻게 표에 담는지 살펴 보았다. 동호회 회원 정보와 좋아하는 선수를 관리하기 위해서 관련 칼럼(속성)들을 하나의 표로 정의 하였고, 다른 속성과 중복되는 값들은 분리해서 다른표로 만들어서 관리 했다. 이렇게 데이터를 2차원표에 어떻게 담는것이 좋을지 살펴봤는데, 이것이 바로 데이터 모델링이다.
정리
(1) 표는 관계형 데이터 베이스의 릴레이션을 의미한다.
(2) 서로 다른 성격의 정보가 같이 들어있다면 데이터간의 종속성을 기준으로 분리해야 한다. 다른말로 정규화 해야 한다.
(3) 좋아하는 복싱선수 표를 분리한 것은 제 1정규화가 적용된 결과다.
(4) 표 사이의 연결고리는 데이터 모델의 관계 속성에 해당한다.
(5) 회원번호는 엔터티의 주 식별자에 해당한다.
(6) mayweather를 메이웨더라고 표현한것은 데이터 표준화의 개념 중 코드와 관련이 있다.
(7) 협력업체 정보를 별도로 만든 것은 엔터티의 개념이 반영된 것이다.
요약
- 서로 다른 성격의 정보는 분리한다.(정규화)
- 용어는 하나로 통일 한다.
- 주식별자는 중복 허용 안된다.
'데이터 베이스' 카테고리의 다른 글
데이터베이스 모델링 - 관점 모델링 (0) | 2020.12.07 |
---|---|
데이터베이스 모델링 - 데이터 저장구조 (0) | 2020.12.07 |
데이터베이스 모델링 - 업무와 업무데이터 (0) | 2020.12.07 |