테이블 설계의 기초

 

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

 

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

 

여기서 말하는 테이블은 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 86311
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78768
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95516
15 [hadoop] Cloudera Quick Start VM in Hyper-V file 졸리운_곰 2022.11.14 3818
14 [hadoop][java][MapReduce] 맵리듀스 원리와 그 과정 졸리운_곰 2021.02.28 1657
13 [hadoop][mapreduce][csv file] [Reference] : Hadoop MapReduce Join & Counter with Example file 졸리운_곰 2021.02.23 1535
12 [hadoop][mapreduce][csv file] Hadoop & Mapreduce Examples: Create First Program in Java file 졸리운_곰 2021.02.23 1855
11 하둡 맵리듀스(MapReduce) 알아보자 file 졸리운_곰 2019.04.22 2559
10 [하둡] 맵리듀스(MapReduce) 이해하기 file 졸리운_곰 2019.04.22 1982
9 맵/리듀스 (Map/Reduce) 이해하기 file 졸리운_곰 2019.04.22 2649
8 아파치 하둡 HDFS 사용법(Cloudera 사용) file 졸리운_곰 2017.04.19 1599
7 클라우데라 배포판을 이용한 하둡 및 빅데이터 오픈소스 설치하기 file 졸리운_곰 2017.02.14 2025
6 빅데이터 플랫폼 아키텍처의 두 가지 file 졸리운_곰 2016.05.29 1685
5 Hadoop 적용 사례 기사 정리 졸리운_곰 2016.05.29 2000
4 빅데이터 잡설 , 하둡은 어디로 갈꺼나 … file 졸리운_곰 2016.05.29 1741
3 하둡, 데이터 분석에 활용하기까지 file 졸리운_곰 2016.05.29 2138
2 A Guide to Python Frameworks for Hadoop file 졸리운_곰 2016.04.30 3074
1 Writing an Hadoop MapReduce Program in Python file 졸리운_곰 2016.04.30 2190
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED