Top 49 1 정규화 The 205 Correct Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 1 정규화 on Google, you do not find the information you need! Here are the best content compiled and compiled by the Toplist.maxfit.vn team, along with other related topics such as: 1 정규화 1차 정규화, SQL 정규화, BCNF 정규화, 정규화의 개념, 데이터베이스 정규화, 4정규화, 정규화 예제, 역정규화


관계형 데이터 모델링 – 6.2. 제1 정규화
관계형 데이터 모델링 – 6.2. 제1 정규화


정규화 (제1 정규화 ~ 제3 정규화) :: DanStory

  • Article author: mr-dan.tistory.com
  • Reviews from users: 4164 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 정규화 (제1 정규화 ~ 제3 정규화) :: DanStory DB를 공부하다 보면 가장 이해하기 어려웠던 부분이 정규화 였습니다. – 도메인 원자값 (1NF). – 부분적 함수 종속 제거 (2NF). …
  • Most searched keywords: Whether you are looking for 정규화 (제1 정규화 ~ 제3 정규화) :: DanStory DB를 공부하다 보면 가장 이해하기 어려웠던 부분이 정규화 였습니다. – 도메인 원자값 (1NF). – 부분적 함수 종속 제거 (2NF). DB를 공부하다 보면 가장 이해하기 어려웠던 부분이 정규화 였습니다. – 도메인 원자값 (1NF) – 부분적 함수 종속 제거 (2NF) – 이행적 함수 종속 제거 (3NF) – 결정자이면서 후보키가 아닌 것 제거 (BCNF) – 다치..
  • Table of Contents:

정규화 (제1 정규화 ~ 제3 정규화)

티스토리툴바

정규화 (제1 정규화 ~ 제3 정규화) :: DanStory
정규화 (제1 정규화 ~ 제3 정규화) :: DanStory

Read More

[ Database ] 제 1정규화, 제 2정규화, 제 3정규화 — 애송이의 코딩이야기

  • Article author: mjn5027.tistory.com
  • Reviews from users: 24013 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [ Database ] 제 1정규화, 제 2정규화, 제 3정규화 — 애송이의 코딩이야기 ​다음으로 제 3정규화는 제 2정규형을 만족하는 상태에서 이행 함수 종속을 제거하는 정규화 과정을 말한다. … 아래와 같이 어느 한 통신사의 고객 정보 … …
  • Most searched keywords: Whether you are looking for [ Database ] 제 1정규화, 제 2정규화, 제 3정규화 — 애송이의 코딩이야기 ​다음으로 제 3정규화는 제 2정규형을 만족하는 상태에서 이행 함수 종속을 제거하는 정규화 과정을 말한다. … 아래와 같이 어느 한 통신사의 고객 정보 … 정규화란? 데이터베이스의 데이터들을 최대한 중복을 제거하여 이상 현상 ( Anomaly ) 을 방지하​기 위한 기술이다. ​ 여기서 말하는 이상현상은 세 가지가 있는데 간략하게 설명하면 다음과 같다. ​​ ​ 갱신..리액트,리엑트,react,redux,saga,java,자바,설치,데이터베이스,오라클,sql,oracle,리덕스,리듀서,리덕스툴킷,redux,toolkit,database
  • Table of Contents:

블로그 메뉴

인기 글

태그

티스토리

정규화란

제 1정규화

제 2정규화

제 3정규화

티스토리툴바

[ Database ] 제 1정규화, 제 2정규화, 제 3정규화 — 애송이의 코딩이야기
[ Database ] 제 1정규화, 제 2정규화, 제 3정규화 — 애송이의 코딩이야기

Read More

제1정규형 – 위키백과, 우리 모두의 백과사전

  • Article author: ko.wikipedia.org
  • Reviews from users: 35884 ⭐ Ratings
  • Top rated: 4.3 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 제1정규형 – 위키백과, 우리 모두의 백과사전 제1정규형(1NF 또는 최소형)은 데이터베이스 정규화에서 사용하는 정규형중 하나이다. 관계형 데이터베이스의 테이블이 1NF이면 최소한 테이블은 관계이며, … …
  • Most searched keywords: Whether you are looking for 제1정규형 – 위키백과, 우리 모두의 백과사전 제1정규형(1NF 또는 최소형)은 데이터베이스 정규화에서 사용하는 정규형중 하나이다. 관계형 데이터베이스의 테이블이 1NF이면 최소한 테이블은 관계이며, …
  • Table of Contents:

관계를 의미하는 1NF 테이블[편집]

중복되는 항목[편집]

원자성(Atomicity)[편집]

1NF 이상의 정규화[편집]

참고 자료[편집]

인용 자료[편집]

더 읽을거리[편집]

외부 링크[편집]

제1정규형 - 위키백과, 우리 모두의 백과사전
제1정규형 – 위키백과, 우리 모두의 백과사전

Read More

[Database] 정규화(Normalization) 과정 (1NF, 2NF, 3NF, BCNF) | Hoyeon

  • Article author: hoyeonkim795.github.io
  • Reviews from users: 42417 ⭐ Ratings
  • Top rated: 3.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Database] 정규화(Normalization) 과정 (1NF, 2NF, 3NF, BCNF) | Hoyeon 제1 정규화 (1NF). 애트리뷰트의 도메인이 오직 원자값만을 포함하고, 튜플의 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야 한다. 즉, … …
  • Most searched keywords: Whether you are looking for [Database] 정규화(Normalization) 과정 (1NF, 2NF, 3NF, BCNF) | Hoyeon 제1 정규화 (1NF). 애트리뷰트의 도메인이 오직 원자값만을 포함하고, 튜플의 모든 애트리뷰트가 도메인에 속하는 하나의 값을 가져야 한다. 즉, … 정규화 과정
  • Table of Contents:

제1 정규화 (1NF)

제2 정규화 (2NF)

제3 정규화

BCNF(Boyce and Codd Normal Form) 결정자 중 후보키가 아닌 것들은 제거

[Database] 정규화(Normalization) 과정 (1NF, 2NF, 3NF, BCNF) | Hoyeon
[Database] 정규화(Normalization) 과정 (1NF, 2NF, 3NF, BCNF) | Hoyeon

Read More

[Database] 정규화(Normalization) 쉽게 이해하기 – MangKyu’s Diary

  • Article author: mangkyu.tistory.com
  • Reviews from users: 11605 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [Database] 정규화(Normalization) 쉽게 이해하기 – MangKyu’s Diary 제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다. 예를 들어 아래와 같은 고객 취미 테이블이 … …
  • Most searched keywords: Whether you are looking for [Database] 정규화(Normalization) 쉽게 이해하기 – MangKyu’s Diary 제1 정규화란 테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것이다. 예를 들어 아래와 같은 고객 취미 테이블이 … 지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normalization) [ 정규화..
  • Table of Contents:

티스토리 뷰

1 정규화(Normalization)

티스토리툴바

[Database] 정규화(Normalization) 쉽게 이해하기 - MangKyu's Diary
[Database] 정규화(Normalization) 쉽게 이해하기 – MangKyu’s Diary

Read More

[DB] 데이터베이스 정규화 (제1 정규화~ 제3 정규화 예시)

  • Article author: velog.io
  • Reviews from users: 26015 ⭐ Ratings
  • Top rated: 4.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [DB] 데이터베이스 정규화 (제1 정규화~ 제3 정규화 예시) 제1 정규화란, Atomic columns라는 조건에 만족하게끔 비정규형 테이블을 제1 정규형 테이블로 구조화하는 것을 말한다. 위의 비정규형 테이블을 보면, … …
  • Most searched keywords: Whether you are looking for [DB] 데이터베이스 정규화 (제1 정규화~ 제3 정규화 예시) 제1 정규화란, Atomic columns라는 조건에 만족하게끔 비정규형 테이블을 제1 정규형 테이블로 구조화하는 것을 말한다. 위의 비정규형 테이블을 보면, … 정규화: 관계형 데이터베이스 설계시 중복을 최소화하여 데이터를 구조화하는 프로세스. 다른 말로 정제되지 않은 데이터(표)를 관계형 데이터베이스에 어울리는 표로 만드는 것이다. 데이터베이스 변경시 이상 현상(anomaly) 제거 충분히 정규화 되지 않은 테이블의 데이터
  • Table of Contents:

TILDB

💁‍♀️ 데이터베이스 정규화

👉 제1 정규화

👉 제2 정규화

👉 제3 정규화

[DB] 데이터베이스 정규화 (제1 정규화~ 제3 정규화 예시)
[DB] 데이터베이스 정규화 (제1 정규화~ 제3 정규화 예시)

Read More

데이터베이스 정규화 이론 1. 정규화이론이란?

  • Article author: www.korecmblog.com
  • Reviews from users: 9648 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 데이터베이스 정규화 이론 1. 정규화이론이란? 정규화 이론이란? 정규화란 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스다. 정규화 이론은 RDB 설계 이론의 … …
  • Most searched keywords: Whether you are looking for 데이터베이스 정규화 이론 1. 정규화이론이란? 정규화 이론이란? 정규화란 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스다. 정규화 이론은 RDB 설계 이론의 … 정규화 이론이란? 정규화란 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스다. 정규화 이론은 RDB 설계 이론의 왕도라고 알려져있다. 따라서 정규화 이론이 RDB의 일부라고 생각할 수 있지만 이는 사실이 아니다. 관계형 모델 자체는 정규화 되어있지 않아도 똑같이 릴레이션 연산을 처리할 수 있다. 하지만 정규화 되어있지 않은 RDB의 릴레이션 연산은 어려워질 수 있다. 그렇다면 데이터베이스를 정규화 했을 때 우리가 얻을 수 있는 장점은 무엇일까? 바로 모순을 방지할 수 있다는 것이다. 모순이란 데이터가 논리적으로 불일치가 일어나는 상태이며, 이런 모순이 일어난 상태를 **변칙(Anomalies)**라고 하기도 한다. 즉, 이 변칙을 방지할 수 있는 설계 이론이 바로 정규화 이론이다. 모순, 이상 그렇다면 실제로 정규화 되어있지 않은 데이터베이스는 어떤 문제가 발생할 수 있을까? 다음과 같은 예를 생각해보자. 이름 학과 등록금 이도환 경영학과 400 노종수…
  • Table of Contents:

정규화 이론이란

모순 이상

정규형의 종류

데이터베이스 정규화 이론 1. 정규화이론이란?
데이터베이스 정규화 이론 1. 정규화이론이란?

Read More

[DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF)

  • Article author: rebro.kr
  • Reviews from users: 21809 ⭐ Ratings
  • Top rated: 3.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF) 제1 정규형은 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 한다. 원자값이란 더 이상 쪼개질 수 없는 단위를 말한다 … …
  • Most searched keywords: Whether you are looking for [DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF) 제1 정규형은 릴레이션에 속하는 속성의 속성 값이 모두 원자값(Atomic Value)만으로 구성되어야 한다. 원자값이란 더 이상 쪼개질 수 없는 단위를 말한다 … [목차] 1. 제1 정규형 2. 제2 정규형 3. 제3 정규형 4. BCNF 정규형이란 정규화된 결과를 말하며, 제1 정규형, 제2 정규형, 제3 정규형, BCNF, 제4 정규형, 제5 정규형이 있다. 실무적으로 제4, 제5 정규형은 잘..
  • Table of Contents:

태그

‘데이터베이스(DB)’ Related Articles

티스토리툴바

[DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF)
[DB] 8. 정규형 (1NF, 2NF, 3NF, BCNF)

Read More

[DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form)

  • Article author: limkydev.tistory.com
  • Reviews from users: 6995 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form) 제 1정규형은 한 릴레이션을 구성하는 모든 도메인이 원자값(Atomic Value)만으로 구성되도록 하는 정규형을 말합니다. *원자값 : 더이상 쪼개지지 않는 … …
  • Most searched keywords: Whether you are looking for [DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form) 제 1정규형은 한 릴레이션을 구성하는 모든 도메인이 원자값(Atomic Value)만으로 구성되도록 하는 정규형을 말합니다. *원자값 : 더이상 쪼개지지 않는 … 1. 정규화 정규화란.. 논리적 설계 단계에서 발생할 수 있는 종속으로 인한 삭제,갱신,삽입 이상(Anomaly)현상의 문제점을 해결하기 위해, 속성들 간의 종속 관계를 분석하여 여러 개의 릴레이션으로 분해하는 과..
  • Table of Contents:

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

[DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form)
[DataBase] 정규화(Normalization)_제1정규형(1NF: First Normal Form)

Read More

[DB] 📚 제 1-2-3 정규화 & 역정규화 💯 정리

  • Article author: inpa.tistory.com
  • Reviews from users: 18158 ⭐ Ratings
  • Top rated: 3.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [DB] 📚 제 1-2-3 정규화 & 역정규화 💯 정리 -> 제1차 정규화는 같은 성격과 내용의 컬럼이 연속적으로 나타나는 컬럼이 존재할 때, 해당 컬럼을 제거하고 기본테이블의 PK를 추가해 새로운 테이블을 … …
  • Most searched keywords: Whether you are looking for [DB] 📚 제 1-2-3 정규화 & 역정규화 💯 정리 -> 제1차 정규화는 같은 성격과 내용의 컬럼이 연속적으로 나타나는 컬럼이 존재할 때, 해당 컬럼을 제거하고 기본테이블의 PK를 추가해 새로운 테이블을 … 정규화란? ERD내에서 중복요소를 찾아 제거해 나가는 과정  – 중복된 데이터는 많은 문제를 일으킨다. ​ 3차 정규화 정도만 알면 설계하는데 무리가 없다. – 중복을 최소화 -> 완전히 없애는게 아니라 어느정도..
  • Table of Contents:

정규화란

데이터베이스 정규화 절차

역정규화

방문해 주셔서 감사드립니다

공지사항

최근 댓글 new

최근 글 new

인기 글 hot

티스토리툴바

[DB] 📚 제 1-2-3 정규화 & 역정규화 💯 정리
[DB] 📚 제 1-2-3 정규화 & 역정규화 💯 정리

Read More


See more articles in the same category here: Top 287 tips update new.

정규화 (제1 정규화 ~ 제3 정규화)

DB를 공부하다 보면 가장 이해하기 어려웠던 부분이 정규화 였습니다.

– 도메인 원자값 (1NF)

– 부분적 함수 종속 제거 (2NF)

– 이행적 함수 종속 제거 (3NF)

– 결정자이면서 후보키가 아닌 것 제거 (BCNF)

– 다치 종속 제거 (4NF)

– 조인 종속성 이용 (5NF)

정보처리기사를 공부하면서 암기했던 도부이결다조를 외웠지만 사실 이렇게 외우면 시간지나면 까먹기 마련입니다.

또 헷깔려서 여기저기 내용을 찾아보면 각 정규화 마다 다른 테이블로 진행하여 이해는 되지만 뭔가 찝찝한(?)기 분이들어

한개의 테이블을 정규화를 통해 변화해 가는 모습을 통해 쉽게 이해하고자 합니다.

그럼 시작!

* 제 1 정규화 (비정규형 -> 1NF)

수강내역 학번 이름 메일 대학 전공 수강학기 과목명 성적 제한인원 101 Tom [email protected] 이과대학 생물학과 2016.1 생물1 A 20 101 Tom [email protected] 이과대학 생물학과 2016.1 생물2 B 30 102 Dan [email protected] IT대학 컴퓨터과 2016.2 C++ A 40 102 Dan [email protected] IT대학 컴퓨터과 2017.1 C언어 C 40 103 Jin [email protected] 정경대학 경제학과 2017.2 경제 A 30

그림1) 비정규형 테이블

제 1정규형을 갖추려면 도메인 원자값 이라는 조건이 만족해야 합니다.

도메인 원자값을 만족시킨다는 것은 아래와 조건과 같습니다.

1) 반복 그룹이 존재하면 안된다.

– Tom이라는 학생에 대한 정보인 이름,메일,대학,전공은 초기 설정하면 이후 계속 따라오게 됩니다.

그렇기 때문에 해당 정보는 수강 내역을 확인하기 위해서 계속 반복되기에 테이블을 분리합니다.

2) 모든 행은 식별자로 완전하게 구분되어야 한다.

그렇다면 이 비정규형 테이블 예제를 1정규화 시켜 보도록 정리해 보도록 하겠습니다.

1. 반복되는 부분을 체크합니다. -> 학번, 이름, 메일 ,대학, 전공 (Prime key : 학번)

2. 반복되는 부분과 그렇지 않은 부분을 분리합니다. (단, prime key는 그대로 가져갑니다.)

3. 테이블을 나눈 후 반복되는 행은 삭제합니다.

이 과정을 거치면 아래와 같은 테이블로 변경이 됩니다.

학생 수강내역 학번 이름 메일 대학 전공 학번 수강학기 과목명 성적 제한인원 101 Tom [email protected] 이과대학 생물학과 101 2016.1 생물1 A 20 102 Dan [email protected] IT대학 컴퓨터과 101 2016.1 생물2 B 30 103 Jin [email protected] 정경대학 경제학과 102 2016.2 C++ A 40 102 2017.1 C언어 C 40 103 2017.2 경제 A 30

그림2) 제 1정규화 이후 테이블1

그런데, ‘학생’ 테이블은 2번 조건인 “모든 행은 식별자로 완전하게 구분되어야 한다. ” 라는 조건이 만족하는 반면

수강내역은 prime key인 ‘학번’만으로는 모든 행이 구분되지 않습니다.

그렇기 때문에 추가적으로 key를 설정 해 주어야 합니다.

그래서 ‘수강 내역’ 테이블의 ‘학번’+’수강학기’+’과목명’을 복합하여 식별자로 두면서 문제를 해결하면 제 1 정규화는 마무리 됩니다.

* 제 1 정규형 테이블

학생 수강내역 학번 이름 메일 대학 전공 학번 수강학기 과목명 성적 제한인원 101 Tom [email protected] 이과대학 생물학과 101 2016.1 생물1 A 20 102 Dan [email protected] IT대학 컴퓨터과 101 2016.1 생물2 B 30 103 Jin [email protected] 정경대학 경제학과 102 2016.2 C++ A 40 102 2017.1 C언어 C 40 103 2017.2 경제 A 30

그림3) 제 1정규화 이후 테이블2

* 제 2 정규화 – 부분함수 종속 제거

필요 충분 조건 : 후보키 K와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K 전체를 참조해야만 하는 경우 1NF 테이블은 2NF이다.

뭔 소리야?

간단하게 말하면 Key가 아닌 값들은 모두 key에 종속 되어야한다는 말입니다.

이래도 말이 어렵기 때문에 그림으로 이해해보도록 하져

조건은 다음과 같습니다.

1) key가 아닌 컬럼(속성)은 key 컬럼이에 종속 되어야 한다.

2) key가 아닌 컬럼(속성)은 key 컬럼에 만 ! 종속 되어야 한다. 그래서

3) 복합키 일때만! 제 2정규형의 조건이 되는것이지요. (복합키가 아니면 제 2정규형을 넘어 제 3정규형을 보면 됩니다)

TiP) 결과적으로 Key 값에 주목하는것이 제2 정규화의 핵심!

제 1정규형을 마친 ‘수강내역’ 테이블을 보겠습니다.

수강내역 학번 수강학기 과목명 성적 제한인원 101 2016.1 생물1 A 20 101 2016.1 생물2 B 30 102 2016.2 C++ A 40 102 2017.1 C언어 C 40 103 2017.2 경제 A 30

그림 4) 제2 정규화 대상인 ‘수강내역’ 테이블

‘수강내역’ 테이블은 ‘학번+수강학기+ 과목명'(이하 학+수+과)으로 이루어진 복합키 입니다.

그러면 제2 정규형에 만족을 하려면 복합키인 학+수+과에 성적과 제한 인원이 확실하게 종속 돼야 한다는 것인데

살펴봅시다.

‘성적’의 경우는 학번과 수강학기 과목명을 알아야 해당 학기 성적을 알 수 있기때문에 key에 종속이 되는것을 확인했는데,

‘제한인원’의 경우는 학번과는 딱히 관계가 없어 보입니다.

그렇기 때문에 이것을 한번 더 나눌 수 있다는 것! 이겠지요

그러면 분리 해봅시다.

Key ‘수강학기+ 과목명’ non-key ‘제한인원’으로 구성된 테이블 ‘개설 과목’으로 분리가 됩니다.

개설과목 수강학기 과목명 제한인원 2016.1 생물1 20 2016.1 생물2 30 2016.2 C++ 40 2017.1 C언어 40 2017.2 경제 30

그림5) 새로 생성된 ‘개설과목’ 테이블

그래서 제 2정규화를 하게 되면 수강내역 테이블은 수강내역 + 개설과목 2개 테이블로 나누어 집니다.

수강내역 개설과목 학번 수강학기 과목명 성적 수강학기 과목명 제한인원 101 2016.1 생물1 A 2016.1 생물1 20 101 2016.1 생물2 B 2016.1 생물2 30 102 2016.2 C++ A 2016.2 C++ 40 102 2017.1 C언어 C 2017.1 C언어 40 103 2017.2 경제 A 2017.2 경제 30

그림6) 제2 정규화 이후 테이블

이렇게 제2 정규형 테이블이 되었습니다.

컬럼이 많을경우 경우의수를 다 따져가며 확인해야하는 불편함이 있겠네여

학번/수강학기/과목명/ 학번+수강학기/수강학기+과목명/학번+과목명/…. ㅠㅠ

복합키가 많아지면 귀찮아질듯 ㅎ

* 제 3정규화 – 이행적 함수 종속 제거

필요 충분 조건 : 제 2정규형을 만족하고, 테이블 내의 모든 속성이 키에만 의존하며 다른 후보키에 의존하지 않는다.

정리하면

1) 모든 key가 아닌 컬럼(non-key)은 key 컬럼(속성)에 완전히 종속 되어야 한다.

2) 모든 non-key 컬럼은 key 컬럼(속성)에만 종속 되어야 한다.

3) 그래서 key가 아닌 값에 주목!

제 2정규형 조건을 만족하는 ‘학생’ 테이블을 확인해보져

학생 학번 이름 메일 대학 전공 101 Tom [email protected] 이과대학 생물학과 102 Dan [email protected] IT대학 컴퓨터과 103 Jin [email protected] 정경대학 경제학과

그림7) 제3 정규화 대상인 ‘학생’ 테이블

위에서 보게되면 non key 컬럼인 ‘대학’과 ‘전공’을 보게되면 key가 아닌 컬럼인데도 불구하고

종속 관계가 성립이 됩니다.

‘대학’의 경우 ‘전공’을 포함하기 때문입니다.

즉, 생물학과면 무조건 이과대학에 포함되고, 컴퓨터 학과의 경우 IT대학의 부분으로 포함이 되지요.

정규화가 잘 된 테이블은 갑-을 관계만 있는 것 입니다.

그런데 ‘학생’테이블의 경우 갑(key:학번)-을(non-key:대학)-병(non-key : 전공) 관계가 있기 때문에 이 관계를 깔끔하게 정리 해주어야 합니다.

학번/이름/메일/전공 – 대학/전공으로 테이블이 나뉘게 됩니다.

대학정보 전공 대학 생물학과 이과대학 컴퓨터과 IT대학 경제학과 정경대학 정치학과 정경대학

그림8) 제3 정규화로 인해 생성된 ‘대학정보’ 테이블

‘대학정보’ 테이블의 경우 대학이 전공을 포함합니다. 하지만 key는 테이블의 튜플을 구분해 낼 수 있어야 합니다.

그래서튜플을 구분하기 위해서는 ‘전공’이 key 값이 되겠지요.

‘대학’ 정보를 참조하기 위해서는 학생 테이블의 ‘전공’을 외래키(foreign key)로 설정하여 ‘대학정보’ 테이블을 참조 할 수 있게 해야 합니다.

그래서 제 3정규화를 마친 ‘학생’ 테이블은 다음과 같이 분리 하게 됩니다.

학생 대학정보 학번 이름 메일 전공(FK) 전공 대학 101 Tom [email protected] 생물학과 생물학과 이과대학 102 Dan [email protected] 컴퓨터과 컴퓨터과 IT대학 103 Jin [email protected] 경제학과 경제학과 정경대학 정치학과 정경대학

그림9) 제3 정규화를 마친 ‘학생’ 테이블

* 결론!! 테이블 정리

그래서 비정규형 테이블이였던 ‘학생’ 테이블을 제 3정규화까지 마치게 될 경우 아래와 같이 정리가 됩니다.

– 비정규형 테이블

수강내역 학번 이름 메일 대학 전공 수강학기 과목명 성적 제한인원 101 Tom [email protected] 이과대학 생물학과 2016.1 생물1 A 20 101 Tom [email protected] 이과대학 생물학과 2016.1 생물2 B 30 102 Dan [email protected] IT대학 컴퓨터과 2016.2 C++ A 40 102 Dan [email protected] IT대학 컴퓨터과 2017.1 C언어 C 40 103 Jin [email protected] 정경대학 경제학과 2017.2 경제 A 30

그림10) 비정규형

– 제 1정규형 테이블 (제1 정규화)

학생 수강내역 학번 이름 메일 대학 학번 수강학기 과목명 성적 제한인원 101 Tom [email protected] 이과대학 101 2016.1 생물1 A 20 102 Dan [email protected] IT대학 101 2016.1 생물2 B 30 103 Jin [email protected] 정경대학 102 2016.2 C++ A 40 102 2017.1 C언어 C 40 103 2017.2 경제 A 30

– 제 2정규화 테이블 (제2 정규화 이후)

수강내역 개설과목 학번 수강학기 과목명 성적 수강학기 과목명 제한인원 101 2016.1 생물1 A 2016.1 생물1 20 101 2016.1 생물2 B 2016.1 생물2 30 102 2016.2 C++ A 2016.2 C++ 40 102 2017.1 C언어 C 2017.1 C언어 40 103 2017.2 경제 A 2017.2 경제 30

– 제 3정규화 테이블 (제 3 정규화 이후)

학생 대학정보 학번 이름 메일 전공(FK) 전공 대학 101 Tom [email protected] 생물학과 생물학과 이과대학 102 Dan [email protected] 컴퓨터과 컴퓨터과 IT대학 103 Jin [email protected] 경제학과 경제학과 정경대학 정치학과 정경대학

– 최종 테이블 학생 대학정보 학번 이름 메일 전공(FK) 전공 대학 101 Tom [email protected] 생물학과 생물학과 이과대학 102 Dan [email protected] 컴퓨터과 컴퓨터과 IT대학 103 Jin [email protected] 경제학과 경제학과 정경대학 정치학과 정경대학

수강내역 개설과목 학번 수강학기 과목명 성적 수강학기 과목명 제한인원 101 2016.1 생물1 A 2016.1 생물1 20 101 2016.1 생물2 B 2016.1 생물2 30 102 2016.2 C++ A 2016.2 C++ 40 102 2017.1 C언어 C 2017.1 C언어 40 103 2017.2 경제 A 2017.2 경제 30

결과적으로 시험에 잘 나오는 정규화는 1~3 정규화 입니다. 그래서 이렇게 하나의 이야기처럼 정리해두면 머릿속에 오래 남을것 같아 기록해둡니다 ㅎㅎ

다음편에 BCNF부터 제5 정규화까지 정리해보도록 하겠습니다. (사실 제3정규화까지 잘 되었다면 나머지 4,5 정규형도 만족하게 되는 경우가 많기 때문에 BCNF ~ 제5 정규화는 각 예시에 어울리는 테이블로 정리 해볼 예정입니다!)

[ Database ] 제 1정규화, 제 2정규화, 제 3정규화

반응형

정규화란?

데이터베이스의 데이터들을 최대한 중복을 제거하여 이상 현상 ( Anomaly ) 을 방지하​기 위한 기술이다.

여기서 말하는 이상현상은 세 가지가 있는데 간략하게 설명하면 다음과 같다.

​​

갱신 이상 ( Modification Anomaly )

중복된 데이터 중 일부를 갱신할 때 의도치 않은 데이터가 갱신됨으로써 생기는 데이터의 불일치

삽입 이상 ( Insertion Anomaly )

새 데이터를 삽입할 때 의도치 않은 데이터가 삽입됨으로써 생기는 데이터의 불일치

삭제 이상 ( Deletion Anomaly )

데이터를 삭제할 때 의도치 않은 데이터까지 삭제됨으로써 생기는 데이터의 불일치

이러한 이상 현상을 해결하기위해 데이터를 잘게 잘게 쪼개나간다고 생각하면 쉽다.

이 정규화는 단계별로 나누어지는데 각 단계별로 알아보자.

제 1정규화

먼저 아래와 같은 학생 테이블이 있다고 가정해보자

[ 학생 ] 테이블

현재 테이블은 속성 하나는 하나의 속성값만을 가져야 한다는 1차 정규형에 위배된다.

수강과목컬럼을 보면 철수가 수학과 과학의 속성값 두 개를 가지고 있음을 알 수 있다.

이를 쪼개주는 것을 원자값을 갖는다고 하며 이것이 제 1정규화이다.

제 1정규화를 거치면 아래와 같다.

[ 학생 ] 테이블

제 2정규화

​방금 제 1정규화를 거친 테이블을 보면

중복데이터로 인해 학생이름으로 ROW를 구분할 수 없고 나이 또한 ROW를 구분할 수 없다.

학생이름과 수강과목 두 가지를 합친 [ 학생이름, 수강과목 ] 기본키로만 각 ROW를 구분할 수 있다.

이는 다르게 말해 학생이름과 수강과목을 알면 나이를 알 수 있다는 말이 되기도 하는데

여기서 문제가 나이는 학생이름에 종속되어져 있기에 학생이름 하나만 알더라도 나이를 알 수 있다는 것이다.

이렇게 기본키 중에 특정 컬럼에만 종속된 컬럼이 존재할 경우 2차 정규형에 위배된다.

이를 해결하기 위해 제 2정규화를 실행하며 제 2정규화를 거치면 아래와 같다.

[ 학생 ] 테이블

[ 과목 ] 테이블

이렇게 제 1정규화와 제 2정규화를 알아보았다.

제 3정규화

​다음으로 제 3정규화는 제 2정규형을 만족하는 상태에서 이행 함수 종속을 제거하는 정규화 과정을 말한다.

아래와 같이 어느 한 통신사의 고객 정보 테이블이 있다고 가정하자.

[ 고객정보 ] 테이블

여기서 고객 번호를 알면 각 컬럼의 속성 값들을 찾아낼 수 있다. 그런데 자세히 보면 등급은 고객 번호에 의해 결정되어지고

할인율은 등급에 의해 결정되어진다. 이는 논리적으로 보면 할인율은 고객 번호에 의해 결정되어지는 아이러니한 모습을 나타내는 셈이다.

이 상황처럼 X->Y, Y->Z 일 때 X->Z 를 만족해버리면 이행 함수 종속이 발생한다고 한다. 이를 제거하는 것이 제 3정규화.

제 3정규화를 거치면 다음과 같이 테이블을 나타낼 수 있다.

[ 등급 ] 테이블

[ 고객정보 ] 테이블

이렇게 하면 제 2정규형을 만족하면서 이행 함수 종속을 제거한 제 3정규형의 상태가 되는 것이다.

​​

정규화는 데이터베이스를 사용하는데 있어 필수불가결한 요소이다.

제대로 숙지해 좀 더 이쁘고 말랑말랑한 데이터베이스를 만들어보도록 하자.

위키백과, 우리 모두의 백과사전

제1정규형(1NF 또는 최소형)은 데이터베이스 정규화에서 사용하는 정규형중 하나이다. 관계형 데이터베이스의 테이블이 1NF이면 최소한 테이블은 관계 이며, 중복되는 항목이 없어야 한다[2]이다.

“중복되는 항목이 없다”에 대한 정의는 학자마다 주장이 조금씩 달라서, 1NF를 만족하는 테이블에 대해서의 정확한 정의는 없다. 대부분의 학자들(에드거 F. 커드, Ramez Elmasri, Shamkant B. Navathe[3])은 1NF를 만족하는 테이블은 관계 값을 가지는 항목(테이블 내 테이블)을 허용하지 않으나, 일부 학자들(크리스토퍼 J. 데이트 등)은 이를 허용하기도 한다.

제1정규형은 다음 표준을 요구한다.

각 테이블에서 중복을 제거한다.

각각 관계된 데이터 모임을 위하여 분리된 테이블을 만든다.

각각 관계된 데이터 모임을 기본키로 식별한다.

관계를 의미하는 1NF 테이블 [ 편집 ]

크리스토퍼 J. 데이트에 의하면 테이블은 “어떤 관계와 동일 구조”이면 1NF이다. 이는 아래의 5가지 조건을 충족한다는 의미이다:

열에는 위-아래의 순서가 없다. 행에는 좌-우의 순서가 없다. 중복되는 열이 없다. 모든 열과 행의 중복지점에는 (열과 행의)해당되는 분야에서 한 개의 값을 가진다. 모든 행은 규칙적이다. [즉, 열은 열ID, 오브젝트ID, 숨어있는(hidden) 타임 스탬프등과 같은 숨어있는 요소(행)를 가지지 않는다.]

— Chris Date, “What First Normal Form Really Means”, pp. 127–8

이런 조건을 충족하지 않는 테이블은 엄격히 보면 관계형이 아니라는 의미이며, 1NF가 아니다.

1NF의 정의를 충족하지 못하는 테이블(또는 뷰)의 예제들을 보자면,

유니크 키가 없다. 이런 테이블은 열의 중복을 허용하기 때문에, 3번 조건을 위배한다.

뷰의 결과가 특정한 순서를 가지게 정의한 뷰. 뷰의 측면에서 열의 정렬이 본질적이고 의미가 있을 경우. [5] 이는 1번 조건을 위배한다. 관계에서의 튜플은 서로간의 순서가 없다.

이는 1번 조건을 위배한다. 관계에서의 튜플은 서로간의 순서가 없다. 최소한 하나의 Null 속성을 가지는 테이블. Null 속성은 모든 행의 영역에서 꼭 한 개의 값만을 가져야 하는 4번 조건을 위배한다. 하지만 4번 조건은 논란이 많은데, 에드거 F. 커드는 최근의 관계형 모델에 관한 견해에서 Null에 대한 명시적인 조항을 만들었었다.[7]

중복되는 항목 [ 편집 ]

많은 사람들이 1NF를 정의하는 특성이라고 생각하는 에드거 F. 커드의 4번째 조건은 중복되는 항목에 관한 조건이다. 아래의 시나리오들은 데이터베이스 디자인이 1NF를 위배하는 중복되는 항목을 가지는 경우이다.

영역과 값 [ 편집 ]

초보 디자이너가 고객의 이름과 전화번호를 기록하고자 한다. 그는 아래와 같이 테이블을 정의하였다:

Customer Customer ID First Name Surname Telephone Number 123 Robert Ingram 555-861-2025 456 Jane Wright 555-403-1659 789 Maria Fernandez 555-808-9633

디자이너는 이후에 어떤 고객들은 전화번호를 여러개 가지고 있다는 사실을 알게 되었다. 그는 아래와 같이 단순히 가장 간단한 방법을 생각하여 “전화번호”항목에 여러 개의 값을 두었다:

Customer Customer ID First Name Surname Telephone Number 123 Robert Ingram 555-861-2025 456 Jane Wright 555-403-1659

555-776-4100 789 Maria Fernandez 555-808-9633

하지만 전화번호 행에는 전화번호가 아닌 전화번호와 유사한 도메인(12개의 길이를 가지는 문자열)이 정의되게 된다. 1NF(그 점에 있어서 관계형 데이터베이스도 마찬가지로)는 행 도메인에서 정확하게 한 개의 값만을 허용하기 때문에 위의 테이블은 1NF가 아니다.

행을 가로지르며 중복되는 항목 [ 편집 ]

그래서 이 디자이너는 이번에는 이 제한을 충족하기 위해 여러개의 전화번호 행을 두었다:

Customer Customer ID First Name Surname Tel. No. 1 Tel. No. 2 Tel. No. 3 123 Robert Ingram 555-861-2025 456 Jane Wright 555-403-1659 555-776-4100 555-403-1659 789 Maria Fernandez 555-808-9633

하지만 이 디자인 역시 Null값을 가지는 행이 있기 때문에 크리스토퍼 J. 데이트의 1NF정의에 위배된다. 뷰가 Null 행을 허용하여도 이 디자인은 엄격히 보자면 1NF가 아니다. Tel. No. 1, Tel. No. 2., Tel. No. 3. 행은 완전히 동일한 도메인과 의미를 가진다. 위와 같이 전화번호 행을 3개로 인위적으로 나누게 된다면 아래와 같은 논리적인 문제들을 낳게 된다:

테이블 질의시 어려움. “어느 고객이 전화번호 X 를 가지고 있는가?”, “어떤 고객들끼리 같은 전화번호를 공유하는가?” 질의들은 답하기 어렵다.

를 가지고 있는가?”, “어떤 고객들끼리 같은 전화번호를 공유하는가?” 질의들은 답하기 어렵다. RDBMS에서 고객-전화번호의 유일성을 확보하기 어렵다. 고객 789가 실수로 Tel. No. 2값이 Tel. No. 1값과 동일한 값이 들어갈 수 있다.

전화번호 개수의 제한. 어떤 고객이 4개의 전화번호를 가진다면 4번째 전화번호는 기록될 수 없다.이는 데이터베이스 디자인이 비즈니스 프로세스를 제한하고 있다는 의미인데, 사실 이상적으로는 반대가 되어야 한다.

행 내에서의 중복되는 항목 [ 편집 ]

그래서 이 디자이너는 이번에는 이 제한을 충족하기 위해 한개의 전화번호 행을 두면서 전화번호 행 길이를 여러개의 전화번호를 기록하기 충분한 길이로 변경하였다 :

Customer Customer ID First Name Surname Telephone Numbers 123 Robert Ingram 555-861-2025 456 Jane Wright 555-403-1659, 555-776-4100 789 Maria Fernandez 555-808-9633

이 디자인은 1NF와 일치하지만, 디자인상의 문제점이 여러개 있다.전화번호는 의미상으로 모호해져서 전화번호를 표현할 수도, 전화번호들의 리스트를 표현할 수도, 심지어는 아무거나 표현할 수도 있다.”어떤 고객들이 같은 전화번호를 공유하는가?” 질의는 답하기 더욱 어려워 졌으며, 전화번호와 전화번호들의 리스트를 수집해야 할 필요성이 생겼다. RDBMS 내에서 전화번호에 대한 의미적인 제한을 정의하는 것 또한 어려워 졌다.

1NF를 충족하는 디자인 [ 편집 ]

1NF 측면에서 모호하지 않은 디자인은 2개의 테이블을 이용하는 것이다: 고객 명 테이블과 고객 전화번호 테이블이다.

Customer Name Customer ID First Name Surname 123 Robert Ingram 456 Jane Wright 789 Maria Fernandez

Customer Telephone Number Customer ID Telephone Number 123 555-861-2025 456 555-403-1659 456 555-776-4100 789 555-808-9633

이 디자인에서는 전화번호들의 중복되는 항목은 나오지 않는다. 대신 고객 대 전화번호의 연결이 레코드에 나온다. 고객 ID가 키 항목으로, “부모-자식” 또는 “일대 다(1:M)” 관계가 2개의 테이블사이에 존재하게 되는데, 이는 (“부모” 테이블에 있는) 고객 열이 (“자식” 테이블에 있는) 전화번호 열을 여러개 가질 수 있기 때문이다. 참고로 이 디자인은 제 2 정규형과 제 3 정규형을 충족하기도 한다.

에드거 F. 커드는 1NF의 정의에서 원자성에 대해서 언급하고 있다.에드거 F. 커드는 “관계가 정의된 도메인의 값은 DBMS에 대하여 원자성을 가져야 한다.”[9] 고 하였다. 에드거 F. 커드는 원자성을 갖는 값은 “(특수한 어떤 함수를 제외하고) DBMS에 의해서 더 작은 값으로 쪼개 지지 않는다”[10] 고 하였다. 이는 한 항목이 하나 이상의 자료형으로 나뉘면서 DBMS가 분리된 다른 부분에 대해서 의존적이지 않아야 한다는 의미이다.

허그 다윈과 크리스토퍼 J. 데이트는 에드거 F. 커드의 “원자성을 갖는 값”의 정의가 모호하며, 이런 모호성이 1NF를 이해하는데 크게 방해된다고 제안하였다.[11] “값이 나뉘지 않아야 한다”라는 정의에 해당하는 데이터형이 아래와 같은 이유로 거의 존재하지 않기 때문에 문제가 많다:

문자열도 원자성이 없다. RDMS가 일반적으로 작은 문자열로 나눌 수 있는 연산자를 제공하기 때문이다.

고정 소수점 수자도 원자성이 없다. RDBS가 일반적으로 이를 정수와 나머지 부분으로 나눌 수 있는 연산자를 제공하기 때문이다.

크리스토퍼 J. 데이트는 “원자성이란 절대적인 정의가 없다”: 고 하였다. 값은 목적에 따라서 원자성을 가질 수 도 있으며, 다른 목적을 위해서 나뉠 수도 있다. 이런 의견을 받아들이면 1NF의 정의에 원자성은 관련이 없어진다. 임의의 편한 자료형(문자열, 숫자형, 배열, 테이블 등)으로 정의된 행이라도 1NF 테이블일 수 있지만, 항상 그런 것은 아니다(예를 들어서, 고객 이름을 성과 이름으로 나누어야 할 때가 있다.) 크리스토퍼 J. 데이트는 심지어 관계 값을 갖는 속성, 즉 항목 안에 테이블이 있는 경우도 드문 경우에 유용하다고 하였다.

1NF 이상의 정규화 [ 편집 ]

어떤 테이블이 제 2 정규형(2NF)이거나 그 이상이면 정의에 따라서 1NF이기도 하다.(어떤 정규형이라도 그 이전 정규형의 충분조건이 된다.) 반대로 어떤 테이블이 1NF이면 2NF가 아닐수도 있다. 2NF이면 제 3 정규형일 수도 있고, 아닐 수도 있다.

1NF 이상의 정규형은 디자인 문제로 인하여 그 안의 데이터의 완전성을 절충해야 하는 상황을 고려하여야 한다. 예를 들어 아래의 테이블은 1NF이지만 2NF가 아니며, 이에 따라서 논리적 불일치에 있어서 취약하다:

Subscriber Email Addresses Subscriber ID Email Address Subscriber First Name Subscriber Surname 108 [email protected] Steve Wallace 252 [email protected] Carol Robertson 252 [email protected] Carol Robertson 360 [email protected] Harriet Clark

이 테이블의 키는 {Subscriber ID, Email Address}이다.

Carol Robertson이 결혼을 해서 성을 바꾼다면, 2개의 열을 변경하여야 한다. 1개의 열만 변경할 경우, 모순이 생긴다: “고객 252의 이름은 무엇인가?”에 대한 질문에 2개의 혼란스러운 답변이 생긴다. 2NF는 이 문제를 해결한다. Carol Robertson의 레코드는 그녀가 1개 이상의 이메일 주소를 사용함에 따라서 테이블에서 2개로 나타나는 것을 주목하기 바란다.

1NF 이상의 정규화에 대해서 생각해볼 수 있는 실질적인 방법은 레코드(행)들과 엔티티(테이블) 또는 속성(열)의 관계에 대해서 끊임없이 질문해 보는 것이다. 예를 들어, 이용자 레코드가 많은 이메일 주소 레코드와 관계가 있는가? 하나의 이메일 주소가 많은 이용자들과 관계가 있는가? 위의 테이블에서는 Carol Robertson이 하나 이상의 이메일 주소를 가지고 있었다. 하나의 이용자는 다수의 이메일 주소를 가질수 있고, 다수의 이메일 주소는 하나의 이용자를 가질수 있으므로 위의 테이블운 이용자와 이메일 주소간에 일대다(1:M) 관계가 있다고 답할 수 있다. 이제 ID, 성, 이름을 가지고 ID를 주 키로 하는 “이용자 테이블” 과 ID, 이메일을 가지고 ID를 주 키로 하는 “이용자 이메일 테이블”이라는 두 테이블이 있다면 ID를 주 키로 하는 “이용자 테이블” 과 ID를 외래 키로 하는 “이용자 이메일 테이블” 간에 1대 다 관계가 생기며, 이 테이블들도 1NF이게 된다.

참고 자료 [ 편집 ]

인용 자료 [ 편집 ]

더 읽을거리 [ 편집 ]

So you have finished reading the 1 정규화 topic article, if you find this article useful, please share it. Thank you very much. See more: 1차 정규화, SQL 정규화, BCNF 정규화, 정규화의 개념, 데이터베이스 정규화, 4정규화, 정규화 예제, 역정규화

Leave a Comment