제수기 - 제발 수업내용을 기억해라
-- 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를 참조한다. 이를 통해 주문이 어떤 사용자의 것인지 알 수 있다.
tbl_user
과 사용자 동의 정보 테이블tbl_user_aggreement
사이의 1:1 관계를 모델링해보자1:1 관계 설정
tbl_user_aggreement.user_id
가 tbl_user.id
를 참조tbl_user
)는 하나의 동의정보(tbl_user_aggreement
)만 가질 수 있다.흐름 요약
- 사용자 테이블 생성:
tbl_user
는 사용자 정보를 저장.- 동의 정보 테이블 생성:
tbl_user_aggreement
는 사용자 동의 정보를 저장하며,user_id
로 사용자와 연결.- 데이터 삽입:
tbl_user
에 사용자 데이터를 추가.tbl_user_aggreement
에 해당 사용자의 동의 정보를 추가.- 데이터 조회:
tbl_user
와tbl_user_aggreement
를조인
하여 사용자 정보와 동의 정보를 함께 조회.
1:1 관계란?
tbl_user
와tbl_user_aggreement
는 1:1 관계:
- 한 사용자는 하나의 동의 정보만 가질 수 있음.
user_id
가tbl_user.id
를 참조하고, 이를 기본 키(PK)로 설정하여 동의 정보의 유일성을 보장.
-- 일반적인 fk컬럼 연결하는 경우
-- tbl_category.category_code(부모)(1) <-- tbl_menu.category_code(자식)(N)
tbl_menu
"N" tbl_order_menu
(브릿지) tbl_order
"M"tbl_mene
에서도 tbl_order_menu
와 1:N
관계가 되고 tbl_order
에서도 tbl_order_menu
와 1:N
관계가 된다.N:M 예시를 더 찾아보자.
post - hashtag
하나의 게시글에서 여러개의 해시태그를 달 수 있다.
하나의 해시태그는 여러개의 게시글에서 쓸 수 있다.
post - post_hashtag - hashtag
follwing follwer
user - follow - user
payment - order
여러개의 주문을 한번에 결제할 수 있다.
하나의 주문을 여러개의 결제로 나눠서 할 수 있나? 더치페이.
payment - pay_order - order