JPA 성능을 결정하는 요소는 여러 가지입니다. 그중 가장 중요한 것은 연관관계 매핑입니다. 연관관계 매핑을 어떻게 설정하느냐에 따라 불필요한 조인을 줄일 수도 있고, 필요한 데이터를 가져오는 시점을 결정할 수도 있습니다.
데이터 모델링에서는 데이터 중복으로 인한 메모리 낭비를 피하고 데이터를 효율적으로 관리하기 위해 정규화(Normalization)를 합니다.
관계형 데이터베이스 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 말합니다. 정규화의 목적은 하나의 테이블에서 데이터의 삽입, 삭제, 변경이 정의된 관계들로 인해 데이터베이스의 나머지 부분들로 전파되게 하는 것입니다. 정규화가 잘 된 데이터베이스는 중복이 없고, 규모가 비슷한 여러 개의 테이블이 존재합니다.
테이블 간 중복된 데이터를 허용하지 않습니다.
중복된 데이터를 허용하지 않음으로써 데이터 무결성(Integrity)를 유지할 수 있습니다. 이로 인해 DB 저장 용량도 줄일 수 있습니다.
방향성은 단방향 관계와 양방향 관계로 나뉩니다.
직원(Employee) 객체가 참조 변수를 통해 부서(Department) 객체를 참조하면 단방향입니다.
하지만 반대로 부서 객체도 참조 변수를 통해 직원 객체를 참조한다면 양방향입니다.
방향은 객체에만 존재하고, 테이블은 항상 양방향입니다.
다대일(N : 1), 일대다(1 : N), 일대일(1 : 1), 다대다(N :M) 관계가 있습니다. 여러 직원(Employee)가 하나의 부서(Department)에 속해 있다면 직원 입장에서는 다대일 관계입니다. 부서 입장에서는 일대다 관계입니다. 그런데 직원이 여러 부서에 소속될 수 있다고 가정하면 다대다 관계로 바뀌게 됩니다. 다중성은 비즈니스에 따라 변경될 수 있습니다.
다음 글은 다대일(N : 1) 관계에 대해 다룹니다.
JPA 퀵스타트
채규태 지음ㅣ루비페이퍼ㅣ2020ㅣ도서 정보