데이터 베이스 - 정규화

mmmhmm·2024년 3월 10일
0

스터디

목록 보기
3/6

시작하기에 앞서 큰 틀을 정해놓고 정의를 써 내려가며 내가 이해 못 한 것들을 나에게 다시 알려준다는 생각으로 게시글을 작성할 것이다. 보기에 혼란스러울 수 있다.

☝️정규화(Normalization)란?

  • 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화 라고한다.

❓그렇다면 '중복을 최소화하게 데이터를 구조화'라는 게 뭘까?

공통적으로 함수 종속성을 사용 또는 이용해서 테이블(릴레이션)을 관련 있는 속성들로만 구성해서 나머지는 분해하고 이상현상이 발생하지 않는 테이블을 만들어가는 과정이라고 대부분의 블로그에서 설명되고 있다.

💡

함수 종속성이라는 걸 사용해서 함수종속성과 관련된 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까지만 할것이다.

☝️1정규형(1NF: 1 Normal forms)

1NF란? -> attribute의 value는 반드시 나눠질수 없는 단일한 값이어야 한다.

  1. 각 컬럼이 하나의 속성만을 가져야한다.
  2. 하나의 컬럼은 같은 종류나 타입의 값을 가져야한다.
  3. 각 컬럼이 유일한 이름을 가져야 한다.
  4. 칼럼의 순서가 상관없어야한다.

☝️2정규형(2NF)

함수종속, 주식별자에 완전 종속적이지 않은 속성의 분리, 부분 종속 속성(Partial Dependenty Attribute)를 분리

  1. 제 1정규헝를 만족
  2. 모든 컬럼이 부분적(Partial Dependency)이 없어야 한다. 모든 칼럼이 완전 함수 종속을 만족해야한다.

이해가 어려워졌다. 1 정규화 속성의 값은 하나여야 하면서
모든 컬럼이 부분적이 없어야 한다 이게 어떤 뜻일까? 그리고
모든 칼럼이 완전 함수 종속을 만족이건 또 어떤 말인거지? 하나씩 살펴 보자 일단 완선 함수 종속부터 살펴보자
후보키가 아닌 속성들이 후보키를 종속하고 있어야 한다라고 볼 수 있다.
a~f 컬럼이 있다고 가정하고 후보키 {a, b} -> {c, d, e, f}를 종속하고 있고
{c} -> {a, b, d, e, f}를 종속한다면 완전 함수 종속이라고 볼 수 있다.


결론은 후보키를 함수적 종속(바라보는 속성들)해야한다. 전부 라고 할 수 있다.

☝️3정규형(3NF)

  1. 2정규화를 만족해야한다.
  2. 후보키가 아닌 속성들에서 이행 종속(Transitive Dependency)이 발생하지 않아야합니다.

후보키 : 유일성, 최소성을 보장하는 키
이행 종속이라는 게 무엇일까 찾아봤는데 이게 가장 정확한 것 같다.
non-prime attribute : 후보 키 속성을 제외한 나머지
prime attribute : 후보 키 속성
이렇게 있다면

☝️BCNF : 보이스 코드 정규화

함수종속, 결정자 안에 함수 종속을 가진 주식별자 분리
1. 3정규화를 만족
2 모든 결정자가 후보키 집합에 속해야 한다.

profile
어라? 금지

0개의 댓글

관련 채용 정보