241104 CS 스터디

apple-mint·2024년 11월 4일

CS study

목록 보기
7/15

1. 데이터베이스의 큰 그림

1) 데이터베이스와 DBMS

  • 데이터베이스: 원하는 기능을 동작시키기 위해 마땅히 저장해야 하는 정보의 집합
  • 데이터베이스 관리 시스템(DBMS): 데이터베이스를 관리하기 위한 프로그램
  • 크게 관계형 데이터베이스 관리 시스템, NoSQL 데이터베이스 관리 시스템이 있음
  • DBMS 클라이언트는 DBMS에서 쿼리를 보냄

2) SQL 종류

  • 데이터베이스에 질의하기 위한 구조화된 언어를 말함

(1) DDL

  • CREATE: 데이터베이스, 테이블, 뷰, 인덱스 등의 데이터베이스 객체 생성
  • ALTER: 데이터베이스 객체 갱신
  • DROP: 데이터베이스 객체 삭제
  • TRUNCATE: 테이블 구조를 유지한 채 모든 레코드 삭제

(2) DML

  • SELECT: 테이블의 레코드 조회
  • INSERT: 테이블에 레코드 삽입
  • UPDATE: 테이블의 레코드 갱신
  • DELETE: 테이블의 레코드 삭제

(3) DCL

  • COMMIT: 데이터베이스에 작업 반영
  • ROLLBACK: 작업 이전의 상태로 되돌림
  • SAVEPOINT: 롤백 기준점 설정

(4) TCL

  • GRANT: 사용자에게 권한 부여
  • REVOKE: 사용자로부터 권한 회수

3) 데이터베이스를 이용하는 이유

  • 데이터 일관성 및 무결성 제공이 가능함
  • 불필요한 중복 저장을 피할 수 있음
  • 데이터 변경시 연관 데이터 변경이 가능함
  • 정교한 검색이 가능함
  • 백업 및 복구가 가능함

4) 데이터베이스의 저장 단위와 트랜잭션

  • 엔티티: 독립적으로 존재할 수 있는 객체
  • 속성: 엔티티의 특성
  • 엔티티 집합: 같은 속성을 공유하는 개별 엔티티
  • 릴레이션: 2차원 테이블 형태의 엔티티 집합
  • 컬렉션: NoSQL의 일종인 RDBMS에서 표현하는 엔티티 집합
  • 레코드: 데이터베이스에 기록된 각각의 엔티티
  • 필드: 데이터베이스에 저장된 엔티티 속성
  • 스키마
    • RDBMS와 NoSQL을 구분하는 주요 기준 중 하나
    • 데이터베이스에 저장되는 레코드의 구조와 제약 조건을 정의
    • RDBMS는 명확하나 NoSQL은 그렇지 않음
  • 트랜잭션
    • 데이터베이스와의 논리적 상호작용의 단위
    • 초당 트랜잭션 지표로 데이터베이스의 작업 성능을 나타내기도 함
    • 트랜잭션은 하나 이상의 쿼리를 포함할 수 있음

5) ACID

  • 원자성: 하나의 트랜잭션 결과가 모두 성공하거나 실패하는 성질
  • 일관성: 트랜잭션 전후로 데이터베이스가 일관된 상태를 유지하는 성질
  • 격리성: 동시에 수행되는 여러 트랜잭션이 서로 간섭하지 않도록 보장하는 성질
  • 지속성: 트랜잭션이 성공적으로 끝난 뒤 그 결과가 영구적으로 반영되는 성질

2. RDBMS의 기본

1) 필드 유형

  • 각 필드로 사용 가능한 데이터 유형

(1) 숫자형

  • TINYINT, SMALLIT, MEDIUMINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL

(2) 문자형

  • CHAR, VARCHAR, BLOB, TEXT

(3) 날짜/시간형

  • DATE, TIME, DATETIME, TIMESTAMP

(4) 기타

  • ENUM, GEOMETRY, XML, JSON

2) 키

테이블 내 특정 레코드를 식별할 수 있는 필드의 집합

  • 테이블의 각 레코드를 식별하는 용도로 사용
  • 테이블 간 참조를 위해 사용
  • 테이블 접근 속도를 높이기 위해 사용

(1) 기본 키

  • 한 레코드를 식별하도록 선정되어 테이블당 하나만 존재할 수 있는 키
  • 유일성과 최소성을 모두 만족함
  • 여러 필드로 구성된 기본 키도 존재할 수 있음
  • 중복 값이 없어야 하고 반드시 값이 존재해야 함
  • 레코드를 구분하기 위한 최소한의 정보만으로 이루어져야 함

(2) 외래 키

  • 다른 테이블의 기본 키를 참조하는 필드
  • 테이블 간 참조 관계 형성 시 사용하는 키

(3) 후보 키

  • 테이블의 한 레코드를 식별하기 위한 필드의 최소 집합
  • 유일성과 최소성을 모두 만족하는 키

(4) 복합 키

  • 2개 이상의 필드로 구성된 후보 키

(5) 슈퍼 키

  • 레코드를 식별하기 위한 필드의 집합
  • 유일성만 만족하고 최소성은 만족하지 않음

(6) 대체 키

  • 기본 키가 아닌 후보 키
  • 기본 키 선정 이후 남은 후보 키

3) 테이블 간 관계

  • 일대일 대응 관계: 하나의 레코드가 다른 테이블의 레코드 하나에만 대응되는 경우
  • 일대다 대응 관계: 하나의 레코드가 다른 테이블의 여러 레코드와 대응될 수 있는 경우
  • 다대다 대응 관계: 한 테이블의 여러 레코드가 다른 테이블의 여러 레코드와 대응되는 경우

4) 무결성 제약 조건

  • 데이터베이스에 저장된 데이터의 일관성과 유효성을 유지하기 위해 지켜야 하는 조건

(1) 도메인 제약 조건

  • 테이블이 가질 수 있는 필드 타입과 범위에 대한 규칙
  • 각각의 필드 데이터는 원자 값을 가져야 함
  • 지정된 필드 타입을 준수해야 함
  • 값의 범위나 기본값이 지정되었을 경우 이를 따라야 함

(2) 키 제약 조건

  • 레코드를 고유하게 식별할 수 있는 키
  • 지정된 필드에 중복된 값이 존재해서는 안된다는 제약 조건

(3) 엔티티 무결성 제약 조건

  • 기본 키로 지정한 필드는 고유한 값이어야 하며 NULL이 되어서는 안된다는 규칙
  • 기본 키 제약 조건이라고도 부름

(4) 참조 무결성 제약 조건

  • 외래 키를 통해 다른 테이블을 참조할 때 데이터의 일관성을 지키기 위한 제약 조건
  • 외래 키는 참조하는 테이블의 기본 키와 같은 값일 갖거나 NULL값을 가져야 한다는 규칙
  • 외래 키 제약 조건이라고도 부름

3. SQL

1) DDL: 데이터 정의 언어

(1) CREATE

  • 데이터베이스, 테이블, 뷰, 인덱스, 그 외 사용자까지 데이터베이스에서 관리할 수 있는 다양한 대상을 정의함

(2) ALTER

  • CREATE TABLE문을 통해 생성된 테이블에 새로운 필드 추가/수정/삭제할 수 있고 제약 조건 또한 새롭게 추가/수정/삭제가 가능함

(3) DROP

  • 테이블이나 데이터베이스를 삭제할 수 있음

(4) TRUNCATE

  • 테이블의 구조를 유지한 채로 테이블의 모든 레코드를 삭제
  • 테이블 자체를 삭제하지는 않음

2) DML: 데이터 조작 언어

  • 실행 순서: FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

(1) INSERT

  • 테이블에 새로운 레코드를 삽입하기 위해 사용
  • 레코드 삽입 시 무결성 제약 조건을 어기지 않도록 주의

(2) UPDATE/DELETE

  • 레코드를 수정/삭제하는 명령어

(3) SELECT

  • 삽입된 레코드를 조회하는 명령
  • 테이블 내 레코드를 정렬하거나 필터링해 조회하는 것도 가능

(4) GROUP BY

  • 특정 필드를 기준으로 필드를 그룹화하기 우해 사용됨

(5) HAVING

  • 그룹화된 레코드에 대한 조건식
  • WHERE은 그룹화되기 전 레코드에 대한 조건식

(6) ORDER BY

  • 특정 필드를 기준으로 데이터를 정렬
  • 오름차순, 내림차순 정렬 가능

(7) LIMIT

  • 조회할 레코드의 수를 제한하기 위해 사용

3) TCL: 트랙잭션 제어 언어

(1) COMMIT

  • 데이터베이스에 작업 반영

(2) ROLLBACK

  • 작업 이전의 상태로 되돌림

(3) SAVEPOINT

  • 롤백의 기준점 설정

4) DCL: 데이터 제어 언어

(1) GRANT

  • 사용자에게 권한 부여

(2) REVOKE

  • 사용자로부터 권한 회수

4. 효율적 쿼리

1) 서브 쿼리와 조인

(1) 서브 쿼리

  • 내부에 다른 SQL문이 포함된 SQL문
  • 다른 SQL문 안에 있는 SELECT문

(2) 조인

  • 2개의 테이블을 하나로 합치는 것
  • INNER JOIN: A와 B의 교집합
  • LEFT OUTER JOIN: A집합, 해당되지 않는 B집합은 NULL 표시
  • RIGHT OUTER JOIN: B집합, 해당되지 않은 A집합은 NULL 표시
  • FULL OUTER JOIN: A와 B의 합집합

(3) 뷰

  • SELECT문의 결과로 만들어진 가상의 테이블
  • SELECT문의 결과를 뷰로 생성한 뒤 해당 뷰에 다양한 SQL문 실행 가능
  • 테이블에 대한 SQL문을 단순화하기 위해 사용

(4) 인덱스

  • 검색 속도 향상을 목적으로 만드는 하나 이상의 테이블 필드에 대한 자료구조
  • RDBMS의 성능을 향상시키는 가장 대중적인 방법
  • 수많은 레코드를 조회하는 작업이 많아 대부분 활용됨
  • SELECT 성능 향상은 가능하나 INSERT, UPDATE, DELETE에 대해서는 성능 향상을 가져오지 않거나 되려 성능을 떨어뜨림
  • 데이터가 충분히 많은 데이블, 조회가 빈번히 이루어지는 테이블 필드에 효과적임
  • 테이블 당 3개 이하의 인덱스가 적정한 인덱스 개수
  • 클러스터형 인덱스
    • 테이블당 하나씩 만들 수 있는 인덱스
    • 기본 키
    • 기본 키로 지정된 필드는 기본적으로 클러스터형 인덱스로 간주됨
    • 기본 키로 지정된 필드가 없는 경우 NOT NULL 제약조건, UNIQUE 제약 조건이 있는 필드도 클러스터형 인덱스로 간주
  • 세컨더리 인덱스
    • 논클러스터형 인덱스라고도 함
    • 테이블당 여러 개가 존재할 수 있지만 클러스터형 인덱스보다 느림

0개의 댓글