728x90
반응형


테이블 설계의 기초


테이블은 관계형 데이터베이스에서 데이터를 저장하기 위한 저장소 입니다.


테이블을 어떻게 설계 하는지에 따라 성능 차이가 있고 나중에 머리가 아파지는 일이 줄어들게 됩니다.


여기서 말하는 테이블은 2차원 표와 같이 행과 열이 있는 형태입니다. 하지만 단순히 행과 열을 가지고 데이터가 들어가는 것은 아니고 어떠한 규칙이나 공통적인 요소를 모은 집합이라고 생각해야 합니다.


테이블 예

 과목번호

과목명

 강사명 

 CSE001

 데이터베이스 

 에덴 

 CSE002 

 운영체제  

 휴 

 CSE003

 네트워크 

 아담 


이 테이블은 컴퓨터 사이언스 과목을 공통적인 요소로 보고 만든 테이블입니다.


'과목번호', '과목명', '강사명'은 테이블의 속성이라고 불리며 테이블에 어떤 값들이 저장되어야 하는지 나타냅니다.


그리고 '과목번호'는 테이블의 기본기(Primary key)라고 볼 수 있습니다.


기본키는 테이블 설계 원칙 중에 하나인 '반드시 기본키를 설정'를 나타내기 위해 필요한 것입니다.


기본키를 사용하게 되면 데이터의 중복을 방지할 수 있고 유일성을 나타낼 수 있습니다.


또한 유일성을 가지고 있기 때문에 다른 테이블에서 데이터를 찾을 때 사용되기도 합니다.


그러므로 이 기본키 값이 중복이 되면 안됩니다. 만약 중복이 된다면 위에서 말한 내용들이 다 쓸모가 없어질 것입니다.


기본키는 값이 변동되면 안되는데 그 이유는 값의 유일성을 증명하지 못하고 과거의 데이터와 매칭을 할 수 없기 때문입니다.


또한 기본키는 NULL값이 들어 갈 수 없습니다.



정규형


정규형은 테이블을 어떤 기준으로 나눠서 데이터를 관리하게 만들지 기준이 되는 개념입니다.


정규형은 제1정규형부터 제5정규형까지 있습니다.


하지만 제3정규형까지 적용하더라도 어느정도 사용을 할 수 있을 정도의 수준이 됩니다.


제1정규형은 '테이블 셀에 여러개의 데이터를 말자' 입니다.

다르게 말하면 '모든 속성은 원자값을 가져야 한다' 입니다.


 과목번호

 과목명

 강사명 

 CSE001

 데이터베이스 

 에덴 

 CSE002 

 운영체제  

 휴 

 CSE003

 네트워크 

 아담, 휴 


이렇게 네트워크 과목이 아담과 휴 강사가 강의를 한다고 나타낼 수도 있습니다.


하지만 이렇게 하는 것은 관리하기도 어렵고 추천하고 싶은 방법은 아닙니다.


과목 테이블

 과목번호

 과목명 

 CSE001 

 데이터베이스 

 CSE002 

 운영체제 

 CSE003 

 네트워크 


과목 강사 테이블

 과목번호

 과목반 

강사면 

 CSE001 

 A 

 에덴 

 CSE002 

 A 

 휴 

 CSE003 

 A 

 아담 

 CSE003 

 B 

 휴 



이렇게 만들게 되면 한 셀에 여러개의 값이 들어가지 않아서 제1정규형을 지킬 수 있습니다.


제2정규형은 '종속성을 띄고 있는 데이터를 분리하자' 입니다.

다르게 말하면 '키를 제외한 나머지 속성들은 키에만 종속되어야 한다' 입니다.


수강신청 테이블

 학번 

 과목번호 

 신청일 

 학생명

 학과 

 2017012987 

 CSE001 

 2017/09/28 

 배수지

 컴퓨터공학과 

 2017012987

 CSE003 

 2017/09/30 

 배수지 

 컴퓨터공학과 

 2017023112 

 MSE005

 2017/09/30 

 김우빈 

 시각디자인학과 

 2017023114 

 MSE005 

 2017/09/30 

 김고은 

 시각디자인학과 

 2017012987 

 MSE005 

 2017/10/02 

 배수지 

 컴퓨터공학과 


이 경우는 여러개의 속성을 기본키로 만든 경우입니다.


각 데이터들은 각 셀에 데이터가 하나씩 들어가 있기 때문에 제1정규형은 지켜지고 있지만 제2정규형을 지켰다고 볼 수 없습니다.


데이터를 잘 보면 '학번', '학생명', '학과'가 서로 종속성을 보여주고 있습니다.


이렇게 종속성을 보여주는 형태가 있으면 제2정규형이라고 말할 수 없습니다.


그럼 종속성이 있는 부분만 따로 빼서 테이블을 만들면 제2정규형을 지킬 수 있습니다.


수강신청 테이블

 학번 

 과목번호 

 신청일 

 2017012987 

 CSE001 

 2017/09/28 

 2017012987 

 CSE003 

 2017/09/30 

 2017023112 

 MSE005 

 2017/09/30 

 2017023114 

 MSE005 

 2017/09/30 

 2017012987 

 MSE005 

 2017/10/02 



학생 테이블

 학번 

 학생명 

 학과 

 2017012987

 배수지 

 컴퓨터공학과 

 2017023112 

 김우빈 

 시각디자인학과 

 2017023114 

 김고은 

 시각디자인학과 


이렇게 구성 했을 때 제2정규형을 지켰다고 말할 수 있습니다.


그리고 데이터를 수정 했을 경우 한개의 테이블로 관리했을 때 수정해야 할 셀이 많지만 두개의 테이블로 관리 한다면 수정해야 할 셀이 적어지게 되고 관리가 편리해 집니다.


제3정규형은 '테이블 안에 두번 이상 연결 된 종속을 가지지 말자' 입니다.

다른 말로 '이행 종속이 있으면 안된다' 입니다.


학생 테이블

 학번 

 학생명 

 학과 

 교수코드 

 교수명 

 2017012987

 배수지 

 컴퓨터공학과 

 PROF001

 김로빈 

 2017023112 

 김우빈 

 시각디자인학과 

 PROF002

 소우진 

 2017023114 

 김고은 

 시각디자인학과 

 PROF002

 소우진


학생 테이블에 교수코드와 교수명이 추가가 되었습니다.


이럴 경우 '학번'이 '교수코드'와 종속관계이고 '교수코드'와 '교수명'이 종속관계이므로 한 테이블에 연결된 종속관계가 존재하게 됩니다.


이럴 경우는 제3 정규형을 지키지 못하는 형태 입니다.


학생 테이블

 학번 

 학생명 

 학과 

 교수코드(FK)

 2017012987

 배수지 

 컴퓨터공학과 

 PROF001

 2017023112 

 김우빈 

 시각디자인학과 

 PROF002

 2017023114 

 김고은 

 시각디자인학과 

 PROF002


교수 테이블

 교수코드

 교수명 

 PROF001 

 김로빈 

 PROF002 

 소우진 


이렇게 두개로 나눌 경우 한 테이블에 연결된 종속관계를 끊을 수 있습니다.


이 때 제3정규형을 지켰다고 말 할 수 있습니다.

728x90
반응형

'Development > Database' 카테고리의 다른 글

(DB) Sql문의 기본 CRUD 및 결합  (0) 2017.10.15
(DB) Mac OS에서 MySQL 설치하기  (0) 2017.09.22
(DB) 관계형 데이터베이스란?  (0) 2017.09.21
(DB) 데이터베이스란?  (0) 2017.09.21

+ Recent posts