ERP에 사용되는 SQL문장들을 배워 봅시다.
지난번에 이어 최소의 SQL서버의 기본 정보단위인 "테이블"을 구성해 가는 과정을 설명해 볼까 합니다.
테이블을 만들때 가장 염두에 두어야 하는것은 "중복된 항목을 제거한다." 라는 점입니다.
다소 어렵게 느껴질수 있겠지만 천천히 생각해 보면 아주 명료한 개념입니다.
예를 들어 학생들의 성적을 기록한 자료가 있다고 해보면
1학년 3반 김철수 국어 90점, 산수 80점, 자연 75점
1학년 3반 강영희 국어 85점, 산수 95점, 자연 80점
1학년 4반 조용희 국어 70점, 산수 70점, 자연 90점
1학년 4반 최아름 국어 65점, 산수 85점, 자연 60점
위와 같은 내용이 될것입니다.
이 자료를 이대로 서버에 기록하는 것이 최선의 선택일까요?
과정을 생략하고 결론 부터 정리하면 다음의 모양이 나옵니다.
|
|
|
|
처음 모양보다 훨씬(?) 복잡해 보이고 어려워 보이진 않나요?
하지만 이렇게 1개의 성적 자료를 3개의 조각으로 나눈 테이블은 서로 각기 부여된 번호에 의해 연결되어 있고, 중복적인 요소가 완전히 제거된 형태로서 개인의 평균, 석차는 물론 과목별 평균, 전체 평균 등의 여러가지 자료를 아주 간결하게 얻을 수 있도록 잘 정리된 형태 입니다.
이렇게 공통적인 내용을 뽑아 별도의 테이블에 기록하고 그 테이블의 내용을 이용하여 자료를 정리해 가는 방법을 우리는 "코드화 과정" 이라고도 합니다.
학생에 관한 자료를 분리해서 "학생코드"를 만들었고, 과목에 관한 자료를 분리해서 "과목코드"를 만든 다음 최종적으로 성적표 테이블에는 일일히 학생명과 과목명을 적어 주지 않고 해당 학생의 번호와 과목번호만 적어 준 것입니다.
이렇게 자료를 조각을 내놓았지만 이걸 다시 연결하는것은 아무런 걱정을 하지 않아도 되는것이 SQL서버의 뷰(VIEW)라는 것이 이런 자료의 연결을 위해서 준비된 대안이기 때문입니다.
그리고 잘 알고 있겠지만 컴퓨터에 숫자는 큰 숫자라 하더라고 아주 작은 기억 공간에 저장이 가능하고 또 계산이나 찾기가 아주 쉽습니다. 하지만 문자는 글자수 만큼 기억 공간을 차지 하기 때문에 저장 공간을 많이 차지 하게 됩니다.
물론 요즘처럼 대용량의 컴퓨터를 손쉽고 싸게 구하는 시대에서 저장공간을 줄여야 하는 목적의 가치는 크지 않을지 몰라도 자료가 아주 많아 졌을때 처리 속도는 분명 아주 중요한 문제가 됩니다.
따라서 테이블 설계의 기본은 "공통 자료는 분리하고, 가급적 코드화 시킨다."는 점이 요점이 되겠습니다.
