테이블 설계의 기초

 

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

 

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

 

여기서 말하는 테이블은 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 86818
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 79109
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95868
46 [데이터분석 & 데이터 사이언스] 수많은 데이터 사이언티스트들이 직장을 떠나는 이유는 무엇인가? file 졸리운_곰 2025.03.09 907
45 [데이터분석][파이썬][python] 한글 글꼴 사용 (matplotlib) 졸리운_곰 2024.04.18 1362
44 [데이터분석 & 데이터 사이언스] 데이터에 관한 꼭 알아야 할 오해와 진실 12가지 졸리운_곰 2024.01.17 1317
43 [데이터분석][파이썬][python] Awesome Dash Awesome file 졸리운_곰 2021.07.10 2344
42 [데이터분석][파이썬][python] ???? Introducing Dash ???? file 졸리운_곰 2021.07.10 1609
41 [dataset] (한글) 욕설 감지 데이터셋 file 졸리운_곰 2021.05.12 1560
40 [데이터분석][python] Dash를 사용하는 초보자 및 기타 모든 사용자를위한 Python의 대시 보드 file 졸리운_곰 2021.04.14 1766
39 [데이터분석][python] Dash를 사용하는 초보자 및 기타 모든 사용자를위한 Python의 대시 보드 file 졸리운_곰 2021.04.14 1605
38 [데이터분석][데이터 사이언스][python][Dash] Python, Dash 및 Plotly를 사용하여 COVID-19 사례 데이터 시각화 file 졸리운_곰 2021.03.28 1503
37 [데이터분석][머신러닝] When not to use machine learning or AI Adventures in wishful thinking, nonstationarity, and pattern-finding / 기계 학습 또는 AI를 사용하지 않아야하는 경우 희망찬 사고, 비정상 성, 패턴 찾기의 모험 file 졸리운_곰 2021.03.28 21624
36 [MSA][머신러닝] 쿠버네티스 기반의 End2End 머신러닝 플랫폼 Kubeflow #1 - 소개 file 졸리운_곰 2021.03.21 1139
35 [데이터사이언스] 데이터 과학자를위한 3 가지 훌륭한 디자인 패턴, 3 Great Design Patterns for Data Scientists file 졸리운_곰 2021.03.04 783
34 [데이터분석] 시계열 데이터에 AI를 사용하는 이유는 무엇입니까? file 졸리운_곰 2021.02.28 1194
33 [데이터분석] AI 예측 및 이상 탐지를위한 시계열 데이터 전처리 file 졸리운_곰 2021.02.28 1035
32 [데이터분석] bitcoin analysis 비트 코인 시계열 데이터에 대한 AI 이상 탐지 file 졸리운_곰 2021.02.27 1600
31 [데이터분석 & 데이터 사이언스] How To Create a Data Science Portfolio Website file 졸리운_곰 2021.02.14 1831
30 [데이터수집4] 오픈 API 데이터 수집 (소셜미디어 데이터 수집) file 졸리운_곰 2020.06.12 1954
29 [데이터수집3] 관계형 데이터베이스 데이터 수집 file 졸리운_곰 2020.06.12 1321
28 [데이터수집2] 분산시스템 로그 수집 (빅데이터 수집) file 졸리운_곰 2020.06.12 1496
27 [데이터수집1] 웹 크롤링, 웹 스크래핑 file 졸리운_곰 2020.06.12 1806
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED