즉, "데이터베이스의 청사진"과 같다.
데이터가 어떻게 표현되어야 할지 구상하고, 그 데이터를 정의하고, 데이터들 간의 관계를 구성하는 방법, 이 때 필요한 것이 스키마다
학교를 위한 데이터베이스를 구축한다고 가정할 경우 간단한 예로 School이라는 스키마 즉 DB의 청사진을 만들었다. 쉽게 교사(Teacher), 수업(Classes), 학생(Student)과 같은 데이터를 저장하기 위해 샘플을 준비해뒀다.
샘플을 예제로 3개의 테이블의 관계를 알아보자. 가장 먼저 Teachers와 Classes의 관계를 먼저 확인해보자
보통, 한 명의 교수님이 여러 개의 강의를 가르친다.
한 명의 교수님은 여러 개의 강의를 할 수 없지만, 하나의 강의는 여러 명의 교수님이 가르칠 수 없다.
즉, 교수
와 강의
두 엔티티의 관계는 일 대 다 관계(1:N, one-to-many)
이다.
이 각 엔티티 간 관계를 연결할 때, 각 엔티티 간 교유한 ID를 활용한다.
이는 각 엔티티(테이블)의 레코드 하나를 가리키는 숫자로, 자동적으로 레코드가 추가될 때마다 ID도 증가한다(auto increments). 이 ID 필드는 해당 테이블의 기본 키(Primary Key)역할을 한다.
교수
와 강의
엔티티 간의 일 대 다 관계를 연결하기 위해, 교수
의 기본 키를 강의
엔티티로 참조해오는 것으로 수행할 수 있다.
현재 테이블이 아닌 다른 테이블에서 기본 키(Primary Key)를 참조해야 하므로, 강의
테이블에 새로운 필드가 만들어지고, 그 필드는 교수
테이블에서 특정 레코드를 고유하게 식별하는 외래 키이다.
강의
와 학생
으로 보면,
하나의 강의
는 여러 학생
이 수강할 수 있다.
한 명의 학생
은 여러 개의 강의
를 수강할 수 있다.
강의
와 학생
엔티티 간의 관계는 다대 다(N:M, many-to-many) 관계
가 된다.
이 관계를 스키마에서 정의하는 방법은 일대 다 관계
와는 조금 다르다.
새로운 테이블에 강의
의 기본 키와 학생
의 기본 키를 외래 키로 참조하여 새로운 필드를 만드는 것으로 관계를 형성할 수 있다.
이 새로운 테이블을 조인(join) 테이블이라 부른다.
하나의 강의
는 조인 테이블에서 여러번 등장하기 때문에, 일대 다 관계이다. 마찬가지로, 한 명의 학생
이 조인 테이블에서 여러번 등장하기 때문에, 학생
테이블과 조인 테이블은 일대 다 관계이다.