목차
- 관계형 데이터베이스의 정의
- 관계형 데이터베이스의 용어
- 정규화(normalization)란
1차 정규형식(1NF, first normal form)
2차 정규형식(2NF)
3차 정규형식(3NF)
- 관계형 데이터베이스의 용어
- 정규화(normalization)란
1차 정규형식(1NF, first normal form)
2차 정규형식(2NF)
3차 정규형식(3NF)
본문내용
다른 방법이 없는 것은 아니지만 지금으로써는 최선이라고 본다). 바로 복합 키를 설정하겠다는 뜻이다. 고객이 상품 주문 순서에 따른 필드를 하나 추가 하여 주문번호 필드와의 복합으로 기본 키 설정을 해 보면 다음의 테이블과 같이 된다.
위 결과와 같이 각 주문에 대한 순서를 정하여 두개의 필드를 기본 키 설정으로 하게 되면 각 행들을 고유하게 식별할 수 있게된다. 이렇게 해서 1차 정규화를 거쳤다. 중복 되는 데이터도 없고 각각의 필드들은 원소성을 유지하고 있다. (가변적인 데이터는 중복 데이터가 아니다. 표현 그대로 선택시 마다 발생한 데이터일 뿐이다. 이것이 우연히 다른 데이터와 같을 수가 있는 것일 뿐이다.)
2차 정규형식(2NF)
: 2차 정규 형식은 다음의 규칙을 따르게 된다.
ㄱ. 1NF의 규칙을 만족해야 한다.
ㄴ. 모든 열은 반드시 키 전체에 의존 해야 한다. 키의 일부에만 의존한다면 정규화에 어긋나는 테이블이 되는 것이다.
그러면 위 1NF의 결과로 만들어진 ‘주문’ 테이블을 보자. 여기에서 복합키로 설정된 기본 키 전체에 의존하는 것이 아니라 하나의 필드에 의존하는 필드들이 있다. 바로 주문날짜와 고객번호이다. 이 필드들은 주문순서와는 상관이 없이 반복되며 오직 주문번호에만 의존하고 있다. 이것을 해결하려면 새로운 테이블로 분할을 해야한다.
주문 테이블을 2차 정규형식에 의해 분할을 한 결과이다.
3차 정규형식(3NF)
: 이제 정규화의 마무리 단계이다(이후의 형식들은 학계 이외에서는 별로 쓰이지 않는다). 3차 정규형식은 다음의 규칙을 따른다.
ㄱ. 2NF의 규칙 만족해야 한다.
ㄴ. 키가 아닌 필드에 의존하는 필드가 없어야 한다.
ㄷ. 필드 연산에 의한 결과값을 가지는 필드가 없어야 한다.
[주문상세] 테이블을 보면 기본 키가 아닌 상품번호에 의존하는 필드들이 있다. 바로 상품명과 단가 필드들인데 이 필드들은 다른 테이블로 분할을 해야 한다.
이렇게 해서 3차 정규형식중 ‘키가 아닌 필드에 의존하는 필드가 없어야 한다’를 만족 시켰고 나머지 하나인 필드연산에 의한 결과값을 가지는 필드는 아예 만들질 않았다. 그러면 결과값 필드 라는 것이 무엇일까? 다음의 예제 테이블에서 이것을 알아보자
(예제테이블)
위 예제 테이블에서 보면 바로 합계 필드가 필드들의 연산에 의한 결과값 저장 필드가 되는 것이다. 하지만 이경우는 데이터 검색 속도 향상을 위해 나누는 경우가 종종 있다.
이유는 WHERE 합계 > 5000 이 WHERE 수량 * 판매가격 > 5000 보다 빠르게 수행이 된다. 이런 경우를 ‘역정규화’라 한다. 실제로 실무에서는 이렇게 혼합된 방식을 사용하기도 한다. 이런 경우들이 존재하긴 해도, 원칙은 당연히 정규화를 거치는 것이다. 관계형 데이터베이스라는 것 자체가 정규화를 염두에 두고 설계된 것이기 때문이다. 정규화에 어딘가가 맞지 않는다는 것은 데이터 무결성에도 오류가 있을 수 있고 관계형 데이터 베이스 환경에서의 성능 면에서도 문제가 될 수 있는 것이다.
지금까지의 정규화로써 생성된 테이블들은 다음과 같다.
[주문]
[고객]
[주문상세]
[상품]
이 테이블들을 관계 형성을 하는 다이어그램으로 나타내 보자
실습을 위해서 EM에서 ‘shop’ 이라는 데이터베이스를 생성을 한다(3M).
다이어그램을 실행후 다음의 테이블들을 생성하고 관계설정을 한다.
[주문상세]
주문번호 int
주문순서 tinyint
상품번호 varchar(10)
[상품]
상품번호 varchar(10) PK
상품명 varchar(20)
단가 money
설명 varchar(50)
자료 출처 http://blog.naver.com/hadesjjang/120018729878
위 결과와 같이 각 주문에 대한 순서를 정하여 두개의 필드를 기본 키 설정으로 하게 되면 각 행들을 고유하게 식별할 수 있게된다. 이렇게 해서 1차 정규화를 거쳤다. 중복 되는 데이터도 없고 각각의 필드들은 원소성을 유지하고 있다. (가변적인 데이터는 중복 데이터가 아니다. 표현 그대로 선택시 마다 발생한 데이터일 뿐이다. 이것이 우연히 다른 데이터와 같을 수가 있는 것일 뿐이다.)
2차 정규형식(2NF)
: 2차 정규 형식은 다음의 규칙을 따르게 된다.
ㄱ. 1NF의 규칙을 만족해야 한다.
ㄴ. 모든 열은 반드시 키 전체에 의존 해야 한다. 키의 일부에만 의존한다면 정규화에 어긋나는 테이블이 되는 것이다.
그러면 위 1NF의 결과로 만들어진 ‘주문’ 테이블을 보자. 여기에서 복합키로 설정된 기본 키 전체에 의존하는 것이 아니라 하나의 필드에 의존하는 필드들이 있다. 바로 주문날짜와 고객번호이다. 이 필드들은 주문순서와는 상관이 없이 반복되며 오직 주문번호에만 의존하고 있다. 이것을 해결하려면 새로운 테이블로 분할을 해야한다.
주문 테이블을 2차 정규형식에 의해 분할을 한 결과이다.
3차 정규형식(3NF)
: 이제 정규화의 마무리 단계이다(이후의 형식들은 학계 이외에서는 별로 쓰이지 않는다). 3차 정규형식은 다음의 규칙을 따른다.
ㄱ. 2NF의 규칙 만족해야 한다.
ㄴ. 키가 아닌 필드에 의존하는 필드가 없어야 한다.
ㄷ. 필드 연산에 의한 결과값을 가지는 필드가 없어야 한다.
[주문상세] 테이블을 보면 기본 키가 아닌 상품번호에 의존하는 필드들이 있다. 바로 상품명과 단가 필드들인데 이 필드들은 다른 테이블로 분할을 해야 한다.
이렇게 해서 3차 정규형식중 ‘키가 아닌 필드에 의존하는 필드가 없어야 한다’를 만족 시켰고 나머지 하나인 필드연산에 의한 결과값을 가지는 필드는 아예 만들질 않았다. 그러면 결과값 필드 라는 것이 무엇일까? 다음의 예제 테이블에서 이것을 알아보자
(예제테이블)
위 예제 테이블에서 보면 바로 합계 필드가 필드들의 연산에 의한 결과값 저장 필드가 되는 것이다. 하지만 이경우는 데이터 검색 속도 향상을 위해 나누는 경우가 종종 있다.
이유는 WHERE 합계 > 5000 이 WHERE 수량 * 판매가격 > 5000 보다 빠르게 수행이 된다. 이런 경우를 ‘역정규화’라 한다. 실제로 실무에서는 이렇게 혼합된 방식을 사용하기도 한다. 이런 경우들이 존재하긴 해도, 원칙은 당연히 정규화를 거치는 것이다. 관계형 데이터베이스라는 것 자체가 정규화를 염두에 두고 설계된 것이기 때문이다. 정규화에 어딘가가 맞지 않는다는 것은 데이터 무결성에도 오류가 있을 수 있고 관계형 데이터 베이스 환경에서의 성능 면에서도 문제가 될 수 있는 것이다.
지금까지의 정규화로써 생성된 테이블들은 다음과 같다.
[주문]
[고객]
[주문상세]
[상품]
이 테이블들을 관계 형성을 하는 다이어그램으로 나타내 보자
실습을 위해서 EM에서 ‘shop’ 이라는 데이터베이스를 생성을 한다(3M).
다이어그램을 실행후 다음의 테이블들을 생성하고 관계설정을 한다.
[주문상세]
주문번호 int
주문순서 tinyint
상품번호 varchar(10)
[상품]
상품번호 varchar(10) PK
상품명 varchar(20)
단가 money
설명 varchar(50)
자료 출처 http://blog.naver.com/hadesjjang/120018729878
키워드
추천자료
데이터베이스 설계
MS ACCESS 를 이용한 자바 데이터베이스 프로그래밍
데이터베이스 DB Design Project ( 삼국지 개념의 국가, 인재, 성의 정보를 관리하는 데이터...
액세스(ACCESS)로 구연한 온라인게임 데이터베이스 도큐먼트파일 (프로젝트)
C언어로 설계한 데이터베이스 프로그램(커피숍관리)
데이터베이스
[특허][이중출원][웹데이터베이스][표준화][진보성]특허의 개념, 특허의 분류, 특허의 요건, ...
데이터베이스 설계 최종 보고서 3조
데이터베이스, c언어
데이터베이스, c언어
데이터베이스 DBMS 언어의 종류 및 특징에 대해서 조사하세요.
인터넷 정보검색효율의 측정방법, 인터넷 정보검색효율과 최적화, 인터넷 정보검색효율과 인...
DBMS[데이터베이스 관리시스템]
[데이터베이스과제] MS Access(액세스) 여객기 관리 데이터베이스