더북(TheBook)

2.1.2 관계 맺기

RDBMS의 R은 관계(relation)를 의미합니다. 그만큼 RDBMS에서 관계는 중요한 개념입니다. 그림 2-1은 회원정보를 저장하는 간단한 테이블로 이름, 성별, 나이뿐만 아니라 주소도 중요한 데이터입니다. 그런데 데이터 저장 관점에서 보자면 회원정보 테이블에 주소까지 저장하는 것은 다소 비효율적입니다. 주소는 다른 성격의 데이터에 비해 길고 중복 요소가 많기 때문이죠. 가령 서울시 중구 XX동에 사는 사람들을 생각해 봅시다. 꽤 인원이 많겠죠? 극단적으로 생각해 회원의 2/3가 서울시 중구 XX동에 산다고 할 경우(예를 들어 10만 명이라고 가정한다면), 회원정보 테이블에 주소 컬럼을 두고 ‘서울시 중구 XX동’을 저장해 놓으면 저장 공간이 크게 낭비됩니다. 주소는 이름이나 성별에 비해 데이터 크기가 큰데, 똑같은 데이터를 10만 건이나 저장해 갖고 있기 때문이죠.

한 테이블에 몰아넣는 대신 별도로 주소 테이블을 만들고, 회원정보 테이블에는 주소 테이블의 특정 주소를 가리키는, 데이터 크기가 작은 컬럼(보통 숫자형 컬럼을 사용합니다)을 둔다면 훨씬 효율적일 것입니다. 즉, 회원정보 테이블에 두면 중복 데이터가 발생하지만, 주소 테이블에 두면 ‘서울시 중구 XX동’이란 데이터는 10만 건이 아닌 한 건만 가지고 있으면 됩니다. 물론 연결고리 역할을 하는, 데이터 크기가 작은 컬럼은 회원정보와 주소 테이블 양쪽에 존재해야 합니다. 결국 회원정보 테이블에는 상대적으로 크기가 작은 10만 개의 연결고리 컬럼 데이터가 들어가겠지만, 주소 테이블에는 단 한 건만 저장해두면 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.