Page 12 -
P. 12

나이뿐만 아니라 주소도 중요한 데이터입니다. 그런데 데이터 저장 관점에서
              보자면 회원정보 테이블에 주소까지 저장하는 것은 다소 비효율적입니다. 주소
              는 다른 성격의 데이터에 비해 길고 중복 요소가 많기 때문이죠. 가령 서울시

              중구 XX동에 사는 사람들을 생각해 봅시다. 꽤 인원이 많겠죠? 극단적으로 생
              각해 회원의 2/3가 서울시 중구 XX동에 산다고 할 경우(예를 들어 10만 명이
              라고 가정한다면), 회원정보 테이블에 주소 컬럼을 두고 ‘서울시 중구 XX동’을
              저장해 놓으면 저장 공간이 크게 낭비됩니다. 주소는 이름이나 성별에 비해 데

              이터 크기가 큰데, 똑같은 데이터를 10만 건이나 저장해 갖고 있기 때문이죠.
              한 테이블에 몰아넣는 대신 별도로 주소 테이블을 만들고, 회원정보 테이블에

              는 주소 테이블의 특정 주소를 가리키는, 데이터 크기가 작은 컬럼(보통 숫자형
              컬럼을 사용합니다)을 둔다면 훨씬 효율적일 것입니다. 즉, 회원정보 테이블에
              두면 중복 데이터가 발생하지만, 주소 테이블에 두면 ‘서울시 중구 XX동’이란
              데이터는 10만 건이 아닌 한 건만 가지고 있으면 됩니다. 물론 연결고리 역할

              을 하는, 데이터 크기가 작은 컬럼은 회원정보와 주소 테이블 양쪽에 존재해야
              합니다. 결국 회원정보 테이블에는 상대적으로 크기가 작은 10만 개의 연결고리
              컬럼 데이터가 들어가겠지만, 주소 테이블에는 단 한 건만 저장해두면 됩니다.

              일반적으로 연결고리 역할의 컬럼은 일련번호를 사용합니다. 이 컬럼 값을 순
              번으로 처리한다면 주소 테이블에는 1, 2, 3, 4, … 순으로 들어갈 테고, ‘서울
              시 중구 XX동’을 가리키는 컬럼 값이 10이라면 회원정보 테이블에는 10이란

              값이 10만 개 들어갈 것입니다. 10만 개의 10과 10만 개의 ‘서울시 중구 XX
              동’ 데이터의 크기는 비교할 필요도 없겠지요. 숫자로 저장해 놓는 게 효율적
              입니다.

              정리하면 RDBMS의 가장 큰 특징인 관계는 데이터 성격에 맞게 테이블을 여
              러 개로 분리하고, 분리한 테이블 간에 연결고리 역할을 하는 컬럼을 두어 이
              컬럼을 이용해 관계를 맺는 것을 말합니다. 앞으로 이 책을 보면서 느끼겠지만

              이 방식은 꽤 효율적이고 합리적입니다.







           24




     누구나 쉽게 SQL(본문)최종.indd   24                                            2019-05-28   오후 5:08:44
   7   8   9   10   11   12   13   14   15   16   17