TIL - Database - 기초 이해

김영훈·2021년 3월 24일
0

Python

목록 보기
14/14

# Database 기초 이해

  • 데이터베이스란?

    • 컴퓨터 시스템에 저장된 저장된 정보 또는 데이터의 집합을 의미
  • 등장 배경

    • 메모리에 존재하는 데이터는 보존되지 않는 휘발성

    • 오랜 기간 데이터를 저장보존하기 위해 데이터베이스를 사용

    • 일반적으로 관계형 데이터베이스(RDBMS)비관계형 데이터베이스(NoSQL)가 있다.

# 관계형 데이터베이스

  • 관계형 데이터 ex) MySQL, Postgres, Oracle DB

    • 모든 데이터들은 2차원 테이블(table)들로 표현할 수 있다.

    • 각각의 테이블은 컬럼(column)과 row(로우)로 구성되어 있다.

      • 컬럼: 테이블의 각 항목

      • 로우: 각 항목들의 실제 값

      • 개별 로우는 자기만의 고유 키(Primary Key)가 있다. 주로 이 고유 키를 통해 서 해당 로우를 찾거나 인용(reference)하게 된다.

      • 고유 키(Primary Key): 중복된 데이터가 하나의 테이블에 삽입되는 것을 방지하는 역할

  • 테이블의 연결 : 각각의 테이블들은 상호관련성을 갖고 서로 연결될 수 있다.

    • One To One
      • 테이블 A의 로우와 테이블 B의 로우가 일대일 매칭
    • One To Many
      • 테이블 A의 로우가 테이블 B의 여러 로우와 연결
    • Many To Many
      • 테이블 A의 여러 로우가 테이블 B의 여러 로우와 연결
  • 테이블과 테이블을 연결하는 방법

    • Foreign key(외부키)라는 개념을 사용하여 연결

      • 외래키는 두 테이블을 서로 연결하는 데 사용되는 키이다.

      • 외래키가 포함된 테이블을 자식 테이블이라고 하고 외래키 값을 제공하는 테이블을 부모 테이블이라한다.

    • 앞서 본 one to one 예에서 user_profiles 테이블의 user_id 컬럼을 users 테이블에 걸려있는 외부 키라고 지정한다.

    • 즉 데이터베이스에게 user_id의 값은 users 테이블의 id 값이며 그러므로 users 테이블의 id 컬럼에 존재하는 값만 생성될 수 있다.

    • 만일 users 테이블에 없는 id 값이 user_id 에 지정되면 에러가 발생한다.

  • 왜 테이블들을 연결하는가?

    • 중복된 데이터를 저장하지 않음으로 디스크를 더 효율적으로 쓰고,
    • 또한 서로 같은 데이터이지만 부분적으로만 내용이 다른 데이터가 생기는 문제가 없어진다.
    • 이것을 normalization(정규화) 이라고 한다.

# 모델링 리뷰

  • 스타벅스 음료 페이지에 대한 권장 모델링 구조

  • 과제물

  • 피드백 내용 정리

    • 코딩 컨벤션(코딩 규칙) 준수하기

      • 테이블 Name: 소문자로 시작하는 복수형 단어로 지정
      • 컬럼 Name: 소문자로 시작하는 단수형 단어로 지정
      • 복수의 단어를 연결하여 Name을 지정할 때는 '언더스코어(_)' 사용
    • 데이터베이스에선 Boolean 대신 TINYINT를 사용하여 0과 1로 표현.

    • True or False 여부를 묻는 컬럼 Name은 is_00 형식으로 지정하기 ex) is_new

    • 음료 이미지에 컬럼의 로우에는 image의 url이 값으로 입력되므로 컬럼 Name을 image_url로 짓기

    • One To One 관계 설정 시, 외래키가 있는 테이블에서 참조 대상 테이블을 바라봐야 한다. 이를 정참조라고 하는데, 정참조가 이뤄져야 데이터 조회가 편리해지기 때문이다.

    • One To Many 관계 설정 시, 자식 테이블에서 부모 테이블 방향으로 바라봐야 함(자식 입장에서 정참조에 해당)

    • kcal --> FLOAT을 DECIMAL(6, 2)로 변환

    • Foreign key(외부키) 지정은 id 컬럼이 아닌 다른 컬럼으로 지정해주는 것이 좋다.

      • ex) beverage_images 테이블의 id 컬럼 대신 drink_id 컬럼을 추가하여 foreign key로 지정
    • beverage_images 테이블의 경우 확장성(추후 이미지의 개수가 추가되어 3장, 4장으로 늘어날 가능성)을 생각한다면 1:1 연결 대신 beverages 테이블을 부모로 하는 One To Many로 연결하는 것이 좋아 보임

    • pk는 모든 테이블에 필요(고유, 유일, 변하지 않아야 하기 때문에 숫자로 함)

    • Many to Many에서 중간 테이블의 필요성: 음료 테이블과 알레르기 테이블의 데이터가 중복 증가하는 것을 막아준다.

    • Many to Many의 장점: 테이블 column이 추가됐을 때, 수정이 쉽다. 확장성이 높다.

profile
Difference & Repetition

0개의 댓글