11. Databases

2021. 1. 13. 20:49·BootCamp_Codestates/IM Tech Blog

Structured Query Language with Database

Server with Database

 

Achievement Goals

Learn SQL

  • SQL과 Schema가 무엇인지 스스로 정의할 수 있다.
  • 1:N, N:N 관계를 이해하고, 데이터베이스에서 테이블을 조작할 수 있다.
  • Learn SQL에서 다루는 SQL을 사용 혹은 활용할 수 있다.

Chatterbox Database

  • Database가 무엇인지 스스로 정의할 수 있다.
  • persistance의 개념을 이해하고, 데이터베이스의 필요성을 인지한다.
  • schema를 설계할 수 있다.
  • 클라이언트의 http 요청에 따라 CRUD API를 구현할 수 있다. (CRUD: Create, Read, Update, Delete)

Database & SQL

 

Database : 필터링 외에도 File I/O 로 구현이 힘든 관리를 위한 여러 기능들을 가지고 있는 데이터 특화된 서버

SQL: 구조화된 Query 언어. 저장되어 있는 정보를 필터 하기 위한 질문으로 server 에서 database 로 query 를 보내 원하는 데이터만을 뽑아올 수 있다.

 

 

 

Learn SQL

문법은 여기에서 공부: www.w3schools.com/sql/default.asp

Quiz: www.w3schools.com/quiztest/quiztest.asp?qtest=SQL

Practice:www.w3schools.com/sql/sql_exercises.asp

 

주요 문법

 

Schema & Query Design

 

  • 데이터 간의 다양한 관계를 알아본다.
  • 데이터 간 관계를 기술하는 언어인 SQL 을 익힌다.
  • 합리적이고, 효율적인 방법으로 데이터베이스를 구성하는 방법을 이해한다.
  • SQL 쿼리를 작성하여 데이터베이스에서 관련 정보를 찾는 방법을 배운다.

Schema?

 

스키마는 데이터베이스에서 데이터가 구성되는 방식과 서로 다른 엔티티 간의 관계에 대한 설명이다. 데이터베이스의 청사진.

https://dbdiagram.io/home 에서 연습해볼 수 있다.

1. 구성요소

 

1) Entities?

고유한 정보의 단위로 테이블이다.

 

여기에서 entity 는 Teachers, Classes, Students

 

2) Field?

엔티티의 특성을 설명하는 부분으로 행렬에서 Column 에 해당한다.

 

3) Record?

각 테이블에 저장된 항목으로 행렬에서는 row 다.

2. 관계

 

1) 1:1 (one to one, 일대일 관계)

일반적인 1:1 관계는 *Foreign Key(외래키)를 서로 주고 받아 관계를 형성합니다.

만약, 직원 당 사무실을 제공하는 회사가 있다고 가정하면 아래와 같이 표현할 수 있습니다.

출처: https://advenoh.tistory.com/31

*Foreign Key(외래키), 두 테이블을 서로 연결하는 데 사용되는 키.

 

2) 1: N (one to many, 일대다 관계)

한 교사는 여러 수업을 진행할 수 있지만, 하나의 수업은 단 한 명의 교사에 의해 진행된다. 따라서 1: N의 관계이다.

(단, 만약 하나의 수업을 다수의 다른 교사가 진행할 수 있다면 N:N 의 관계가 될 것이다.)

 

해결책

FK 가 포함된 테이블을 자식 테이블, FK 값을 제공하는 테이블을 부모 테이블이라 한다.

1:N = Teachers:Classes 이므로, Teachers 가 부모 테이블이다.

 

Teachers 테이블의 필드중 하나인 Primary Key(고유 Key. 여기에서 ID) 를 Classes 테이블의 필드인 TeacherID 가

가리키게 만드는 방법으로, 이로써 부모테이블의 PK 가 Classes 의 Foreign Key 로 지정된다.

The FOREIGN KEY constraint is used to prevent actions that would destroy links between tables.

The FOREIGN KEY constraint also prevents invalid data from being inserted into the foreign key column, because it has to be one of the values contained in the table it points to.

 

Classes 테이블의 구현 코드는 아래와 같다.

CREATE TABLE Classes (
    ID int NOT NULL,
    Name int NOT NULL,
    Room Num. int,
    PRIMARY KEY (ID),
    FOREIGN KEY (TeacherID) REFERENCES Teachers(ID)
); 

Teachers 테이블의 ID 필드가 생성되면 자동으로 Classes 의 해당 TeacherID 도 생성된다.

 

 

3) N:N (many to many 다대다 관계)

 

각 수업은 여러 명의 학생들로 구성되어 있고, 각 학생들은 여러개의 수업을 들을 수 있기 때문에 N:N 관계이다.

 

해결책

 

이 경우 JOIN 테이블을 만들어 두 테이블을 연결할 수 있는데,

Join(Classes/Students) 테이블의 ClassID 칼럼 값(Foreign Key)에는 Classes 의 ID(Primary Key) 값이,

StudenID 칼럼 값(Foreign Key)에는 Students 의 ID(Primary Key) 값이 들어간다.

 

따라서 전체 모습은 다음과 같다.

.

문제

 

'Kelly' 라는 교사가 당일 수업을 취소한다는 이메일을 해당 수업 학생들에게 보내야 하는 상황일 때,

해당 학생들의 이름과 이메일을 출력하는 방법은 무엇인가?

 

주어진 테이블은 다음과 같다.

 

정답

연결 순서: Students -> Classes/Students -> Classes - Teachers

구하고 싶은 칼럼을 포함한 테이블을 기준(출발점)으로 하여 조건을 주고 싶은 테이블까지 inner join (교집합) 으로 연결하여 구현한다.

여기에서 출발점은 Students 테이블, 조건은 Teachers 테이블에서 부여한다.

'BootCamp_Codestates > IM Tech Blog' 카테고리의 다른 글

13. authentication  (0) 2021.01.20
10. Redux  (0) 2021.01.11
8-1. React 데이터흐름 & State 끌어올리기  (0) 2021.01.05
8. React Part1  (0) 2021.01.01
5. Asynchronous & Promise  (0) 2020.12.21
'BootCamp_Codestates/IM Tech Blog' 카테고리의 다른 글
  • 13. authentication
  • 10. Redux
  • 8-1. React 데이터흐름 & State 끌어올리기
  • 8. React Part1
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;) N
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • Next.js
        • Flutter
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test N
        • LeetCode N
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML & CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Operating System
    자바스크립트 딥다이브
    Threads and Multithreading
    딥다이브
    js pattern
    스코프
    mobile app
    CPU scheduling algorithm
    Time complexity and Space complexity
    프론트엔드 성능 최적화 가이드
    structure of os
    indie hacker
    How memory manage data
    모던 자바스크립트 Deep Dive
    TCP/IP
    testing
    leetcode
    polylingo
    database
    JavaScript
    VoiceJournal
    need a database
    DOM
    Shared resources
    Network
    이벤트
    Data Structure
    자바스크립트
    Binary Tree BFS
    커리어
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
11. Databases
상단으로

티스토리툴바