테이블간의 관계에 대해 간단히 알아보면 1:1, 1:N, N:M(여러개랑 여러개)의 관계들이 있다.
아래 그림은 학생과 수업의 관계를 나타내는 테이블인데 다대다의 관계를 가지고 있다.
위 그림처럼 여러 명의 학생과 여러 개의 수업을 테이블로 나타내면 경우의 수가 어마무시하게 많아져 어떤 정보를 찾을 때 매우 어려워진다.
따라서 각 테이블은 해당 테이블에 필요한 정보를 나타내도록 하고, 테이블 행(여러 학생 또는 수업)을 식별할 수 있는 것만 뽑아내서 두 테이블의 관계를 표현하는 아래 그림과 같은 관계를 나타내 주는 새 테이블을 만들어 1:N 관계로 나눠준다.
이렇게 하면 학생들의 정보와 수업들의 정보를 담은 두 테이블과 학생_수업과의 관계를 나타내는 테이블이 만들어 지며, 학생 테이블과 학생-수업 테이블 // 수업 테이블과 학생-수업 테이블은 각각 1:N 관계를 가지게 된다.
PK(primary key: 기본키)
는 학생과 수업의 테이블에서 각 행의 정보들을 식별할 수 있는 정보(학생코드, 수업코드)를 표현한다.
PK는 테이블 행의 여러 정보들 중 행을 식별할 수 있어야 하기 때문에 비어있으면 안되고(NOT NULL), 중복되어서도 안된다(Unique). 그리고 식별을 할 때 테이블의 정보를 최대한 빠르게 검색해야 하므로 간단한 정보일 수록 좋다.
FK(foreign key:외래키)
는 참조하는 테이블과 참조되는 테이블의 관계를 나타낸다.
그림에서 학생-수업 테이블은 학생 테이블과 수업 테이블의 관계를 1:N 관계로 나타내기 위한 테이블이므로 학생 테이블과 수업 테이블을 참조하여 만들어야 한다.
그러기 위해서 학생 정보를 식별하는 학생코드(PK), 수업 정보를 식별하는 수업코드(PK)로 테이블이 구성되며 이렇게 다른 테이블의 정보를 참조하기 위한 학생코드와 수업코드는 학생_수업테이블 내에서 FK(외래키)가 된다.
학생과 수업 테이블의 PK
가 학생-수업 테이블에서는 FK
가 되며, 이는 학생-수업 테이블은 학생과 수업 테이블을 참조하는 테이블이라는 의미를 표현하는 동시에 학생과 수업 테이블은 학생-수업 테이블에 의해 참조되는 테이블로 서로의 관계를 알 수 있게 된다.