Search

관계형 데이터베이스의 종류

1) 테이블과 테이블 사이의 관계

1-1) 1 : 1 관계

하나의 레코드가 다른 테이블의 레코드 한 개와 연결된 경우
위와 같이 Users 테이블과 Phonebook 테입르이 있다고 가정해보자
Users 테이블은 ID, name, phon_id 를 가지고 있다
이중 phon_id 는 외래키로서 , Phonebook 테이블의 ID 와 연결되어 있다
Phonebook 테이블은 ID와 Phon_number 를 가지고 있다.
각 전화번호가 단 한명의 유저와 연결되어 있고, 그 반대도 동일하다면, Users 테이블과 Phonebook 테이블은 1 : 1 관계다.
그러나 1 : 1 관계는 자주 사용하지 않는다.
1 : 1로 나타낼 수 있는 관계라면 Users 테이블에 phon_id 를 대신해 phon_number를 직접 저장하는게 나을 수 있다.

1-2) 1 : N 관계

하나의 레코드가 서로 다른 여러 개의 레코드와 연결된 경우다.
Users 테이블과 Phonebook 테이블의 관계를 다음과 같이 가정한다.
이 구조에서는 한 명의 유저가 여러 전화번호를 가질 수 있다.
그러나 여러명의 유저가 하나의 전화번호를 가질 수는 없다.
이런 1:N(일대다) 관계는 관계형 데이터베이스에서 가장 많이 사용한다.

1-3) N : M 관계

여러 개의 레코드가 다른 테이블의 여러 개의 레코드와 관계가 있는 경우이다.
N:M(다대다) 관계를 위해 스키마를 디자인할 때에는, Join 테이블을 만들어 관리한다.
1:N(일대다) 관계와 비슷하지만, 양방향에서 다수의 레코드를 가질 수 있다.
다음과 같이 여행 상품을 관리하는 테이블이 있다고 가정한다.
여러 개의 여행 상품이 있고, 여러 명의 고객이 있다.
고객 한 명은 여러 개의 여행 상품을 구매할 수 있고, 여행 상품 하나는 여러 명의 고객이 구매할 수 있다.
이렇게 Customer 테이블과 Package table이 따로 존재한다면, N:M(다대다) 관계를 어떻게 표현할 수 있을까?
다대다 관계는 두 개의 일대다 관계와 그 모양이 같다.
두 개의 테이블과 1:N(일대다) 관계를 형성하는 새로운 테이블로 N:M(다대다) 관계를 나타낼 수 있다.
이렇게 다대다 관계를 위한 테이블을 조인 테이블이라고 한다.
N:M(다대다) 관계를 그림으로 나타내면 다음과 같다.
customer_package 테이블에서는 고객 한 명이 여러 개의 여행 상품을 가질 수 있고, 여행 상품 하나가 여러 개의 고객을 가질 수 있다.
customer_package 테이블은 customer_id와 package_id를 묶어주는 역할이다.
이 테이블을 통해 어떤 고객이 몇 개의 여행 상품을 구매했는지 또는, 어떤 여행 상품이 몇 명의 고객을 가지고 있는지 등을 확인할 수 있다.
이렇게 조인 테이블을 생성하더라도, 조인 테이블을 위한 기본키(여기서는 ID)는 반드시 있어야 한다.