테이블 설계의 기초

 

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

 

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

 

여기서 말하는 테이블은 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정규형을 지켰다고 있습니다.

 

 


테이블 설계의 기초

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

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

 

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

 

여기서 말하는 테이블은 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정규형을 지켰다고 있습니다.

 

 

[출처] https://googry.tistory.com/33

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86307
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78758
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95506
784 [번역] 데이터 구조와 설계 — 튜토리얼 file 졸리운_곰 2020.07.26 1809
783 EA( Enterprise Architecture) 전사 아키텍처 file 졸리운_곰 2020.07.25 1785
782 데이터품질관리지침Ver[1].2.1.pdf file 졸리운_곰 2020.07.25 1846
» 테이블 설계의 기초 졸리운_곰 2020.07.25 2124
780 데이터베이스 디자인의 기초 file 졸리운_곰 2020.07.25 1683
779 [오라클] ORA-01476 제수가 0 입니다 졸리운_곰 2020.07.22 2078
778 [MySQL] 복제 지연 원인 및 해결 (reason for mysql replication lag/delay) file 졸리운_곰 2020.07.18 1408
777 MySQL Replication(복제) file 졸리운_곰 2020.07.18 1803
776 MySQL replication을 해보자 졸리운_곰 2020.07.18 1691
775 MySQL Replication(복제) - 단방향 이중화 file 졸리운_곰 2020.07.18 855
774 다중 with문 사용 - ORACLE SQL | [PL]SQL 졸리운_곰 2020.06.28 1639
773 여러 개의 INSERT문을 한 번에 처리 졸리운_곰 2020.06.28 1230
772 [Oracle] 오라클 WITH절 사용법 & 예제 (임시 테이블 만들기) file 졸리운_곰 2020.06.28 1333
771 [oracle] WITH 구문 file 졸리운_곰 2020.06.28 1393
770 [Oracle] WITH 구문 예제 file 졸리운_곰 2020.06.28 3259
769 [oracle]오라클 group by, rollup file 졸리운_곰 2020.06.28 1173
768 SUM() OVER() ORACLE 내장 함수 ORACLE file 졸리운_곰 2020.06.28 1466
767 [Oracle|오라클] ROLLUP 합계, 소계 구하기 (GROUP BY) file 졸리운_곰 2020.06.28 1311
766 [Oracle] 오라클 날짜를 계산하는 다양한 방법 (연산자, 함수) file 졸리운_곰 2020.06.15 1313
765 [참고] Oracle 날짜/요일/주/월 계산하기 졸리운_곰 2020.06.15 1527
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED