📕관계 스키마 설계의 품질을 확인하는 기준
- 스키마 내의 어트리뷰트의 의미를 분명하게 해라. (이름을 모호하게 하지말라는 뜻?)
- 외래키는 겹쳐도 되지만 그 외의 속성은 이름을 헷갈리게 선언하면 혼동하기 쉽다.
- 튜플내에서 재사용 정보를 최소화해라.
- 재사용된 정보를 저장하게 되면
- 공간의 낭비
- Update anomalies(갱신이상)
- Insert anomalies
- 원하지 않는 자료가 삽입되거나, key가 없어 삽입하지 못하는 문제점(= 불필요한 데이터를 추가해야 삽입할수 있음)
- Deletion anomalies
- 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점
- Modification anomalies
- 일부만 변경하여 데이터 불일치하는 모습, 또는 중복되는 튜플이 존재하게 되는 문제점
- Insert anomalies
- 재사용된 정보를 저장하게 되면
- 튜플내에서 널 값을 최소화 해라.
- Null값이 있는 어트리뷰트는 relation을 분리한다.(고유키를 같이 주면서)
- Null값이 존재하는 이유
- 어트리뷰트가 이용가능하지 않거나 타당하지 않을 때,
- 속성에 대한 값을 모를때 (존재는 함)
- 값이 존재하지만, 이용가능하지 않을 때
- 존재하지 않는 튜플의 생성 가능성을 허용하지 마라.
- 안좋은 관계형 데이터베이스는 특정 join에서 말도 안되는 결과를 만들어낸다. ex) CARTESIAN
- lossless join : 원본데이터를 유지하면서 의미 있는 결과를 만들어 냄.
- 존재하지 않는 튜플은 natural join에 의해 만들어질 수 있다. -> 어떠한 비용을 지불해서라도 막아야 함.
💡존재하지 않는 튜플이 뭔지 헷갈리실수 있을텐데 그림을 보면 이해하기 쉬울겁니다

R에서 R1과 R2를 잘못 분해해서 조인한 경우 R에서 없던 튜플이 생성될 가능성이 있고,
R에서는 없는데 join 결과로 생성된 튜플들은 spurious tuple이라고 부른다.
📕함수종속성
- Functional Dependencies(FDs)
- 관계형 설계가 좋은 설계인지를 측정하기 위해 사용됨.
- 어떤 테이블의 속성 X와 Y에 대하여 X값에 의해 Y값이 유일하게 정해지는 관계를 말하고, 기호로는 X->Y로 나타낸다. (이때 X를 결정자[Determinant] , Y를 종속자(Dependant)라고 함)
- X -> Y 가 true일때, Y->X는 항상 true는 아님.

여기서 FDs를 찾는다면
{A,B} -> C
{A,B} -> D
B->C
C->B
{C,D}->B
왼쪽에 대한 속성이 오른쪽에 대한 속성을 결정지을 때 그때의 관계를 함수종속성이라고 합니다.
- 함수의 종속성에는 3가지로 나눌수 있습니다.
- 완전 함수 종속 : 기본키를 구성하는 모든 속성에 종속 되는 경우
- 부분 함수 종속 : 기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우
- 이행적 함수 종속 : A,B,C 세 속성이 있고, A->B , B->C관계가 있을때, A->C가 성립하는 경우
📕정규화란?
- 어트리뷰트 간의 종속성으로 인한 이상현상이 발생하는 릴레이션을 분해하여 재 설계함으로서 이상현상을 없애는 과정
- 데이터의 중복방지, 무결성을 충족하기 위해 데이터 베이스를 설계하는 방법
📗정규화의 3가지 원칙
- 정보의 무손실 : 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함해야 한다.
- 최소 데이터 중복 : 이상 현상을 제거, 데이터 중복을 최소화
- 분리의 원칙 : 하나의 독립된 관계썽은 하나의 독립된 릴레이션으로 분리해서 표현
📗정규화의 장점
- 각종 이상 현상들을 해결할 수 있다.
- 새로운 속성의 추가로 인해 DB 구조를 확장하는 경우, 구조의 변경을 최소화 할 수 있다.
- 하지만 릴레이션의 분해로 인해 릴레이션 간의 연산이 많아져 응답시간이 오히려 느려질 수 도 있다는 단점이 있다.
📕정규형 = Normalization Forms
- 정규형이란 정규화된 결과를 말하며 6가지 형태가 있다.
- 제1 정규형
- 제2 정규형
- 제3 정규형
- BCNF
- key와 관계형 스키마의 FDs와 연관
- 제4 정규형
- key, multi-valued dependencies : MVDs
- 제5 정규형
- key, join dependencies : JDs
- 하지만 실질적인 정규형 단계는 BCNF단계까지이며, 제 4정규형과 제 5정규형은 실무에서도 사용 안한다고 한다.
📗Super key
- 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키,
- 유일성은 만족, 최소성은 만족x
- Super key에서 하나의 속성을 제거했을때도, 슈퍼키를 만족하지않는다면 그때의 집합을 minimal super key라고 한다.
📗후보키
- 관계형 스키마에서 2개 이상의 키를 가지는 경우, 그 키를 후보키라고 부른다.
- 후보키들중 하나는 고유키에 해당되고, 그 하나를 제외한 나머지는 대체키(secondary key)라고한다.
- Prime attribute는 후보키들에 포함되야 한다.
- NonPrime attribute는 후보키들에 포함되지 않는 속성들
📕제 1정규형
- 릴레이션에 속하는 속성의 속성 값은 모두 원자값(더이상 쪼개지면 안되는)만으로 구성되어야 한다.
- 즉 multivalued attributes, composite attributes, nested relations를 허용안한다.

위 테이블에서 Dlocations은 여러개의 값을 가지기 때문에 제 1정규형을 위반한다.
따라서 분리를 해줘야 한다.

📕제 2정규형
- 제 1정규형이여야 하고, 기본키에 속하지 않는 속성 모두가 기본키에 완전 함수 종속인 정규형.
- non-prime attribute가 key R에, fully functional dependent해야 한다.
- 여기서는 완전 함수 종속과 부분 함수 종속을 알아야 한다.
- 완전 함수 종속 : X->Y에서 X가 없어진다면, FDs는 없어지는 것.
- 부분 함수 종속 : X->Y에서 X가 없어져도, FDs는 유지

해당 테이블에서 prime attribute는 {Ssn, Pnumber}이다.
{Ssn, Pnumber} -> Hours 관계에서 SSn과 Pnumber중 하나라도 빠진다면 특정지을 수 없다.
{Ssn, Pnumber} -> Ename 관계에서 Pnumber가 빠지더라도 특정 지을 수 있다. -> 부분함수종속성
{Ssn, Pnumber} -> Pname 관계에서 SSn이 빠지더라도 특정 지을 수 있다. -> 부분함수종속성
{Ssn, Pnumber} -> Plocation 관계에서 Ssn이 빠지더라도 특정 지을 수 있다. -> 부분함수종속성
2정규형은 이러한 부분함수 종속성을 모두 없애주는 것이다.

📗이행적 함수 종속성
- A->B, B->C, A->C인 겨우 이행적 함수 종속성이라고 함. (3정규형 위반)
📕제 3정규형
- 제 2정규형이면서, 이행적 함수 종속성을 제거한 정규형을 말한다.
- 즉 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때, 제 3정규형이라고 한다.
- == 기본키 이외의 속성이 그 외 다른 속성을 결정할 수 없는 것이다.
- 이행적 함수 종속 관계에 있는 속성을 분리한다.

Ssn은 prime attribute이고 모든 키의 속성을 결정 짓는다.
하지만 여기서 Dnumber -> Dmgr_ssn과 Dname을 결정 짓는 바람에 이행적 함수 종속 관계가 발생한다.
따라서 이행적 함수 종속 관계가 있는 속성들을 분리해서 새로운 relation으로 만든다.

📕정규화 예시

- 2개의 후보키가 있다.
- PropertyId
- {CountyName,LotNum}
- county마다 세율이 다르지만 동일 county에서는 세율이 같다.
- 가격은 area가 결정한다.
1️⃣ 모든 후보키들을 찾아서 FDs를 찾아준다.

2️⃣정규형을 test한다.
- 1정규형을 위반하는가 ? -> 모두 다 atomic value이기에 1정규형을 만족한다.
- 2정규형을 위반하는가? -> 위반한다.
- 후보키 (CountyName,LotNum) -> Taxrate를 결정하는데 사실 Taxrate를 결정하는데 CountyName만 있으면 되기에 2정규형을 위반한다.
- 따라서 분리시킨다.

- 2정규형 결과이다. 이제 여기서 제 3정규형을 위반하는지 찾아야한다.
- 3정규형을 위반하는가? -> 위반한다.
- 왜냐하면 FD1에서 PropertyID -> Area , Area -> Price, PropertyID -> Price이기에 위반한다.
- FD4를 분리시켜야 한다.
최종 결과

1정규형에서는 LOTS가 그대로 보존되지만, 2정규형에서 LOTS1과 LOTS2로 분리되고, 제 3정규형에서 LOTS1 -> LOTS1A , LOTS1B로 분리된다.
📕BCNF
=Boyce-Codd Normal From(BCNF)
- 제 3 정규형을 조금 더 강화시킨 개념이다.
- 3정규형에서 이상현상이 생길 수 있다.
- 이상현상이 생기는 이유는 결정자가 후보키로 취급되고 있지 않기 때문이다.
- 따라서 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해해주면 된다.
'Computer Science > DataBase' 카테고리의 다른 글
[Database] - Indexing (0) | 2022.12.18 |
---|---|
[Database]- Disk and Files (0) | 2022.12.18 |
[데이터베이스]- 수강신청을 위한 수강꾸러미 시스템 구현(1) (1) | 2022.12.03 |
[Database] -advancedSql (2) | 2022.10.18 |
[Database] -SQL (0) | 2022.10.18 |
📕관계 스키마 설계의 품질을 확인하는 기준
- 스키마 내의 어트리뷰트의 의미를 분명하게 해라. (이름을 모호하게 하지말라는 뜻?)
- 외래키는 겹쳐도 되지만 그 외의 속성은 이름을 헷갈리게 선언하면 혼동하기 쉽다.
- 튜플내에서 재사용 정보를 최소화해라.
- 재사용된 정보를 저장하게 되면
- 공간의 낭비
- Update anomalies(갱신이상)
- Insert anomalies
- 원하지 않는 자료가 삽입되거나, key가 없어 삽입하지 못하는 문제점(= 불필요한 데이터를 추가해야 삽입할수 있음)
- Deletion anomalies
- 하나의 자료만 삭제하고 싶지만, 그 자료가 포함된 튜플 전체가 삭제됨으로 원하지 않는 정보 손실이 발생하는 문제점
- Modification anomalies
- 일부만 변경하여 데이터 불일치하는 모습, 또는 중복되는 튜플이 존재하게 되는 문제점
- Insert anomalies
- 재사용된 정보를 저장하게 되면
- 튜플내에서 널 값을 최소화 해라.
- Null값이 있는 어트리뷰트는 relation을 분리한다.(고유키를 같이 주면서)
- Null값이 존재하는 이유
- 어트리뷰트가 이용가능하지 않거나 타당하지 않을 때,
- 속성에 대한 값을 모를때 (존재는 함)
- 값이 존재하지만, 이용가능하지 않을 때
- 존재하지 않는 튜플의 생성 가능성을 허용하지 마라.
- 안좋은 관계형 데이터베이스는 특정 join에서 말도 안되는 결과를 만들어낸다. ex) CARTESIAN
- lossless join : 원본데이터를 유지하면서 의미 있는 결과를 만들어 냄.
- 존재하지 않는 튜플은 natural join에 의해 만들어질 수 있다. -> 어떠한 비용을 지불해서라도 막아야 함.
💡존재하지 않는 튜플이 뭔지 헷갈리실수 있을텐데 그림을 보면 이해하기 쉬울겁니다

R에서 R1과 R2를 잘못 분해해서 조인한 경우 R에서 없던 튜플이 생성될 가능성이 있고,
R에서는 없는데 join 결과로 생성된 튜플들은 spurious tuple이라고 부른다.
📕함수종속성
- Functional Dependencies(FDs)
- 관계형 설계가 좋은 설계인지를 측정하기 위해 사용됨.
- 어떤 테이블의 속성 X와 Y에 대하여 X값에 의해 Y값이 유일하게 정해지는 관계를 말하고, 기호로는 X->Y로 나타낸다. (이때 X를 결정자[Determinant] , Y를 종속자(Dependant)라고 함)
- X -> Y 가 true일때, Y->X는 항상 true는 아님.

여기서 FDs를 찾는다면
{A,B} -> C
{A,B} -> D
B->C
C->B
{C,D}->B
왼쪽에 대한 속성이 오른쪽에 대한 속성을 결정지을 때 그때의 관계를 함수종속성이라고 합니다.
- 함수의 종속성에는 3가지로 나눌수 있습니다.
- 완전 함수 종속 : 기본키를 구성하는 모든 속성에 종속 되는 경우
- 부분 함수 종속 : 기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우
- 이행적 함수 종속 : A,B,C 세 속성이 있고, A->B , B->C관계가 있을때, A->C가 성립하는 경우
📕정규화란?
- 어트리뷰트 간의 종속성으로 인한 이상현상이 발생하는 릴레이션을 분해하여 재 설계함으로서 이상현상을 없애는 과정
- 데이터의 중복방지, 무결성을 충족하기 위해 데이터 베이스를 설계하는 방법
📗정규화의 3가지 원칙
- 정보의 무손실 : 분해된 릴레이션이 표현하는 정보는 분해되기 전의 정보를 모두 포함해야 한다.
- 최소 데이터 중복 : 이상 현상을 제거, 데이터 중복을 최소화
- 분리의 원칙 : 하나의 독립된 관계썽은 하나의 독립된 릴레이션으로 분리해서 표현
📗정규화의 장점
- 각종 이상 현상들을 해결할 수 있다.
- 새로운 속성의 추가로 인해 DB 구조를 확장하는 경우, 구조의 변경을 최소화 할 수 있다.
- 하지만 릴레이션의 분해로 인해 릴레이션 간의 연산이 많아져 응답시간이 오히려 느려질 수 도 있다는 단점이 있다.
📕정규형 = Normalization Forms
- 정규형이란 정규화된 결과를 말하며 6가지 형태가 있다.
- 제1 정규형
- 제2 정규형
- 제3 정규형
- BCNF
- key와 관계형 스키마의 FDs와 연관
- 제4 정규형
- key, multi-valued dependencies : MVDs
- 제5 정규형
- key, join dependencies : JDs
- 하지만 실질적인 정규형 단계는 BCNF단계까지이며, 제 4정규형과 제 5정규형은 실무에서도 사용 안한다고 한다.
📗Super key
- 한 릴레이션 내에 있는 속성들의 집합으로 구성된 키,
- 유일성은 만족, 최소성은 만족x
- Super key에서 하나의 속성을 제거했을때도, 슈퍼키를 만족하지않는다면 그때의 집합을 minimal super key라고 한다.
📗후보키
- 관계형 스키마에서 2개 이상의 키를 가지는 경우, 그 키를 후보키라고 부른다.
- 후보키들중 하나는 고유키에 해당되고, 그 하나를 제외한 나머지는 대체키(secondary key)라고한다.
- Prime attribute는 후보키들에 포함되야 한다.
- NonPrime attribute는 후보키들에 포함되지 않는 속성들
📕제 1정규형
- 릴레이션에 속하는 속성의 속성 값은 모두 원자값(더이상 쪼개지면 안되는)만으로 구성되어야 한다.
- 즉 multivalued attributes, composite attributes, nested relations를 허용안한다.

위 테이블에서 Dlocations은 여러개의 값을 가지기 때문에 제 1정규형을 위반한다.
따라서 분리를 해줘야 한다.

📕제 2정규형
- 제 1정규형이여야 하고, 기본키에 속하지 않는 속성 모두가 기본키에 완전 함수 종속인 정규형.
- non-prime attribute가 key R에, fully functional dependent해야 한다.
- 여기서는 완전 함수 종속과 부분 함수 종속을 알아야 한다.
- 완전 함수 종속 : X->Y에서 X가 없어진다면, FDs는 없어지는 것.
- 부분 함수 종속 : X->Y에서 X가 없어져도, FDs는 유지

해당 테이블에서 prime attribute는 {Ssn, Pnumber}이다.
{Ssn, Pnumber} -> Hours 관계에서 SSn과 Pnumber중 하나라도 빠진다면 특정지을 수 없다.
{Ssn, Pnumber} -> Ename 관계에서 Pnumber가 빠지더라도 특정 지을 수 있다. -> 부분함수종속성
{Ssn, Pnumber} -> Pname 관계에서 SSn이 빠지더라도 특정 지을 수 있다. -> 부분함수종속성
{Ssn, Pnumber} -> Plocation 관계에서 Ssn이 빠지더라도 특정 지을 수 있다. -> 부분함수종속성
2정규형은 이러한 부분함수 종속성을 모두 없애주는 것이다.

📗이행적 함수 종속성
- A->B, B->C, A->C인 겨우 이행적 함수 종속성이라고 함. (3정규형 위반)
📕제 3정규형
- 제 2정규형이면서, 이행적 함수 종속성을 제거한 정규형을 말한다.
- 즉 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닐 때, 제 3정규형이라고 한다.
- == 기본키 이외의 속성이 그 외 다른 속성을 결정할 수 없는 것이다.
- 이행적 함수 종속 관계에 있는 속성을 분리한다.

Ssn은 prime attribute이고 모든 키의 속성을 결정 짓는다.
하지만 여기서 Dnumber -> Dmgr_ssn과 Dname을 결정 짓는 바람에 이행적 함수 종속 관계가 발생한다.
따라서 이행적 함수 종속 관계가 있는 속성들을 분리해서 새로운 relation으로 만든다.

📕정규화 예시

- 2개의 후보키가 있다.
- PropertyId
- {CountyName,LotNum}
- county마다 세율이 다르지만 동일 county에서는 세율이 같다.
- 가격은 area가 결정한다.
1️⃣ 모든 후보키들을 찾아서 FDs를 찾아준다.

2️⃣정규형을 test한다.
- 1정규형을 위반하는가 ? -> 모두 다 atomic value이기에 1정규형을 만족한다.
- 2정규형을 위반하는가? -> 위반한다.
- 후보키 (CountyName,LotNum) -> Taxrate를 결정하는데 사실 Taxrate를 결정하는데 CountyName만 있으면 되기에 2정규형을 위반한다.
- 따라서 분리시킨다.

- 2정규형 결과이다. 이제 여기서 제 3정규형을 위반하는지 찾아야한다.
- 3정규형을 위반하는가? -> 위반한다.
- 왜냐하면 FD1에서 PropertyID -> Area , Area -> Price, PropertyID -> Price이기에 위반한다.
- FD4를 분리시켜야 한다.
최종 결과

1정규형에서는 LOTS가 그대로 보존되지만, 2정규형에서 LOTS1과 LOTS2로 분리되고, 제 3정규형에서 LOTS1 -> LOTS1A , LOTS1B로 분리된다.
📕BCNF
=Boyce-Codd Normal From(BCNF)
- 제 3 정규형을 조금 더 강화시킨 개념이다.
- 3정규형에서 이상현상이 생길 수 있다.
- 이상현상이 생기는 이유는 결정자가 후보키로 취급되고 있지 않기 때문이다.
- 따라서 모든 결정자는 항상 후보키가 되도록 릴레이션을 분해해주면 된다.
'Computer Science > DataBase' 카테고리의 다른 글
[Database] - Indexing (0) | 2022.12.18 |
---|---|
[Database]- Disk and Files (0) | 2022.12.18 |
[데이터베이스]- 수강신청을 위한 수강꾸러미 시스템 구현(1) (1) | 2022.12.03 |
[Database] -advancedSql (2) | 2022.10.18 |
[Database] -SQL (0) | 2022.10.18 |