스키마는 뭘까?
쉽게 말하면 테이블 간의 관계도이다.
우리는 SQL에서 테이블 구조를 사용해 데이터를 표현하는 것을 알고 있다.
즉, 스키마는 관계형 DB를 사용할 때 설계하게 된다.
관계형 DB는 서버 사이드 구축시 사용되고.
즉, 서버를 구축할 때 연동할 DB를 설계하기 위한 밑작업이라 볼 수 있다.
그렇다면 스키마를 왜 설계해야 할까?
기존의 테이블 샘플을 가지고 새로운 테이블을 구축할 때 중복되는 요소들을 최대한 줄이고 효율적인 데이터 구성을 진행할 수 있기 때문이다.
아래의 이미지는 스키마의 예시이다.
위의 DB 샘플을 가지고 수강신청을 위한 효율적인 DB를 새로 구축해보자
이미지를 보면 Teachers의 필드로 Classes가 들어가있고 Classes는 Teacher, Students를 필드로 가지고 있다.
그리고 Students 역시 Classes를 필드로 가지고 있다.
아래의 이미지는 위의 스키마 중 Teachers 샘플을 테이블로 구성한 것이고 이를 확인하면 엔티티, 필드, 레코드의 개념을 확인할 수 있다.
다시 돌아가서 우선 Teachers와 Classes의 관계를 확인하고 어떻게 하면 두 테이블에서 효율적인 구성을 가진 새로운 테이블을 만들 수 있을지 확인해보자
각각의 교사들은 여러가지 수업을 진행할 수 있고 하나의 강의는 여러 교사들이 가르칠 수 없는 관계다.
즉, Teachers : Classes = 1 : N 의 관계라고 할 수 있다.
그렇다면 테이블로는 어떻게 표현하면 될까?
이렇게 표현하는게 효율적일까? 아니다. ClassID의 공간이 부족할지도 모른다.
그렇다면 이렇게는? 역시나 효율적이지 않다. 새로운 class가 추가될 때마다 class테이블에는 class대로, Teachers 테이블에는 중복된 Name값, classID값이 같이 생성되야 한다. 또한 교사가 개명을 하게 된다면 해당하는 모든 Name값을 업데이트해야 한다.
그렇다면 다음은 어떨까? 새로운 강의가 개설된다면 단지 강좌의 정보들과 교사의 id만 classes 테이블에 표현해주면 된다. 앞선 예시들보다 효율적인 구성으로 보인다.
자 그렇다면 이제 Classes와 Students의 관계를 살펴보자
하나의 Class는 여러 명의 학생들이 수강할 수 있고 한 명의 학생은 여러개의 강의를 수강할 수 있다.
즉, Classes : Students = N : N, 다대다 관계라고 할 수 있다.
그리고 다음과 같은 테이블로 구성할 수 있다.
1 : N 관계에선 N측의 테이블에 필드를 추가했다면, N : N 관계에선 각자의 필드를 추출하여 새로운 테이블을 생성한 것을 확인할 수 있다.
그리고 자세히 살펴보면 Classes/Students 테이블은 Classes, Students와 각각 1 : N의 관계, 즉 2번의 1 : N 으로 생성한 테이블임을 알 수 있다.
결론적으로 수강신청을 위한 스키마 ( 관계도 ) 를 정리하면 다음과 같이 표현된다
스키마를 설계하는 과정을 요약하면 샘플 DB 간의 관계 ( 1 : N인지, N : N 인지 ) 를 확인하고 그에 맞는 효율적인 데이터 테이블을 구성하는 것이다.