시작하기에 앞서 큰 틀을 정해놓고 정의를 써 내려가며 내가 이해 못 한 것들을 나에게 다시 알려준다는 생각으로 게시글을 작성할 것이다. 보기에 혼란스러울 수 있다.
정규화
라고한다.공통적으로 함수 종속성을 사용 또는 이용해서 테이블(릴레이션)을 관련 있는 속성들로만 구성해서 나머지는 분해하고 이상현상이 발생하지 않는 테이블을 만들어가는 과정이라고 대부분의 블로그에서 설명되고 있다.
함수 종속성이라는 걸 사용해서 함수종속성과 관련된 attibute들로만 구성하고 나머지는 분해 그리고 중복이 발생하지 않게 하는 과정이구나!
궁금증이 생겨난다.
- 한 테이블에 있는 두 개의 Attribute(s) 집합(set) 사이의 제약(a contraint)
- X 값에 따라 Y 값이 유일하게 결정될 때
- X가 Y를 함수적으로 결정한다(functionally determine)
- Y가 X에 함수적으로 의존한다(functionally dependent)
- 두 집합 사이의 이러한 제약관계를
Functional Dependency(FD) : 함수적 종속성
라고 한다.
사전적으로 정의하자면 이렇다. X -> Y라고 표시한다고 한다.
와닿지 않는다.
예제를 가져와봤다.
X값에 따라 Y값이 유일하게 결정된다고 한다. 그렇다는 말은 X값이 유니크하다고 할 수 있을 것 같다.
그렇다면 은행이름과 계좌번호가 있으면 다른 attribute를 결정할 수 있을 것 같다.
계좌 번호는 다른 은행과 겹칠 수 있지 않을까?
생각이 들기 때문이다.
그리고 계좌번호_아이디
는 같은 은행에서는 아이디가 같으면 안 되기 때문에 기본 키로 사용이 가능할 것 같다.
그렇다면 한 테이블에 두 개의 속성 계좌번호_아이디
와 나머지 모든속성들
은 함수적으로 결정되고 의존된다고 할 수 있는거 아닐까?
테이블의 수정(갱신, 삽입, 삭제)시 원치 않던 부작용이 발생할 수 있다....
✏️ 같아야 하는 정보가 복수 개의 행에서 표현되면, 정보가 수정되면 모든 레코드를 함께 수정해야 한다. 이때 갱신이 성공적이지 않는다면 갱신 이상 현상
이라고 한다.
✏️ Null값을 비 허용하는 컬럼이 있는데 아직 정해지지 않아 null인 상태 (예를 들어 전학을 왔는데 반이 지정되지 않는)를 삽입 이상 현상
이라고 한다.
✏️ 삭제되면 안 되는 중요한 컬럼을 삭제하는 경우에 그 정보 전체가 사라지는데, 이런 현상을 삭제 이상 현상
이라고 한다.
꼭 그렇진 않다. 데이터 용량이 최소화되는 효과는 있을지언정 데이터를 조회할 때 성능이 향상될 수도 저하될 수도 있다. 그리고 나머지는 성능이 향상된다!
아무래도 테이블들을 나누어서 JOIN연산이 많아 질 것이다. 그렇기 때문에 응답시간또한 느려질 수도 있을 것이다.
✏️이에 대한 설명은 다른 글을 써놓은 정규형을 보자
나는 학술적으로 블로그를 쓰는게 아니라 취업과 실무에서 사용하는것에 초첨을 맞추었기 때문에 BCNF까지만 할것이다.
1NF란? -> attribute의 value는 반드시 나눠질수 없는 단일한 값이어야 한다.
함수종속, 주식별자에 완전 종속적이지 않은 속성의 분리, 부분 종속 속성(Partial Dependenty Attribute)를 분리
이해가 어려워졌다. 1 정규화 속성의 값은 하나여야 하면서
모든 컬럼이 부분적이 없어야 한다
이게 어떤 뜻일까? 그리고
모든 칼럼이 완전 함수 종속을 만족
이건 또 어떤 말인거지? 하나씩 살펴 보자 일단 완선 함수 종속부터 살펴보자
후보키가 아닌 속성들이 후보키를 종속하고 있어야 한다라고 볼 수 있다.
a~f 컬럼이 있다고 가정하고 후보키 {a, b} -> {c, d, e, f}를 종속하고 있고
{c} -> {a, b, d, e, f}를 종속한다면 완전 함수 종속이라고 볼 수 있다.
결론은 후보키를 함수적 종속(바라보는 속성들)해야한다. 전부 라고 할 수 있다.
후보키 : 유일성, 최소성을 보장하는 키
이행 종속이라는 게 무엇일까 찾아봤는데 이게 가장 정확한 것 같다.
non-prime attribute : 후보 키 속성을 제외한 나머지
prime attribute : 후보 키 속성
이렇게 있다면
함수종속, 결정자 안에 함수 종속을 가진 주식별자 분리
1. 3정규화를 만족
2 모든 결정자가 후보키 집합에 속해야 한다.