[2024.05.20 TIL] 내일배움캠프 24일차 (관계형 데이터베이스, MySQL, SQL 제약 조건)

My_Code·2024년 5월 24일
0

TIL

목록 보기
31/113
post-thumbnail

본 내용은 내일배움캠프에서 활동한 내용을 기록한 글입니다.


💻 TIL(Today I Learned)

📌 Today I Done

✏️ 관계형 데이터베이스 (RDB, Relational DataBase)

  • 각 데이터를 테이블이라는 표 형태의 구조에 저장

  • 테이블 간에 연관 관계를 설정할 수 있으며, 이를 통해 여러 테이블에 분산된 데이터를 서로 연결하여 관리할 수 있음


✏️ 관계형 데이터베이스(RDB)와 비관계형 데이터베이스(NoSQL)

  • 비관계형 데이터베이스(NoSQL)는 유연한 데이터 구조를 가지고 있기 때문에 저장과 읽기 작업이 더욱 빠름

  • 그래서 복잡한 비즈니스 로직 없이 주로 데이터 읽기와 쓰기에 중점을 둔 서버에서 주로 사용됨 ex) 빅데이터 환경, 단순 페이지뷰가 많은 어플리케이션

  • 관계형 데이터베이스(RDB)는 더욱 복잡한 비즈니스 로직과 정형화된 데이터를 체계적으로 관리할 수 있음

  • 그래서 보안이 중요한 기관이나, 은행과 같은 안전성을 중시하는 회사들의 서버에서 주로 사용됨


✏️ MySQL

  • MySQL은 가장 널리 사용되는 오픈소스 관계형 데이터베이스

  • 데이터베이스를 관리하는 가장 대표적인 언어 SQL(Structured Query Language)을 사용하여 데이터를 조작하고 관리함

  • 트랜젝션의 특징인 ACID를 준수하여 구현된 데이터베이스로, 트랜젝션을 안전하게 처리할 수 있음


✏️ SQL 제약조건

  • 제약 조건(Constraint)이란? 컬럼들간의 제한 사항을 관리하고, 조건을 위반하는 데이터를 방지하여 데이터베이스의 유결성을 보장하는 규칙

  • 즉, 데이터베이스 설계 시 제약 조건을 통해 해당 테이블이 어떤 역할을 하는지, 어떤 데이터를 저장하고 있는지 명확하게 인지할 수 있게 도와주는 역할을 함

  • 대표적인 제약 조건의 종류

    • 고유(Unique) 제약 조건
    • NULL 제약 조건
    • 기본 키 (Primary Key) 제약 조건
    • 외래 키 (Foreign Key) 제약 조건
  • 고유(Unique) 제약 조건

    • 사용자 아이디, 이메일과 같은 고유한 정보를 저장할 때 사용
  • NULL 제약 조건

    • 특정 컬럼이 아무런 값을 입력받지 않도록 설정하거나, 무조건 값을 입력 받고록 설정하는 조건
  • 기본 키 (Primary Key) 제약 조건

    • 테이블의 각 행(row)을 고유하게 식별할 수 있도록 보장하는 조건
  • 외래 키 (Foreign Key) 제약 조건 (⭐⭐)

    • 테이블 간의 관계를 설정하는 조건
    • 데이터베이스 설계 시 가장 많은 고민을 해야하는 조건
    • 밑 예제 참고

✏️ 음식 주문앱 DB 설계 예시

  • 회원 1명은 주문 N개를 할 수 있음 => 회원 : 주문 = 1 : N 관계

  • 음식 1개는 주문 N개에 포함될 수 있음 => 음식 : 주문 = 1 : N 관계

  • 결과적으로 => 회원 : 음식 = N : M 관계

CREATE TABLE User
(
    userId int(11)      NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name   varchar(255) NOT NULL UNIQUE
);

CREATE TABLE Food
(
    foodId int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name   varchar(255),
    price  int(11)
);

CREATE TABLE Order
(
    orderId   int(11)  NOT NULL AUTO_INCREMENT PRIMARY KEY,
    userId    int(11)  NOT NULL,
    foodId    int(11)  NOT NULL,
    createdAt datetime NOT NULL DEFAULT NOW(),
    FOREIGN KEY (foodId) REFERENCES Food (foodId)
        ON DELETE NO ACTION
        ON UPDATE CASCADE,
    FOREIGN KEY (userId) REFERENCES User (userId)
        ON DELETE NO ACTION
        ON UPDATE CASCADE
);

✏️ SELECT JOIN ... ON 연산자

  • INNER JOIN은 두 테이블에서 일치하는 값을 가진 행을 반환

  • LEFT JOIN(또는 LEFT OUTER JOIN)은 왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 오른쪽 테이블의 열에 대해 NULL 값이 반환됨

  • RIGHT JOIN(또는 RIGHT OUTER JOIN)은 오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 행을 반환합니다. 일치하는 항목이 없으면 왼쪽 테이블의 열에 대해 NULL 값이 반환됨

  • FULL OUTER JOIN은 왼쪽 또는 오른쪽 테이블에 일치하는 항목이 있으면 모든 행을 반환합니다. 일치하는 항목이 없으면 일치하지 않는 테이블의 열에 대해 NULL 값이 반환됨



📌 Tomorrow's Goal

✏️ 노드 숙련 강의 시청하기

  • 2주차 남은 강의를 시청

  • 최대한 시청 후 과제 문서를 작성할 수 있도록 노력할 것!!

  • 내일도 시간이 많지 않기 때문에 오전, 오후에 최대한 시청할 예정



📌 Today's Goal I Done

✔️ 노드 숙련 강의 시청하기

  • 예비군으로 밀린 강의를 시청함

  • 원래는 2주차를 오늘 안에 다 시청하려고 했으나, 생각보다 내용이 어려웠음

  • 완전히 막힌다기 보다는 내용이 어려워서 검색하면서 이해하느라 진행이 느렸음

  • 현재 2주차 1/3 정도 완료한 상태

  • 주말을 이용해서 최대한 강의를 들을 예정


profile
조금씩 정리하자!!!

0개의 댓글