DB

DB3-1~3-4

자바꿈나무00 2023. 1. 15. 20:45

[자바/DataBase] DB (Chap03-1. 논리적 모델링)핵심

 

 

데이터 모델링이 필요한 이유
대표적인 활동

- 하나의 엔티티에서는 하나의 정보만을 담도록 정규화를 해야함

- 조회를 많이 해야할것 같으면 엔티티를 많이 쪼개면 안됨

-  하지만 정규화 할 때는 엔티티를 쪼갰다면 이후에 물리 디비에서 쪼개둔 걸 조인을 많이 할거 같으면 다시 합치거나 중복된 속성을 가져다 쓰는 반정규화를 하면 됨

- 실질적으로는 3정규형까지만 잘 알면 됨

이상의 3가지 종류

1. 삭제 이상

1. 삭제 이상

- 지우려고 하는 정보를 지울 때 delete하면 한 행이 지워지는거라 다른 정보들도 함께 삭제됨

즉, 지우려는 정보 이외의 다른 것 까지 지워지는 현상

 

2. 삽입 이상

2. 삽입 이상

- 내가 원하는 정보만 입력하는 게 아니라  굳이 다른 정보까지 입력해야만 함

- 다른 정보에 null값을 줘야하는 경우가 생김

 

3. 갱신 이상

3. 갱신 이상

- 하나라도 바꿔주지 않으면 일관성이 맞지 않는 경우가 발생

 

 

 

 

 

 

아 이러면 안되겠구나 싶어서
대체로 이렇게 작성함

- 그런데, 값을 잘 보면 사번이 주식별자 역할을 하지 못함

- 취미라는 속성때문에 같은 정보가 계속 중복발생됨

그래서 다시 그림2로 만들어보면

- 취미가 여러 개인 사람, 여러 개 아닌 사람이 발생해서 메모리 낭비가 심함

 

- 그래서 어떤 속성때문에 반복되는 사원정보를 부모 엔티티로 뽑아내는 과정이 필요함 => 1정규화 과정

 

 

 

1 정규화의 두 가지 방법

 

- 방법1: 취미를 PK로 한 경우

- 방법2: 사원별 취미코드를 PK로 한 경우

- 학생이 여러 개의 자격증을 취득 가능하니 1: N관계

 

참여도 선택, 비- 식별관계

- 1번 이라는 자격증 코드를 1001이라는 학번이 가질 수 있고, 1002학번도 가질 수 있어서 주식별자가 위배됨

- 그래서 식별관계로 바꿔야함

식별관계로 교체함

- 지금처럼 늘 비-식별관계로 먼저 해본 후 검토시에 주식별자가 위배될 거 같으면 그때 취소하고 식별관계로 교체하는 습관이 중요!

 


[자바/DataBase] DB (Chap03-2 논리적 모델링)

실습1

이걸로 1차 정규화를 해보세요.

이걸 먼저 써보고
이걸 만들고
이거에서 중복 제거 해준 후 동명이인이 발생할 경우를 생각해서 배우번호를 생성

 

비-식별 관계 먼저 지정

- 라이어에도 출연하는 사람이 옥탑방에도 출연할 수 있어서 비-식별관계로 하면 주식별자의 역할을 잃는다.

그래서 식별관계로 바꿔야함

- 라이어에도 출연하는 사람이 옥탑방에도 출연할 수 있어서 비-식별관계로 하면 주식별자의 역할을 잃는다. 그래서 식별관계로 바꿔야함


실습2
초기단계
요리재료별수량 엔티티를 복사한다
복사된 상황

- 재료 때문에 반복되는 요리 엔티티를 빼야함

새로 생성
이렇게 따로 요리 엔티티를 구성해둔다
처음 복사해둔 엔티티에서 따로 만든 요리엔티티에 쓴 속성들은 다 제거해준 상황
그럼 지금 상황은 이런데
- 자격증 코드처럼 인위적인 주식별자를 추가해봄-> 재료명을 선택해서 PK로 설정
요리에는 최소한 1개 이상의 재료가 요구되니까 필수관계, 그리고 일단 비-식별관계로 세팅
- 비-식별관계로 해두면 주식별관계를 잃기때문에 제거후 식별관계로!


실습3

 

회원, 게시판  엔티티를 각 각 복사한다
각 각  복사된 상태
회원과 복사한 게시판의 연결을 끊고 복사한 우측 회원과 복사한 게시판끼리 비-식별로 연결한 상태

 

 

 

게시판 속성만 잡아서 엔티티 따로 만들고
댓글 엔티티 만들고

 

댓글 안 쓸 수도 있으니 참여관계는 선택, 댓글 달 때 마다 인위적인 주식별자인 댓글번호 생성되니 주식별자의 역할을 잃지 않음, 그래서 댓글과 게시판을  비-식별관계로 연결

 

 

 


[자바/DataBase] DB (Chap03-3. 논리적 모델링)

제 2 정규화 : 주식별자가 아닌 속성 중에서 주식별자 전체가 아닌 일부 속성에 종속된 속성을 찾아 제거하는 것.

품목명이랑 품목단가는 품목코드에 종속된다.

-> (제거라는 표현 말고 분리라는 표현이 나음) 

 

품목이라는 부모 엔티티로 뽑아낸 후 관계설정을 통해 식별관계로 나타내보자.

각 이상별로 살펴보고 넘어가자

상상이상

- 품목에 대한 정보를 입력하려면 주문에 대한 정보까지 입력해야함 ->(주문에 대한 정보는 NULL값)

- 주문에 대한 정보를 입력하려면 품목에 대한 정보를 일일히 입력해야함

 

갱신이상

- 품목단가를 수정하려면 다 수정해야함. 하나라도 수정을 잘못하면 ->(일관성 침해)

 

삭제이상

- 품목에 대한 정보를 삭제하려면 -> 주문에 대한 정보도 같이 삭제가 됨.

주문에 대한 정보를 삭제하려 할 때 -> 품목에 대한 정보도 같이 삭제됨.

주문과 주문품목 복사 후 관게 변경해두기
품목이 주문되지 않는 경우도 있어서 선택관계, 2차정규화는 식별관계로 변경함

장바구니에 여러 개의 제품들이 담기듯이 여러 개의 제품을 주문하는 순간 이 주문번호라는 주식별자는 주식별자의 의미를 잃기때문에

품목코드로 주문품목과 품목을 식별관계로 연결한다.

 

주식별자가 2개면 2차정규화의 대상이 됨.

주식별자의 일부에 종속되는 속성이 없으면 굳이 2차 정규화를 할 필요없음!

 

아래 사진으로 3개의 2차 정규화 검토 실습을 진행함

 

 

 

 

 

 

 

 

 

 

 

 

 


[자바/DataBase] DB (Chap03-4. 논리적 모델링)

 

 

 

 

 


3-5~3-7

/4-1~4-4,5-1