[Section 2] 관계형 데이터베이스

dohyoungK·2023년 6월 7일
0

관계형 데이터베이스

  • 데이터베이스의 필요성

    1. In-Memory
    : 변수 등에 저장한 데이터는 프로그램이 종료될 때 프로그램과 함께 데이터도 사라지므로 데이터는 프로그램의 실행에 의존한다.

    2. File I/O
    : 파일을 읽는 방식으로 In-Memory보다는 데이터를 저장하는 방식으로 적절해 보이지만, 데이터가 필요할 때마다 전체 파일을 읽어야하고, 파일의 크기가 커질수록 비효율적이다.

    반면에 관계형 데이터베이스에서는 하나의 CSV 파일이나 엑셀 시트를 한 개의 테이블로 저장하고, 여러 테이블을 가질 수 있기 때문에 데이터를 불러오기 수월하다.

  • SQL(Structured Query Language)

    : 관계형 데이터베이스에서 사용하는 구조화된 쿼리(Query: 저장되어 있는 데이터를 필터링하기 위한 질의문) 언어

  • 데이터베이스 관련 명령어

    // 데이터베이스 생성
    CREATE DATABASE 데이터베이스_이름;
    
    // 데이터베이스 사용
    USE 데이터베이스_이름;
    
    // 테이블 생성
    CREATE TABLE 테이블_이름 (
       id int PRIMARY KEY AUTO_INCREMENT,
       name varchar(255),
       email varchar(255)
    );
    
    // 테이블 정보 확인
    DESCRIBE 테이블_이름;
  • SQL 명령어

  1. SELECT: 데이터 셋에 포함될 특성을 특정한다.

  2. FROM: 테이블과 관련된 작업을 할 때 사용하고, FROM 뒤에 결과를 도출해 낼 데이터베이스 테이블 명시한다.

  3. WHERE: 필터 역할의 쿼리문

    // 특정 값과 동일한 데이터 찾기
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 = 특정 값
    
    // 특정 값과 제외한 데이터 찾기
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 <> 특정 값
    
    // 특정 값과 대 소 비교해 데이터 찾기
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 > 특정 값
    
    // 특정 문자열과 비교해 데이터 찾기
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 LIKE "%특정 문자열"
    
    // 특정 리스트의 값과 일치하는 데이터 찾기
    SELECT 특성_1, 특성_2
    FROM 테이블_이름
    WHERE 특성_1 IN (값_1, 값_2)
    
    // 값이 없는 경우인 NULL 찾기 
    SELECT *
    FROM 테이블_이름
    WHERE 특성_1 IS NULL
    
    // 값이 없는 경우인 NULL을 제외한 경우 찾기 
    SELECT *
    FROM 테이블_이름
    WHERE 특성_1 IS NOT NULL
  4. ORDER BY: 데이터 결과 정렬 기준 설정(기본정렬 = 오름차순, 내림차순 = DESC)

  5. LIMIT: 결과로 출력할 데이터 개수 설정

  6. DISTINCT: 중복없이 유니크한 값 선택

  7. INNER JOIN, JOIN: 둘 이상의 테이블을 서로 공통된 부분을 기준으로 연결

  8. OUTER JOIN: LEFT, RIGHT 중 한 테이블의 모든 결과 + 공통된 부분

  • 트랜잭션

    : 데이터베이스의 상태를 변환시키는 논리적 기능, 여러 작업을 하나로 묶은 하나의 작업 단위
  • ACID

    : 데이터베이스 내에서 일어나는 트랜잭션의 안전성을 보장하기 위해 필요한 성질
  1. Atomicity(원자성)
    : 하나의 트랜잭션의 모든 작업이 전부 성공하거나 전부 실패해서 결과를 예측할 수 있어야 한다. 어떤 작업이 성공하고 어떤 작업이 실패한다면 이전에 성공했던 작업들 모두 실패로 돌아가야 한다.
  2. Consistency(일관성)
    : 하나의 트랜잭션 이전과 이후, 데이터베이스의 상태는 이전과 같이 유효해야 한다.
  3. Isolation(격리성, 고립성)
    : 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다. 동시에 여러 트랜잭션이 수행될 때, 각 트랜잭션이 연속으로 실행된 결과와 동일하게 나타나야 한다.
  4. Durability(지속성)
    : 하나의 트랜잭션이 성공적으로 수행되었다면, 그에 대한 로그가 남아야 한다. 만약 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 한다.
  • SQL(구조화 쿼리 언어) vs NoSQL(비구조화 쿼리 언어)

  1. 관계형 데이터베이스
    : 관계형 데이터베이스는 SQL을 기반으로 하고, 테이블의 구조와 데이터 타입 등을 사전에 정의하며 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.

  2. 비관계형 데이터베이스
    : NoSQL을 기반으로 하고, 데이터가 고정되어 있지 않은 데이터베이스를 가리킨다.

    특징관계형 DB비관계형 DB
    데이터 저장(Storage)미리 작성된 스키마 기반으로 SQL을 사용해 저장NoSQL은 key-value, document, wide-column, graph 방식으로 데이터 저장
    스키마(Schema)고정된 형식의 스키마 사용동적으로 스키마의 형태 관리 가능
    쿼리(Querying)테이블의 형식과 테이블 간의 관계에 맞춰 SQL을 사용해 데이터를 요청한다데이터 그룹 자체를 조회하는 것에 초점을 둔다
    확장성(Scalability)수직적으로 확장한다수평적으로 확장한다
  • Schema

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

    : 고유한 정보의 단위, 테이블
  • Field

    : 각 Entity의 특성을 설명, 테이블의 열
  • Record

    : 테이블에 저장된 항목, 테이블의 행
  • Key

    : 테이블의 각 Record를 구분할 수 있는 값

0개의 댓글