구조화된 데이터는 하나의 테이블로 표현된다.
이처럼 사전에 정의된 테이블을 relation이라고 한다.
즉, 관계형 데이터베이스는 테이블을 사용하는 데이터베이스를 뜻한다.
테이블 간의 관계는 아래처럼 구분할 수 있다.
테이블의 레코드 하나당 다른 테이블의 한 레코드와 연결되어 있는 경우.
위의 그림에서 User 테이블과 Phonebook 테이블의 관계를 보자.
유저 테이블에는 유저 아이디, 유저 이름, 핸드폰 아이디라는 외래키를 가지고 있다.
전화번호부 테이블에는 전화번호를 보관하고 있다.
한 개의 전화번호당 한 명의 유저를 가지고 그 반대도 동일하다면 이것은 1:1 관계이다.
하지만 이러한 경우는 흔하지 않는데 왜냐하면 어차피 1:1 관계라면 한 테이블에 같이 적는 것이 더 나을 수도 있기 때문이다.
테이블의 레코드 하나당 다른 테이블의 여러 개의 레코드와 연결되어 있는 경우.
한 유저가 여러 개의 전화번호를 가질 수 있지만 한 전화번호가 여러 명의 유저를 가질 수 없는 경우이다.
이러한 일대다 관계는 관계형 데이터베이스에서 제일 많이 사용된다.
여러 개의 레코드가 여러 개의 레코드를 가지는 관계이다.
해당 관계의 경우에는 따로 '조인 테이블'을 만들어 관리를 하게 된다.
양방향에서 다수를 가질 수 있는 경우로 위의 예를 통해 살펴보자.
여행 상품이 있다고 하자. 여러 개의 여행 상품이 있고 여러 명의 고객들이 있을 때 한 고객은 여러 개의 여행 상품을 사용할 수 있다.
이러한 다대다 관계는 두 개의 일대다 관계라고 볼 수 있다. 즉, 양 테이블에서 일대다 관계를 만들어줄 수 있는 새로운 테이블을 만들어서 관리를 해줄 수 있다.
이러한 테이블을 조인 테이블이라고 한다.
조인테이블을 통해 양 테이블의 관계를 아래와 같이 정리할 수 있다.
조인 테이블인 'customer_package'테이블의 역할은 그저 customer_id와 package_id를 묶어주는 역할이다.
이 테이블을 통해서 어떤 고객이 어떤 여행상품페키지를 가지고 있는지, 혹은 어떤 여행 상품이 어떤 고객들을 가지고 있는지 등을 확인할 수 있다.
이 때, 이 조인테이블을 따로 테이블로 생성했을 때에도 동일하게 기본키가 있어야 한다.
테이블 내에서의 관계이다.
예를 들자면 추천인이 누구인지, 혹은 조직 내에 상하관계를 표현하기 위할 때 사용할 수 있다.
유저 한 명 당 한 명의 추천인을 입력할 수 있다.
즉, 한 유저당 하나의 추천인을 가질 수 있는 것이다. 하지만 추천인 입장에서는 여러 명의 유저를 추천할 수 있다. 이는 1:N 관계와 유사하다고 할 수 있다.