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 |