- 목적: 중복되는 데이터를 만들지 않기 위해서 씀
- 사번: 함수 결정자
정규화
제 1 정규화
참고자료
A가 1,2 취미를 가지고 있다면
A-1, A-2 로 나누는게 원속성
제 2 정규화
제 2정규화의 경우는 복합키일 경우이다. 따라서,
- 복합키인 경우에만 생각해보면 된다.
완전 함수 종속을 만족하다는 말은, 복합키에 종속한다는 말이다(?)
- 학생의 강좌 이름에 대한 성적은 OK
- 학생의 강좌 이름별로 강의식 BAAAAAD
복합키에 완전한 종속성을 갖는 일반 컬럼이라 보기 어렵다.
제 3 정규화
제 2정규화를 거쳐와야하며, 이행적 종속이 없도록 테이블을 분해하는 것
- 이행적 종속
- 일반 컬럼만 봤을 때
- 강좌이름: 결정자
- 수강료: 종속자
=> 일반 컬럼들 함수 종속성이 발견되면 3차 정규화 처리를 해줘야한다.
따라서 학생번호 테이블 따로, 강좌이름/수강료 테이블 따로해야한다.
그럼 두 테이블을 어떻게 연결 시킬까?
- 강좌 이름이나 강좌 번호를 설정해서 그걸 공유해야한다.
- 상품 영양정보 만들기
- 상품검색시 상품영양정보도 같이 검색
- 상품영양정보 삭제시 상품도 같이 삭제
- 이런경우가 많이 없지만,
- PD쪽 P 컬럼에 CascadeType.REMOVE 달아주기
- P 엔티티에서 @OneToOne 관계를 끊었을 때,
- 상품 삭제시 상품영양정보도 같이 삭제되려면 mappedBy 속성을 줘야한다.
- 찾으러가고
- 역방향으로 또 찾고
- 하지마라=> mappedBy를 통해 서로 참조를 끊음
--
save()메서드와 연관된 CascadeType.PERSIST, CascadeType.MERGE 을 붙여준다.
- 이게 insert나 update시 부모인 p쪽에 null값이 들어가면 안되니까.