본문 바로가기

기타/관계형 데이터 모델링

데이터 베이스 정규화 부분종속성 제거 예시

728x90

오늘은 데이터 베이스 정규화 그중에서도 

No partial dependencies(부분 종속성)를 제거하는 방법에 대해 알아보도록 하겠습니다.

 

위의 표를 보면 코딩 마스터, 프런트엔드, vuejs 등 반복되는 부분이 많습니다. 위와 같이 데이터 베이스를 만들면 당연히 비효율적이겠죠. 데이터를 추가할 때 삭제할 때 데이터의 이동이 많아지니 더욱 비효율적이죠. 이렇듯 반복에 의해 발생하는 문제를 부분 종속성이라 부릅니다.

부분 종속성을 없애는 방법은 아래와 같습니다.

중복을 없애기 위해서는 테이블을 분리해주어야 합니다.

장기, 중기, 단기 목표로 분리하고 

상위 테이블의 id를 통해 중복을 없앨 수 있습니다.

장기 목표는 코딩 마스터와, 인문학 마스터 두 가지입니다.

전자에 1, 후자에 2를 부여하고

중기목표에서 해당하는 목록에 장기 목표_id를 넣어주면 됩니다.

프런트엔드는 코딩 마스터이므로 1, 백엔드 : 1, 철학 마스터 :2

단기 목표는 위와 같은 방법을 중기와 단기 목표에 적용하면 됩니다.

장기 목표가 코딩 마스터인 중기 목표를 가져오려면 장기 목표_id가 1인 것을,

 

SELECT *
FROM 중기목표
WHERE 장기목표_id = 1;

 

이렇게 가져올 수 있습니다.

중기 목표가 프런트엔드인 단기 목표를 가져오려면

 

SELECT *

FROM 단기 목표

WHERE 중기목표_id = 1;

 

SELECT *
FROM 단기목표
WHERE 중기목표_id = 1;

 

장기 목표를 추가할 때는

INSERT INTO 장기목표 VALUES (데이터);

 

 

중기 목표를 추가할 때는

INSERT INTO 중기목표 VALUES (데이터, 해당하는 장기목표 번호);

 

단기 목표를 추가할 때는

INSERT INTO 단기목표 VALUES (데이터, 해당하는 중기목표 번호);

 

 

 

할 일의 경우에는 데이터의 특성상 따로 단기 목표 별로 묶어서 따로 테이블을 만들었습니다.

만약 하루 할 일을 보여주는 페이지를 만들면 단기 목표 라벨이 있는 모든 테이블을 돌아다니면서 데이터를 가져와야 하는 비효율성이 발생할 수 있지만

제가 목표로 하는 페이지는 단기 목표와 함께 할 일을 보여줄 것이기 때문에 효율적입니다.

 

 

오늘은 데이터 베이스를 만들 때 부분 종속성을 없애는 방법에 대해 알아보았습니다.

최종적인 결과물은 확실히 처음보다는 깔끔하네요.

하지만 이것이 끝은 아닙니다.

데이터 베이스 정규화에는 여러 가지 과정이 있기 때문입니다.

추가적으로 공부해보시기 바랍니다.

처음 접하시는 거라면 생활코딩 관계형 데이터베이스 모델링 강의를 추천드립니다.

길지 않고 무료입니다.

저도 아직 잘 아는 건 아니라.. 공부 중입니다.

위의 자료는 제가 실제로 만들려고 하는 웹서비스 데이터베이스를 예시로 부분 종속성을 없애본 것입니다.

여러분도 자신의 서비스를 만들 때 데이터 베이스 구성에서 부분 종속성을 없애보는 작업을 진행해보면 많은 공부가 될 것입니다.

감사합니다.

728x90