728x90

관계형 데이터베이스에서의 외래 키 속성을 사용해 모델 간 N:1 관계를 설정해보자.

 

 

목차

  1. Intro
  2. RDB에서의 관계
  3. Foreign key

 


1. INTRO

 

RDB(관계형 데이터베이스) 복습

 

  • 데이터를 테이블, 행, 열 등으로 나누어 구조화하는 방식
  • RDB의 모든 테이블에는 행에서 고유하게 식별 가능한 기본 키라는 속성이 있고, 외래 키를 사용하여 각 행에서 서로 다른 테이블 간의 관계를 만드는데 사용할 수 있음

※ 참고 - 관계(Relationship)

  • 테이블 간의 상호작용을 기반으로 설정되는 여러 테이블 간의 논리적인 연결

 

테이블 간 관계 예시

 

  • 다음과 같이 어떠한 서비스의 데이터베이스에 고객 테이블과 주문 테이블이 존재
  • 고객 테이블에는 고객에 관한 데이터가, 주문 테이블에는 주문에 관한 거래 정보가 포함

 

  • 만약 고객들이 특정 제품을 주문한다면 주문 테이블에 레코드가 생성됨
  • 그런데 해당 주문이 올바르게 배송되기 위해서는 어떤 고객이 주문했는지를 알아야 함
    • 즉, 배송지 주소를 가지고 있는 고객 테이블의 정보를 포함해야 함
  • 주문 테이블에서 어떻게 고객 테이블 정보를 포함 할 수 있을까?

 

  • 각 주문데이터에 고객 정보를 입력하는 방법이 있음
  • 하지만 이렇게 이름으로 저장할 경우 이름이 같은 다른 사용자를 구분할 수 없음
  • 그렇다면 고객 정보의 어떤 데이터를 사용하는 것이 적합할까?

 

  • 고객 정보의 기본 키인 고객 id 정보를 저장하는 방법이 있음
  • 이처럼 관계형 데이터베이스에서 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키를 외래 키(foreign key, FK)라 함

 

  • 이렇게 되면 이 두 테이블은 공유된 고객 id를 기반으로 연결되며 다양한 명령 처리를 진행할 수 있음
    • 특정 날짜에 구매한 모든 고객 정보 확인하기
    • 지난달에 배송이 지연된 주문을 받은 고객 처리하기
    • 특정 고객이 주문한 모든 주문 정보 조회하기.. 등
  • 실제 상황보다는 간단한 예시지만 이처럼 RDB는 데이터 간의 매우 복잡한 관계를 보여주고 처리하는데 탁월한 방식

 

2. RDB에서의 관계

 

  1. 1:1
    • One-to-one relationships
    • 한 테이블의 레코드 하나가 다른 테이블의 레코드 단 한 개와 관련된 경우
  2. N:1
    • Many-to-one relationships
    • 한 테이블의 0개 이상의 레코드가 다른 테이블의 레코드 한 개와 관련된 경우
    • 기준 테이블에 따라 (1:N, One-to-many relationships)이라고도 함
  3. M:N
    • Many-to-many relationships
    • 한 테이블의 0개 이상의 레코드가 다른 테이블의 0개 이상의 레코드와 관련된 경우
    • 양쪽 모두에서 N:1 관계를 가짐

 

Many-to-one relationships 예시

 

  • 여러 개의 주문 입장에서 각각 어떤 주문에 속해 있는지 표현해야 하므로 고객 테이블의 PK주문 테이블에 FK로 집어 넣어 관계를 표현
  • 만약 고객이 단 한 개의 주문만 생성할 수 있다면 두 테이블은 1:1 관계라 할 수 있음

 


3. Foreign Key

 

개념
  • 외래 키(외부 키)
  • 관계형 데이터베이스에서 한 테이블의 필드 중 다른 테이블의 행을 식별할 수 있는 키
  • 참조하는 테이블에서 1개의 키에 해당하고, 이는 참조되는 측 테이블의 기본 키(Primary Key)를 가리킴
  • 참조하는 테이블의 행 1개의 값은, 참조되는 측 테이블의 행 값에 대응됨
    • 이 때문에 참조하는 테이블의 행에는, 참조되는 테이블에 나타나지 않는 값을 포함할 수 없음
  • 참조하는 테이블 행 여러 개가, 참조되는 테이블의 동일한 행을 참조할 수 있음

 

특징
  • 키를 사용하여 부모 테이블의 유일한 값을 참조 (by 참조 무결성)
  • 외래 키의 값이 반드시 부모 테이블의 기본 키 일 필요는 없지만 유일한 값이어야 함

 

※ 참고 - 참조 무결성

  • 데이터베이스 관계 모델에서 관련된 2개의 테이블 간의 일관성을 말함
  • 외래 키가 선언된 테이블의 외래 키 속성(열)의 값은 그 테이블의 부모가 되는 테이블의 기본 키 값으로 존재해야 함

 


N:1 relationship에 대한 실습은 Django 카테고리 - [DB with Django] 참고

728x90

'CS > Database with SQLite' 카테고리의 다른 글

[DB] M:N (ManyToManyField)  (0) 2022.10.13
[DB] DML3 - Grouping, Changing data  (1) 2022.10.05
[DB] DML2 - Filtering data  (1) 2022.10.05
[DB] DML1 - simple query, Sorting rows  (0) 2022.10.05
[DB] DDL2 - ALTER, DROP TABLE  (0) 2022.10.05