[DB] 정규화

sung eon·2023년 2월 17일
0

  • 목적: 중복되는 데이터를 만들지 않기 위해서 씀
  • 사번: 함수 결정자
    • PK가 되는 것이다.

정규화

제 1 정규화

참고자료
A가 1,2 취미를 가지고 있다면
A-1, A-2 로 나누는게 원속성

제 2 정규화

제 2정규화의 경우는 복합키일 경우이다. 따라서,

  • 복합키인 경우에만 생각해보면 된다.
    완전 함수 종속을 만족하다는 말은, 복합키에 종속한다는 말이다(?)
    • 학생의 강좌 이름에 대한 성적은 OK
    • 학생의 강좌 이름별로 강의식 BAAAAAD
      복합키에 완전한 종속성을 갖는 일반 컬럼이라 보기 어렵다.

제 3 정규화

제 2정규화를 거쳐와야하며, 이행적 종속이 없도록 테이블을 분해하는 것

  • 이행적 종속
  • 일반 컬럼만 봤을 때
    • 강좌이름: 결정자
    • 수강료: 종속자
      => 일반 컬럼들 함수 종속성이 발견되면 3차 정규화 처리를 해줘야한다.

따라서 학생번호 테이블 따로, 강좌이름/수강료 테이블 따로해야한다.
그럼 두 테이블을 어떻게 연결 시킬까?

  • 강좌 이름이나 강좌 번호를 설정해서 그걸 공유해야한다.

  • 상품 영양정보 만들기


  • 상품검색시 상품영양정보도 같이 검색


  • 상품영양정보 삭제시 상품도 같이 삭제
    • 이런경우가 많이 없지만,
    • PD쪽 P 컬럼에 CascadeType.REMOVE 달아주기
      • 서로 바라보고 난리
  • P 엔티티에서 @OneToOne 관계를 끊었을 때,


  • 상품 삭제시 상품영양정보도 같이 삭제되려면 mappedBy 속성을 줘야한다.
  1. 찾으러가고
  2. 역방향으로 또 찾고
  3. 하지마라=> mappedBy를 통해 서로 참조를 끊음

--


save()메서드와 연관된 CascadeType.PERSIST, CascadeType.MERGE 을 붙여준다.

  • 이게 insert나 update시 부모인 p쪽에 null값이 들어가면 안되니까.
profile
코베베

0개의 댓글