도서/모두를 위한 postgreSQL

Day15. 데이터 모델링과 인덱싱- 테이블 사이의 관계

joje* 2023. 8. 15. 14:09

1. 일대다 관계

: 하나의 게시판에는 여러 개의 게시글이 존재하고, 각각의 게시글은 하나의 게시판에 속해 있어야 한다.이와 같이 하나의 테이블이 다른 테이블에 속하는 관계를 일대다 관계라고 한다.

: 일대다 관계의 경우 정보의 중복을 최소화하면서 정보를 저장할 수 있다. 이와 같이 서로간의 불필요한 정보의 중복이 없는 상태를 정규화된 상태라고 한다.

: 여러 개의 테이블에 정규화된 상태로 일대다 관계를 표현할 수 있지만, 하나의 테이블에 중복된 정보를 담아 일대다 관계를 표현할 수도 있다.

 

1.1 여러 개의 테이블을 이용해 정규화된 상태로 일대다 관계를 표현하는 경우

: JOIN문을 이용해 읽기 성능은 하나의 테이블을 이용할 때보다 떨어지지만 정보를 수정할 때 효율성이 높고, 정보의 일관성이 깨질 가능성이 낮다.

 

1.2 하나의 테이블에 중복된 데이터들을 담아 일대다 관계를 표현하는 경우

: 데이터 조회 시 JOIN문을 사용할 필요가 줄어들어 읽기 성능은 향상되지만, 정보를 수정할 때 효율성이 떨어지고, 정보의 일관성이 깨질 가능성이 높다.

 

2. 다대다 관계

: 사용자가 게시글을 조회할 때, 사용자와 게시글의 관계가 다대다 관계의 대표적인 예시이다. 사용자는 여러 개의 글을 조회할 수 있고, 게시글은 여러 사용자에게 조회 당한다. 두 테이블이 서로 가수의 관계를 가지므로 다대다 관계라고 할 수 있다.

: 앞서 예시에서 다대다 관계를 게시글, 조회, 사용자 3개의 테이블을 이용해 조회 테이블과 사용자, 게시글 테이블을 각각 일대다 관계로 만들어 정규화 된 다대다 관계를 만들 수 있다.

: 반면 조회 테이블을 지우고, 사용자, 게시글 테이블만을 이용해 한 쪽 테이블 또는 양쪽 테이블에 각 테이블을 참조하는 ids 값을 만들어 넣어 다대다 관계를 만들 수도 있다.

: 앞선 정규화된 다대다 관계의 경우, 읽기 성능은 떨어지나 수정이 용이하고 불필요한 정보의 중복이 줄어든다는 장점이 있고, 후자의 경우 읽기 성능은 향상되나 수정이 어려워지고, 데이터를 ids 값만큼 더 저장해줘야 한다는 단점을 지닌다.

 

3. 일대일 관계

: 일대일 관계의 경우, 저장하는 정보를 하나의 테이블으로 묶기에는 의미적으로 맞지 않거나, 성능을 향상시키기 위해 2개의 테이블로 나눠서 사용해야 할 때 사용하게 된다.