3. 데이터베이스

2024. 10. 29. 21:27·Cs

1️⃣ 데이터베이스의 구성요소

    (1) 개체(엔터티): 데이터로 표현하려는 대상. 하나 이상의 속성으로 구성됨

    (2) 속성: 개체의 특성과 상태를 나타냄. 데이터베이스를 구성하는 가장 작은 논리적 단위

    (3) 관계: 개체 간에 어떤 관련이 있는지 나타냄

- 스키마: 데이터의 구조와 표현 방식, 제약 조건을 정의

    (1) 내부 스키마: 사용자 측면에서 데이터베이스의 전체 구조

    (2) 개념 스키마: 데이터베이스의 전체 구조

    (3) 외부 스키마: 물리적 저장장치 측면에서 데이터베이스의 전체 구조

2️⃣ 관계형 데이터베이스(RDB)

- 데이터가 2차원 테이블에 저장되며 데이터의 구조와 데이터 간 종속성 등을 알 수 있음

- 스키마(ERD, 개체-관계 다이어그램)를 바탕으로 데이터베이스의 구조를 정의

- 릴레이션: 관계형 데이터베이스에서 데이터의 개념적 모델

- 테이블: 릴레이션을 실제로 구현한 개체. 키와 값으로 이루어진 2차원 형태. 행(=튜플, 레코드)은 데이터 묶음, 열(=필드)은 이름과 타입을 가진 데이터의 속성

- 키: 데이터베이스에서 튜플을 구분하기 위한 속성 or 속성의 집합. 유일성, 최소성이라는 특징을 가짐

    (1) 유일성: 하나의 키 값으로 튜플을 식별

    (2) 최소성: 튜플을 식별하는 데 필요한 속성만으로 구성

- DBMS의 키 종류

    (1) 슈퍼 키: 유일성 O, 최소성 O or X

    (2) 후보 키: 유일성 O, 최소성 O

    (3) 기본 키: 후보 키 중에서 메인이 되는 키. NULL 값 X

    (4) 대체 키: 후보 키 중 기본 키를 제외한 키

    (5) 외래 키: 다른 테이블의 기본 키를 참조하는 키

- 무결성: 데이터베이스에 저장된 데이터와 실제 데이터가 일치하는 정확성과, 데이터가 일정하게 유지되는 일관성을 의미. DBMS는 데이터의 무결성을 유지하는 기능.

    (1) 개체 무결성: 모든 테이블이 NULL값이 아니며 고유한 기본 키를 가져야함!

    (2) 도메인 무결성: 데이터의 속성 값은 도메인에 속해야함!

    (3) 참조 무결성: 외래 키의 값은 참조하는 테이블의 기본 키 값과 동일 or NULL

3️⃣ 인덱스

: 데이터베이스에서 튜플의 검색 성능을 높이기 위해 속성 값과 튜플이 저장된 주소를 저장하는 것

👍장점: 인덱스 테이블에 데이터가 정렬되어 있어 검색 속도가 빠름

👎단점: 인덱스 테이블을 저장하기 위한 추가 공간 필요 + 데이터 추가, 수정, 삭제시 속도가 느림(재정렬 처리비용)

-> 데이터 양이 방대하며 변경이 적고 검색을 자주하는 경우에 유리함!

- 해시 테이블 인덱스: 속성 값으로 해시 값을 계산해 인덱싱하는 방법 -> 검색하려는 값 온전히 입력해야만 사용가능 -> 검색 속도가 빠르지만 자주 사용하지 않음

- B(Balanced) +- 트리 인덱스: B+ 트리는 단말 노드에만 데이터를 저장하고 단말 노드 간에는 연결 리스트로 연결되는 방식 / B- 트리는 모든 노드에 데이터가 저장되는 방식 -> 데이터 CRUD 작업 비용 줄일 수 있음 + 속성 범위로 검색 가능

4️⃣ ORM(Object-Relational Mapping)

: 객체와 관계형 데이터베이스를 매핑하는 도구

- 데이터베이스를 프로그래밍 언어의 객체 관점으로 바라볼 수 있어서 객체 지향 프로그래밍 언어를 이용해 프로그램을 개발할 때 편리함

- SQL 문을 사용하지 않고 객체 지향적 코드 작성 가능 -> 코드 가독성 ↑ 개발자 편의성 ↑ but 복잡한 프로젝트는 어려움

ex) 자바의 하이버네이트, 파이썬의 장고, 루비의 액티브 레코드

5️⃣ NoSQL(Not only SQL) 데이터베이스

- 비관계형 데이터베이스로, 유연한 형태의 데이터베이스를 의미

- 대용량 데이터 조회시 속도 면에서 유리함

- 수평적 확장성이 좋아 서버를 추가해 데이터베이스를 확장하기도 쉬움

6️⃣ 트랜잭션

- 데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위 또는 일련의 연산

- 트랜잭션의 특징(ACID)(4)

    (1) 원자성(Atomicity): 트랜잭션이 데이터베이스에 완전히 반영되거나 아예 실행되지 않아야함

    (2) 일관성(Consistency): 트랜잭션 수행이 완료된 데이터베이스는 일관성이 있음

    (3) 독립성(Isolation): 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없음

    (4) 영속성(Durability): 완료한 트랜잭션의 결과가 데이터베이스에 영구적으로 반영됨

- TCL(Transaction Control Language)

: 트랜잭션을 제어하기 위해 사용하는 명령어

    (1) COMMIT: 트랜잭션 정상 종료 -> 데이터베이스에 변경 사항 반영

    (2) ROLLBACK: 트랜잭션 비정상 종료 -> 수행한 변경 사항 취소 후 이전 상태로 되돌림

    (3) SAVEPOINT: 트랜잭션에서 특정 지점을 지정(ROLLBACK되는 지점 지정 가능)

- 락(lock): 트랜잭션이 처리되는 순서를 보장하기 위한 방법

    (1) 공유 락(=읽기 락): 데이터를 읽는 락. 데이터의 일관성이 영향X -> 여러 공유 락 동시접근 가능

    (2) 베타 락(=쓰기 락): 데이터를 수정하는 락. 데이터의 일관성 유지를 위해 한번에 하나의 베타락만 접근 가능

- 트랜잭션의 교착 상태(deadlock): 한 트랜잭션이 자신이 처리 중인 데이터에 대해 락을 가진 상태에서 다른 트랜잭션이 처리 중인 데이터에 대해 락을 요청해 무한 대기 상태에 빠짐 (락을 가지고 있는 트랜잭션이 다른 데이터의 락 추가 요청시 발생)

    -> 해결 방법 (1) 예방 기법(트랜잭션 처리가 시작되기 전에 필요한 데이터에 대해 미리 락을 얻음)

                         (2) 회피 기법(트랜잭션이 들어온 순서에 따라 교착 상태 회피)

                                a. wait-die: 데이터에 락을 요청하려는 트랜잭션이 이미 락을 갖고 있는 트랜잭션보다 오래되었으면                                                      얻을 때까지 기다림 (아니면 락 획득 포기)

                                b. wound-wait: 데이터에 락을 요청하려는 트랜잭션이 이미 락을 갖고 있는 트랜잭션보다 오래되었                                                              으면 락을 빼앗음 (아니면 기다림)

- 이상(anomaly): 트랜잭션을 처리하는 중에 속성 간 종속이나 데이터 중복으로 발생하는 문제

    (1) 삽입 이상: 데이터 삽입 시 의도치 않은 다른 데이터도 삽입됨

    (2) 갱신 이상: 데이터 갱신 시 일부 튜플만 갱신되어 데이터 모순 발생

    (3) 삭제 이상: 데이터 삭제 시 의도하지 않은 데이터도 삭제됨

7️⃣ 정규화(normalization)

: 데이터베이스의 이상 현상을 해결하기 위해 테이블을 분해하는 것(+정규형: 정규화한 결과) 

    (1) 제1정규형: 테이블의 모든 속성 값이 더이상 분해될 수 없는 값(원자값)으로 구성되어야함

    (2) 제2정규형: 제1정규형 테이블에서 부분적 함수 종속 제거 -> 완전 함수 종속 만족해야함! (기본 키의 진부분집합이 결정자가 될 수 없도록 테이블 분해)

    (3) 제3정규형: 제2정규형 테이블에서 이행적 종속 제거

    (4) 보이스-코드 정규형(BCNF): 제3정규형 테이블의 모든 결정자가 후보 키가 되도록 테이블 분해

    (5) 제4정규형: 제3정규형 테이블에서 다치 종속(한 속성이 여러 속성의 값을 결정) 제거

    (6) 제5정규형: 제4정규형 테이블에서 조인 종속 제거(테이블을 분해했다 조인할 때 테이블이 복원됨)

    + 역정규화: 정규화 수행 시 데이터를 얻기 위해 조인 연산을 여러 번 수행 -> 성능저하 -> 중복 허용

8️⃣조인

: 여러 테이블을 합쳐 원하는 데이터를 얻는 작업

- 조인 연산자

    (1) ON: 조인 연산에 대한 조건절을 작성할 때 사용

    (2) USING: 속성명이 동일할 때 공통되는 속성명만 작성해 간단하게 조건 작성 가능

    (3) WHERE: 원하는 데이터를 조회하기 위한 조건절 작성 시 사용

    (4) IN: 하나라도 해당하는 값을 검색 가능

    (5) BETWEEN: 특정 범위에 속하는 데이터 조회 시 사용

    (6) LIKE: %, _과 함께 특정 데이터를 조회할 때 사용

- 내부 조인(INNER JOIN): 2개 이상의 테이블에서 공통 속성을 가진 데이터 검색

- 외부 조인(OUTER JOIN): 조인 조건에 해당하는 속성 값이 없는 데이터까지 모두 조회. 존재하지 않는 데이터는 NULL

    ex) 왼쪽 외부 조인, 오른쪽 외부 조인, 완전 외부 조인

- 교차 조인(CROSS JOIN): 각 테이블의 행과 다른 테이블의 모든 행을 결합

- 셀프 조인(SELF JOIN): 한 테이블이 자기 자신과 조인 연산 수행 -> 별칭 사용해 테이블 구분

 

 

저작자표시 (새창열림)

'Cs' 카테고리의 다른 글

5. 알고리즘  (0) 2024.11.02
4. 자료구조  (0) 2024.10.30
2. 컴퓨터 네트워크  (0) 2024.10.26
1. 운영체제 (3)  (0) 2024.10.26
1. 운영체제(2)  (0) 2024.10.23
'Cs' 카테고리의 다른 글
  • 5. 알고리즘
  • 4. 자료구조
  • 2. 컴퓨터 네트워크
  • 1. 운영체제 (3)
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (381)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (1)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    항해99
    Til
    99클럽
    코딩테스트준비
    개발자취업
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
3. 데이터베이스
상단으로

티스토리툴바