DBMS는 위 문제를 해결하기 위해 등장한 데이터를 통합하여 저장하고 관리하는 시스템이다.
별도의 파일로 관리되던 데이터를 하나로 통합하여 관리하면서 응용프로그램을 대신해서 데이터를 검색, 삽입, 수정할 수 있는 기능을 하게되었다.
응용프로그램들은 DB를 공유해서 사용할 수 있게 되었다.
스키마 : 데이터베이스에 저장되는 데이터 구조와 제약조건을 정의한 것
인스턴스 : 스키마에 따라 데이터베이스에 실제로 저장된 값
메타데이터 : 데이터에 대한 데이터
데이터 정의어 DDL
스키마를 정의하거나 수정, 삭제하기 위해 사용 (CREATE, ALTER, DROP)
데이터 조작어 DML
데이터 CRUD를 요구하기 위해 사용(SELECT, INSERT, UPDATE, DELETE)
데이터제어어 DCL
DBA가 관리를 목적으로 사용
개체와 개체간의 관계를 이용해서 현실 세계를 개념적 구조로 표현
이것을 다이어그램 그림으로 그린것이 ERD이다.
개체 = entity
저장할 가치가 있어야 하며 다른 개체와 구별되는 이름과 고유한 특성을 가지고 있어야 한다.
하나의 테이블과 대응됨
속성 = attribute
개체나 관계가 가지고 있는 고유의 특성
의미있는 데이터의 가장 작은 논리적 단위
테이블의 한 컬럼과 대응됨
인스턴스 = instance
개체를 구성하고 있는 속성이 실제 값을 가짐으로써 실체화된 개체
테이블에서 하나 이상의 행과 대응
관계데이터 모델은 개념적 구조를 논리적 구조로 표현하는 논리적 데이터 모델이다.
개체에 관한 데이터를 2차원 테이블의 구조로 저장한것, 즉 테이블을 말하는 것이다.
릴레이션에서 튜플들을 구별하는 하나 또는 그 이상의 속성
키 특성
키 종류
이상현상이란 불필요한 데이터 중복으로 인해 연산 수행시 발생하는 부작용을 의미한다.
이상현상이 발생하지 않는 바람직한 릴레이션으로 만들어가는 과정
정규화를 통해 릴레이션은 무손실 분해 되어야 하며 조인했을 때 분해전의 릴레이션으로 복원이 가능해야 한다.
데이터베이스의 검색 기능 성능을 높여주는 기술이다. 전체를 조회할 때는 O(N)의 시간이 들지만 인덱스를 사용하면 O(logN)으로 시간복잡도가 감소한다.
다음과 같은 경우에 사용하면 좋다.
원하는 데이터를 찾기 위해 테이블을 검색하는 작업을 줄이거나 없앨 수 있으며 검색 속도를 향상시킨다.
테이블 새로운 데이터를 추가하거나 갱신, 삭제가 자주 일어나면 인덱스에도 추가, 갱신이 일어나기 때문에 오버헤드가 발생할 수 있다.
데이터베이스의 상태를 변화시키는 하나의 작업 단위를 일컫는다. 따라서 그 안에는 여러개의 연산이 수행될 수 있으며 한 연산이라도 실패하면 그 트랜잭션은 전체가 실패한 것이 된다.
트랜잭션의 중요성은 금융소프트웨어를 예로들면 이해하기 쉽다.
100만원을 송금하는 작업은 내 계좌에서 100만원을 출금해서 상대방 계좌에 100만원을 입금하는 작업이다.
이때 출금까지는 정상작동했는데 입금에서 오류가 발생해버리면 출금한 돈은 증발하게 된다.
따라서 두 작업을 트랜잭션으로 묶어서 둘 중 하나라도 실패하면 모두 실패한 작업으로 처리해줘야 돈이 증발하는 일이 발생하지 않을 것이다.
트랜잭션을 하기 위해선 데이터베이스의 무결성과 일관성을 보장하기 위해 ACID라는 4가지 특성을 만족해야 한다.
Atomic : 원자성으로 트랜잭션을 구성하는 연산들은 한꺼번에 반영되거나 한꺼번에 반영되지 않아야 함, 즉 수행과정 중 오류가 발생하면 트랜잭션 시작 전 상태로 되돌려야 한다.
Consistency : 일관성으로 트랜잭션 성공 후 데이터베이스가 일관성있는 상태를 유지하는 것. 즉 데이터베이스의 제약 조건을 위배하는 작업을 트랜잭션이 수행할 수 없게 하는 것이다.
Isolation : 격리성으로 여러개의 트랜잭션이 동시에 실행중일때 서로의 연산에 끼어들수 없게 해야하는 것이다. 예를 들어 B의 계좌에 100만원을 넣고 있는 상태에 또 다른 누군가가 B의 계좌에 입금을 하는 작업을 할 수 없다는 것이다.
Durability : 지속성으로 트랜잭션 성공 후 데이터베이스에 반영한 결과는 손실되지 않게 유지해야 하는 것을 말한다.
Isolation을 구현하는 개념으로 트랜잭션끼리 격리되어야 하는 정도를 나타낸다.
다음과같이 4단계로 나뉜다. 커밋은 트랜잭션이 성공적으로 완료된 상태를 의미한다.
아래로 내려갈 수록 고립 정도가 높고 성능은 떨어진다.
mysql의 기본 격리수준은 REPEATABLE READ이다.
여러 테이블을 하나의 테이블처럼 논리적으로 연결하여 사용하는 방법이다.
inner join은 두 테이블을 교집합으로 join하는 개념이며 outter join은 합집합으로 join하는 개념이다.
블로그의 개별 게시물에 따로 정리를 해두었다.