제수기 > SQL > DB Modeling / N:M

Eunbi Jo·2024년 12월 30일
0

제수기

목록 보기
22/90
제수기 - 제발 수업내용을 기억해라

DB Modeling

-- RDBMS에서는 중복제거 / 이상현상방지 등의 목적으로 테이블을 나누어 관리한다. (정규화)
-- PK(UQ) - FK 제약조건을 통해 테이블간의 관계를 정의할 수 있다.
--예) 메뉴-카테고리 테이블, 주문-상품테이블, 주문-결제테이블
# 식별관계 구분
-- 1. 식별관계: 자식테이블의 FK컬럼이 다시 PK컬럼으로 사용되는 경우 (1:1)
-- 2. 비식별관계:  자식테이블의 FK컬럼이 다시 PK컬럼으로 사용되지 않는 경우 (1:N)
# 관계비 구분
-- 1:1 테이블헹과 행의 관계가 1:1인 경우
-- 1:N 테이블행과 행의 관계가 1:N인 경우
-- N:M 테이블 행과 행의 관계가 N:M인 경우
-- - 실제로는 두 테이블만으로는 표현이 불가능하므로, 중간테이블을 통해 1:N, M:1로 표현한다.

PK (Primary Key, 기본 키)
테이블에서 각 행(row)을 유일하게 식별할 수 있는 속성 또는 속성들의 집합.

  • 한 테이블 내에서 PK 값은 중복될 수 없다.
  • PK 값은 NULL이 될 수 없다.
  • PK는 테이블의 각 행을 고유하게 구분하는 데 사용된다.
  • 만약 사용자 테이블에서 user_id가 PK라면, user_id는 모든 사용자 행에서 유일해야 한다.

FK (Foreign Key, 외래 키)
다른 테이블의 PK(또는 UQ)를 참조하는 속성. 테이블 간의 관계를 정의하는 데 사용된다.

  • 참조 제약: FK는 참조하는 테이블(PK 테이블)의 값만 가질 수 있다.
  • FK에 없는 값을 입력하려 하면 무결성 위반 오류가 발생한다.
  • 관계 정의: FK를 통해 두 테이블 간의 관계(1:1, 1:N, N:M 등)를 표현할 수 있다.
  • 예시: 주문 테이블의 user_id가 FK라면, 이는 사용자 테이블의 user_id를 참조한다. 이를 통해 주문이 어떤 사용자의 것인지 알 수 있다.

1:1 (식별관계)

  • 사용자 테이블tbl_user과 사용자 동의 정보 테이블tbl_user_aggreement 사이의 1:1 관계를 모델링해보자
  1. 테이블 생성

    1:1 관계 설정

  • tbl_user_aggreement.user_idtbl_user.id를 참조
  • 각 사용자(tbl_user)는 하나의 동의정보(tbl_user_aggreement)만 가질 수 있다.
  1. 데이터 삽입

  2. 데이터조회

흐름 요약

  • 사용자 테이블 생성: tbl_user는 사용자 정보를 저장.
  • 동의 정보 테이블 생성: tbl_user_aggreement는 사용자 동의 정보를 저장하며, user_id로 사용자와 연결.
  • 데이터 삽입:
  • tbl_user에 사용자 데이터를 추가.
  • tbl_user_aggreement에 해당 사용자의 동의 정보를 추가.
  • 데이터 조회:
    tbl_usertbl_user_aggreement조인하여 사용자 정보와 동의 정보를 함께 조회.

1:1 관계란?
tbl_usertbl_user_aggreement는 1:1 관계:

  • 한 사용자는 하나의 동의 정보만 가질 수 있음.
  • user_idtbl_user.id를 참조하고, 이를 기본 키(PK)로 설정하여 동의 정보의 유일성을 보장.

1:N (비식별관계)

-- 일반적인 fk컬럼 연결하는 경우
-- tbl_category.category_code(부모)(1) <-- tbl_menu.category_code(자식)(N)
  • 카테고리코드 하나가 Menu 쪽에서 여러번 쓰였다.
  • using. 좌우측 테이블의 기준컬럼명이 동일한 경우만 쓸 수 있다. 하나만 아래와 같이 보여준다.

N:M 관계

  • tbl_menu "N" tbl_order_menu (브릿지) tbl_order "M"
  • tbl_mene에서도 tbl_order_menu1:N 관계가 되고 tbl_order에서도 tbl_order_menu1:N 관계가 된다.

  • 1번 주무 내역 조회
  • 주문번호, 주문일시, 총주문금액, 메뉴번호, 메뉴명, 카테고리명, 메뉴가격, 수량

N:M 예시를 더 찾아보자.

  • post - hashtag
    하나의 게시글에서 여러개의 해시태그를 달 수 있다.
    하나의 해시태그는 여러개의 게시글에서 쓸 수 있다.
    post - post_hashtag - hashtag

  • follwing follwer
    user - follow - user

  • payment - order
    여러개의 주문을 한번에 결제할 수 있다.
    하나의 주문을 여러개의 결제로 나눠서 할 수 있나? 더치페이.
    payment - pay_order - order


0개의 댓글