데이터베이스 관계
- 관계형 데이터베이스(RDBMS)는 엔티티끼리 관계를 맺을 수 있다
- 엔티티(Entitiy) : DB에 표현하려고 하는 유형, 무형의 객체로서 서로 구별되는 것
📕 1:1 관계(일대일 관계)
- 어느 엔티티 쪽에서 상대 엔티티와 반드시 단 하나의 관계를 가지는 것
- 보안 목적, 대형 테이블 분할 및 기타 다양한 특정 목적으로 사용될 수 있음
[ 예시 ]
- 다음과 같이 Users 테이블과 Phonebook 테이블이 있다고 가정한다.
- Users 테이블은 ID, name, phone_id를 가지고 있다.
- 이 중 phone_id는 외래키(foreign key)로써, Phonebook 테이블의 ID 와 연결되어 있다.
- Phonebook 테이블은 ID와 phone_number를 가지고 있다.
- 각 전화번호가 단 한 명의 유저와 연결되어 있고, 그 반대도 동일하다면, Users 테이블과 Phonebook 테이블은 1:1 관계(One-to-one relationship)이다.
- 그러나 1:1 관계는 자주 사용하지 않는다.
- 1:1로 나타낼 수 있는 관계라면 Users 테이블에 phone_id를 대신해 phone_number를 직접 저장하는 게 나을 수 있다.
📕 1:N 관계(일대다 관계)
- 한 쪽 엔티티가 관계를 맺은 엔티티 쪽의 여러 객체를 가질 수 있는 것
- N:M 관계처럼 새로운 테이블을 만들지 않음
- 예시 부모-자식
- 여러 명의 자식(N)의 입장에서 한 쌍의 부모(1)중 어떤 부모에 속해 있는지 표현해야하므로 부모 테이블의 PK를 자식 테이블에 FK로 직업 넣어 관계를 표현한다.
- PK(Primary Key) : 각 엔티티를 식별할 수 있는 대표키, 테이블에서 중복되지 않은 값(Unique), Null 불가능
- FK(Foreign Key) : 다른 테이블의 기본키를 참조, 모든 필드는 참조하는 기본키와 동일한 도메인(값의 종류&범위)을 갖는다. 모든 필드 값은 참조하는 기본키와 동일하거나 null 일 수 있다.
[ 예시 ]
- Users 테이블과 Phonebook 테이블의 관계를 다음과 같이 가정한다.
- 이 구조에서는 한 명의 유저가 여러 전화번호를 가질 수 있다.
- 그러나 여러 명의 유저가 하나의 전화번호를 가질 수는 없다.
- 이런 1:N(일대다) 관계는 관계형 데이터베이스에서 가장 많이 사용한다.
📕 N:M 관계(다대다 관계)
- 관계를 가진 양쪽 엔티티 모두에서 1:N 관계를 가지는 것
- N:M관계는 서로가 서로를 1:N, 1:M관계로 갖고 있기 때문에, 서로의 PK를 자신의 FK 컬럼으로 가지면 된다
- 일반적으로 N:M 관계는 두 테이블의 대표키를 컬럼으로 갖는 또 다른 테이블을 생성해서 관리
[ 예시 ]
- customer_package 테이블에서는 고객 한 명이 여러 개의 여행 상품을 가질 수 있고, 여행 상품 하나가 여러 개의 고객을 가질 수 있다.
- customer_package 테이블은 customer_id와 package_id를 묶어주는 역할이다.
- 이 테이블을 통해 어떤 고객이 몇 개의 여행 상품을 구매했는지 또는, 어떤 여행 상품이 몇 명의 고객을 가지고 있는지 등을 확인할 수 있다.
- 이렇게 조인 테이블을 생성하더라도, 조인 테이블을 위한 기본키(여기서는 ID)는 반드시 있어야 한다.
참조