데이터베이스...설계..?

JungHoon·2021년 12월 22일
0

관계형 데이터베이스

구조화된 데이터는 하나의 테이블로 표현이 가능

—> 사전에 정의된 테이블을 relation이라고도함
—> 테이블을 사용하는 데이터베이스를 관계형데이터베이스라고함

관계형데이터베이스 학습시 반드시 알고있어야하는 키워드?

  • 데이터 ( data ) : 각 항묵에 저장되는 값
  • 테이블 ( table; 또는 relation) : 사전에 정의된 열의 데이터 타입대로 작성한 데이터가 행으로 축적
  • 칼럼 ( column; 또는 field ) : 테이블의 한 열
  • 레코드 ( record; 또는 tuple ) : 테이블의 한 행에 저장된 데이터
  • 키 ( key ) : 테이블의 각 레코드를 구분할수 있는 값
    —> 각 레코드마다 고유한 값을 가짐
    기본키(primary key)와 외래키(foreign key) 등이 있음

관계종류

테이블과 테이블 사이의 관계는 다음과 같음

  • 1 : 1 관계
  • 1 : N 관계
  • N : N 관계

테이블 스스로 관계를 가질수도 있음

  • self referencing 관계



1 : 1 관계

하나의 레코드가 다른 테이블의 레코드 한개와 연결된 경우
       [그림] User table과 Phonebook table의 1:1 관계

각 전화번호가 단 한명의 유저와 연결되어있고 그 반대도 동일하다면 User테이블과 Phonebook 테이블은 1 : 1 관계


1 : N 관계

하나의 레코드가 서로 다른 여러개의 레코드와 연결된 경우
       [그림] User table과 Phonebook table의 1:N 관계

이 구조에서는 한명의 유저가 여러 전화번호를 가질수 있음 but 여러명의 유저가 하나의 전화번호를 가질수는 없음

—> 1 : N 관계관계형데이터베이스에서 가장 많이 사용


N : N 관계

여러개의 레코드가 다른 여러개의 레코드와 관계가 있는 경우 N : N 관계를 위해 스키마를 디자인하는할때는 Join테이블을 만들어 관리
—> 1 : N 관계와 비슷하지만 양방향에서 다수의 레코드를 가질수 있음


ex ) 여행삼품을 관리하는 테이블이 있다.
—> 여러개의 여행상품이 있고 여러명의 고객이 존재
—> 고객 한명은 여러개의 여행상품 구매가능, 여행상품 한개는 여러명의 고객이 구매가능
            [그림] Customer table과 Package table

Customer 테이블과 Package table이 따로 존재한다면 N : N ( 다 대 다)관계를 어떻게 표현할까?
—> 두개의 테이블과 1 : N 관계를 형성하는 새로운 테이블로 N : N 관계를 나타낼수 있음

다 대 다 관계를 위한 테이블을 Join테이블이라고 함

[그림] Customer table과 Package table의 N:N 관계를 위해 customer_package 테이블을 생성

customer_package테이블에서는 고객 한명이 여러 개의 여행상품을 가질수 있고, 여행 상품 하나를 여러명의 고객이 가질수 있음

customer_package테이블은 customer_id와 package_id를 묶어주는 역할

이 테이블을 통해 어떤 고객이 몇개의 여행상품을 구매했는지 또는 어떤 여행상품이 몇명의 고객을가지고 있는지 등을 확인할수 있음

—> 이렇게 조인 테이블을 생성하더라도, 조인 테이블을 위한 기본키(여기서는 cp_id)는 반드시 있어야함

  • 만약 외래키를 리스트 형식으로 관리하는 필드가 있다면 어떤 문제가 발생할수 있을까? ( 조인 테이블을 사용하지 않을때 )

    - 필드에 저장되는 데이터 크기를 설정해야하나 기하급수적으로 커질수 있고 데이터가 저장이 안될수있음
    - 데이터 수정시 각 각 수정이 잘됐는지 확인 어려움
    - 테이블 조회시 많은 비용발생

자기 참조 관계 (Self Referencing Relationship)

때로는 테이블 내에서도 관계가 필요하다  ex) 추천인 파악

다음과 같은 유저 테이블이 있다 user_id는 기본 키(primary key), name은 사용자의 이름, 그리고 recommend_id는 추천인 아이디
                [그림] 자기참조 관계를 가지는 User table

User테이블의 recommend_id는 User테이블의 user_id와 연결되어있음

한 명의 유저(user_id)는 한 명의 추천인(recommend_id)를 가질 수 있음

—> 하지만 여러명이 한명의 유저를 추천인으로 등록할수는 있음

이 관계는 1 : N 관계와 유사할수 있음 하지만 일반적으로 일대 다 관계는 서로 다른 테이블의 관계를 나타낼때 표현하는 방법

profile
Lv.1 개발자

0개의 댓글