갱신이상이라는 것 : 하나 이상의 두개 이상의 토픽을 저장하고자 할 때 중복이 발생하고, 거기로부터 갱신이상이 발생할 문제점들이 있기 때문에, 정규화 과정이라는 것은 하나의 테이블에 두개 이상의 테마 혹은 토픽이 저장이 되었을 때 그 테이블을 하나의 토픽 하나의 테이블을 저장하고 있는 것을 여러개의 테이블로 쪼개는 것을 정규화 과정이라고 한다.
Normal Form은 여러가지 형태들이 Table은 갖고 있는데, 정규화가 전혀 되지 않은 Relation이 있고 (Unnormalized Relation), Unnormalized Relation일 때 1st Normal Form 으로 바꾸는 것이고.
Normalization은 숫자가 높아질 수록 좋아진다.
#6 함수 종속성
Column B가 Column A 에 서로 다른 각각의 값이 정확히 B의 한 값이랑 연결이 되어 있을 때, A값을 알면 B값을 알 때 B가 A에 함수적으로 종속되어있다고 하고, A가 함수적으로 B를 결정한다. 라고 한다.
A -> B
#7 Customer테이블에서 CustomerNum이 RepNum에 함수 종속되었는가?
A는 RepNum, B는 CustomerNum (X)
CustomerNum을 알면 RepNum을 알 수 있다.
RepNum을 알면 CustomerNum을 알 수 있다 (X)
각각의 주문에서 값이 다른값을 가지고 있다 QuotedPrice는 각가의 주문에서 그 item이 얼마나 팔렸는지,
OrderLine Table에서 Quoted Price 는 OrderNum에 종속되지 않았다.
왜냐? OrderNum과 ItemNum이 있다.
#9
X , RepNum이 결정한다.
Last Name을 주소를 함수적으로 결정할 수 없다.
#10
City
도시이름만 가지고 모든 컬럼들이 함수 종속 되어있다면? 애의 둘이가 primary Key가 아니다.
A에 어떠한 일부만 가지고 나머지를 함수적으로 결정할 수 있다면 A는 primary Key가 아니다.
Property 1: A의 모든 컬럼은 A에 종속되어야 한다.
Property 2 : A의 일부만으로도 조건1이 충족된다면, A는 primary Key가 아니다.
이때, A는 2개 이상의 Column이다.
Candidate Key:
Ex. 학생 테이블이 있는데, 학생 테이블의 학번이라는 컬럼도 있지만 주민번호 컬럼도 있다. 그런데, 둘중에 primary key로 학번을 결정했다면, 선택받은애가 primary Key, 주민번호는 Alternative Key가 된다.
Candidate Key는 학번, 주민번호 두개이다. (선택되지 않은 candidate Key)
#11
Repating group이라는 것은 한개의 레코드를 위해 여러개의 엔트리가 있을 때이다.
예) #12
ItemNum이라는 하나의 값에 두개이상의 값이 들어감. 하나의 레코드인데, 그 하나의 ItemNum이라는 셀에 두개의 값이 들어갔다. 이거는 되지 않는다. 하나의 레코드에 대해서 여러개의 엔트리가 있을 때 이를 Repeating Group이라고 한다. 이것이 있을 때 Unnormalized relation이라고 한다.
하나의 레코드에 한개의 값만 들어가게끔 해야 한다. 그러면 OrderDate를 반복적으로 만들면 된다.
#13 Primary Key가 OrderNum, ItemNum이 되었다. 왜냐? repeating Group 을 없애주었기 때문이다.
-> 이 테이블은 이제 first Normal form이 되었다. (repeating Group이 없는 Relation)
# 14 Second Normal form
Functional dependencies
OrderNum 을 알면 OrderDate를 알 수 있게 되고.
OrderNum이 OrderDate를 함수적으로 결정한다. <-> OrderDate는 OrderNum에 함수적으로 종속된다.
ItemNum , Description도 마찬가지.
#16
Update : 바꾼다는 Update
Normalization은 잠재적으로 존재하는 것을 미리 ..
왜 #15라는 문제가 생겼냐? 중복이 너무 발생함. 똑같은 중복이 발생하니까 중복된 코드를 수정해야함
두개 이상의 서로다른 Topic 테마를 넣었기 때문
51608을 지우면? - CD33또한 날라간다. 이러한 문제들이 발생하기에 Normalization을 해야한다.
하나의 테이블이 여러가지 Topic을 동시에 저장하기 때문에, 여기에서의 문제점은 Description 이 primary Key일부분에 함수 존속되었기 때문에.
Description을 알기 위해서는 ItemNum만 가지고 충분하다.
#17
second normal form이려면
1. 기본적으로 first normal form이여야 한다.
2. nonkey column이 없어야 한다. primary Key의 한 부분의 NonkeyColumn을 없애면 된다.
#18
Orderdate는 OrderNum과 ItemNum으로 결정한다고 했지만, 일부인 OrderNum으로도 결정할 수 있다.
가운데가 결정함.
Partial Functional Dependency
지우면 안 되는 이유? primary Key고 OrderDate와 Description만 partial Functional Dependency.
# 22
정규화를 왜? primary Key는 CustomerNum
2nf은 중복이 있을 수 있다.
어떤 Representative에 꼭 record를 다 지울 필요가 없다. 무리한 얘기지만 record단위로 지울 때 문제가 발생한다. 문제는 똑같았다.
partial Functional Dependency가 존재하지 않는다 왜? p.f.d는 Compound가 되지 않기 때문에 (Compound가 안됨)
PrimaryKey일부만 가지고도 함수적으로 존재할 수 있는 column이 존재한다.
Determinant는 Column인데, 다른 Column을 결정하는 Column이다. 같은거다. 결정자라는 것은 primary Key라든지 다른 컬럼을 정하는 거였는데. 꼭 그 다른 record를 정할 필요가 없고.
Third Normal form은
1. 두번째 normal form 이어야하고, / 그룹없고 partial functional Dependency가 없어야 한다.
2. 그 Table의 유일한 결정자는 candidate key만 이어야 한다. Candidate는 primay key의 후보,
그 테이블의 모든 Column들을 함수적으로 종속되어야 한다. 그런데 Candidate가 아닌 결정자가 있어서는 안 된다.
그 테이블의 모든 것을 결정하는 것이 아닌, 일부만 결정해도 결정자.
'JAVA_School > JAVA_School_class' 카테고리의 다른 글
[0508] DB설계및구현1 (0) | 2023.05.08 |
---|---|
[0508] 패턴중심적사고와프로그래밍 (1) | 2023.05.08 |
[0503] 패턴중심적사고와프로그래밍 (0) | 2023.05.03 |
[0501] DB설계및구현1 (0) | 2023.05.03 |
[0426] DB설계및구현1 (0) | 2023.04.26 |