-
1주차 Database Study
데이터베이스
데이터를 체계적으로 저장하고 관리하는 시스템
데이터베이스의 특징
- 중복 최소화 : 데이터의 중복을 최소화하여 저장
- 데이터 일관성 : 불일치성을 방지
- 데이터 보안 : 접근 제어, 인증, 암호화 등의 방법을 이용하여 보안을 유지
- 데이터 독립성 : 데이터의 표현 방법이나 저장 위치가 변하더라도 응용 프로그램에 영향 X
파일시스템과 데이터베이스
- 중복된 내용이 있을 수 있음
- 파일시스템은 데이터 처리 및 검색이 어려움
- 파일의 관계를 지정할 수 없음
DBMS
데이터베이스를 운영하고 관리하는 소프트웨어를 의미
ex) MySQL, Oracle, SQL Server
DBMS의 특징
- 데이터 조작 : 데이터를 조회하고 수정/삭제 가능
- 동시성 제어 : 여러 사용자가 동시에 데이터베이스에 접근 가능
- 보안 : 인가된 사용자만 데이터에 접근 가능
스키마
데이터베이스의 구조를 정의하는 메타데이터
ex) 테이블 메타데이터, 테이블 간의 관계/제약조건
3단계 데이터베이스 구조
- 외부 스키마 : 데이터 구조를 사용자 입장에서 추상화(사용자) → 사용자가 데이터를 어떻게 볼지
- 개념 스키마 : 데이터의 논리적 구조와 제약조건을 정의(조직) → 데이터가 어떻게 구성되어 있는지에 대한 정보
- 내부 스키마 : 데이터의 물리적 구조와 제약 조건을 정의(저장 장치) → 디스크에 어떻게 저장되는지에 대한 정보
외부 스키마에 대해서 추가설명을 하자면 각 사용자는 권한에 따라서 제한된 데이터를 조회 가능
ex) 사용자 A는 Z 테이블만을 조회할 수 있고 사용자 B는 X 테이블만을 조회할 수 있음
데이터 독립성
- 3단계 데이터베이스 구조로 데이터베이스를 구성했을 때의 장점
- 하위 단계의 스키마가 변경되어도 상위 단계의 스키마가 영향을 받지 않는 특성
데이터 독립성의 종류
ꤶ 논리적 데이터 독립성
개념 스키마가 변경되어도 외부 스키마는 영향 X
ex) 컬럼을 새로 추가해도 기존 SQL을 변경하지 않아도 정상 동작
ꤶ 물리적 데이터 독립성
내부 스키마가 변경되어도 개념 스키마는 영향 X
ex) 저장장치를 하드디스크에서 SSD로 변경해도 인덱스 저장방식은 변경 X
RDBMS
- 관계형 데이터를 저장하는 DBMS
- 관계형 데이터는 테이블이라는 최소 단위로 구성되고 행과 하나 이상의 열로 구성
릴레이션
관계형 데이터베이스의 정보를 구분하여 저장하는 기본적인 구조
- 릴레이션 스키마 : 릴레이션의 구조를 정의, 릴레이션 내 속성과 데이터 타입을 정의
- 릴레이션 인스턴스 : 여러 개의 튜플로 구성
- 튜플 : 릴레이션의 행
- 속성 : 릴레이션의 열
- 차수 : 릴레이션의 속성의 개수, 최소 1개 이상 존재해야 함
- 카니덜리티 : 릴레이션의 튜플의 개수, 최소 0개 이상
- 도메인 : 각 속성의 데이터 타입 ex) EMPNO int
ex) EMPLOYEE(EMPNO, EMPNAME, TITLE, DNO, SALARY)
릴레이션 != 테이블
전공수업에서는 릴레이션과 테이블이 (거의) 같다고 생각하고 공부했던 것 같은데
몇몇 블로그에서는 엄밀하게 말하면 다른 것이라고 쓰여있긴 함
테이블은 릴레이션의 실제 구현키
튜플을 고유하게 식별하는 데 사용되는 속성 혹은 속성 집합 → 여러 개가 키가 될 수도 있음
- 슈퍼키 : 테이블 내 모든 튜플을 고유하게 식별할 수 있는 속성 집합
- 후보키 : 슈퍼키 중 최소성을 만족하는 속성 집합 → 슈퍼키 중 개수가 가장 적은 집합
- 기본키 : 후보키 중에서 하나를 선택, 중복된 값이나 NULL X
- 대체키 : 기본키가 아닌 후보키 중 하나
- 외래키 : 한 테이블에서 다른 테이블의 기본키를 참조하는 속성
무결성 제약조건
데이터베이스에서 데이터의 정확성, 일관성을 보장하기 위한 규칙
도메인 무결성
각 속성에 입력될 수 있는 값의 범위나 유형을 제약
ex) VARCHAR(20), CHECK
개체 무결성
테이블의 기본키는 고유하게 식별되고 NULL값을 가질 수 없음
참조 무결성
외래키가 다른 테이블의 기본키나 후보키를 참조할 때 값이 존재해야 함
ex) 외래키가 4를 참조하는데 실제로 그 테이블에 4가 없으면 안 됨
MySQL 엔진
MySQL은 크게 MySQL 엔진과 스토리지 엔진으로 구분됨
- MYSQL 엔진 : 클라이언트의 접속과 쿼리 요청을 전달
- 스토리지 엔진 : 실제로 데이터를 읽고 저장하는 방식을 정의
스토리지 엔진의 종류로는 InnoDB, MyISAM, Memory, CSV가 있다.
MyISAM
- 5.5이전 MySQL엔진
- 트랜잭션 제공 X
- InnoDB보다 전체적인 성능은 좋음
- Table Level Lock
InnoDB
- 5.5이후 MySQL엔진
- 트랜잭션 제공
- MyISAM보다 성능은 낮지만 안정성 보장
- Row Level Lock