- 여러 사람들이 공유하고 사용할 목적으로 통합 관리되는 데이터들의 모임
- 데이터를 모아둔 창고!
- 다수의 사용자들이 데이터베이스 내의 데이터를 접근할 수 있도록 해주는 소프트웨어
- DBMS를 사용하기 전에는 파일 시스템을 사용하여 데이터를 관리
- 데이터를 저장한 파일을 응용 프로그램의 저장 장치(하드 디스크)에 저장 -> 데이터와 응용 프로그램이 의존적
- 응용 프로그램마다 데이터를 따로 관리 ex) 쇼핑몰의 경우 주문관리 프로그램과 고객 관리 프로그램이 각각 따로 데이터를 관리
- 데이터 종속성, 중복성 등 문제 발생 -> DBMS는 이를 해결해줌
- 독립성 : 응용 프로그램과 데이터가 서로 독립적 -> 하나를 수정해도 나머지에 영향을 주지않음
- 무결성 : 데이터 유효성 검사를 통해 잘못된 데이터(조건에 맞지 않는 데이터)가 저장되지 않음
- 보안성 : 접근 허용된 사용자만 데이터베이스에 접근할 수 있음
- 일관성 : 중복 데이터 중 일부만 변경되어도 모두 반영됨
- 중복 최소화 : 데이터를 통합해서 관리하기 때문에 같은 데이터를 중복 저장하지 않음
- 파일 시스템에는 이러한 기능을 제공하지 않음
- DBMS는 데이터를 블록 단위로 하드 디스크에 저장
- 사용자가 원하는 데이터를 포함한 블록을 하드 디스크에서 메인 메모리로 읽어옴 (디스크 I/O작업) -> 오래 걸림!
- 많은 블록 + 자주 참조되는 블록은 메인 메모리에 저장하여 디스크 I/O를 줄이는 것이 DBMS의 성능을 결정
- 하나의 릴레이션은 하나의 파일에 저장
- 하나의 파일은 여러 개의 레코드들의 집합으로 나뉘고 각 집합은 하나의 블록에 저장됨 (블록 = 한 개 이상의 섹터)
- 블록들은 물리적으로 인접하게 저장되지 않음 + 다음 블록을 가리키는 포인터를 저장
- 파일 내 클러스터링 (intra-file clustering)
- 하나의 파일 내에서 함께 검색될 가능성이 높은 레코드들을 디스크 상에서 물리적으로 가까운 곳에 저장
- 파일 간 클러스터링 (inter-file clustering)
- 논리적으로 연관되어 함께 검색될 가능성이 높은 두 개 이상의 파일에 속한 레코드들을 디스크 상에서 물리적으로 가까운 곳에 저장
- heap file
- 레코드들이 삽입된 순서로 파일에 저장 (그냥 쌓아둠) / 가장 단순한 파일 조직
- 모든 레코드들을 참조하고 레코드 접근 순서는 중요하지 않을때 효율적
- 특정 레코드를 검색하는 경우 모든 레코드를 순차적으로 접근하기 때문에 비효율적
- sequential file
- 레코드들이 하나 이상의 필드(search key) 값에 따라 순서대로 저장된 파일
- 삽입시 레코드의 순서를 고려해야 하기 때문에 시간이 많이 걸림
- where절에 search key 조건이 있다면 효율적인 검색 가능
- 데이터베이스에 들어있는 데이터의 정확성과 일관성을 유지하고 보장하기 위한 조건
- null 무결성 : 특정 속성값에 null이 올수 없다는 조건이 주어진 경우 그 속성은 null이 될 수 없음
- 개체 무결성 : 릴레이션에서 primary key를 구성하는 속성은 null이나 중복값을 가질 수 없음
- 참조 무결성 : 릴레이션은 참조할 수 없는 외래키를 가질 수 없음
- 도메인 무결성 : 각 속성의 타입, null 허용 등을 정의하고 올바른 데이터 타입이 입력되었는지 확인
- 키 무결성 : 한 릴레이션에는 최소한 하나의 키가 존재해야함
- 데이터베이스에서 조건에 맞는 레코드를 찾거나 검색 시 기준이 되는 속성 (attribute 집합)
- super key : 테이블의 레코드를 유일하게 식별할 수 있는 키 (유일성)
- candidate key : super key 중에서 유일하게 식별하는데 꼭 필요한 속성으로만 구성된 키 (유일성과 최소성)
- primary key : candidate key 중에서 선택된 키
- alternate key : candidate key 중에서 primary key를 제외한 나머지 키
- foreign key : 다른 테이블의 레코드를 유일하게 식별할 수 있는 키 / 참조하는 테이블의 primary key
- 테이블을 기반으로 만들어진 가상의 테이블
- 실제로 데이터를 저장하지 않고 논리적으로만 존재
- 유저는 하나의 실제 테이블로부터 가상의 논리적 테이블(view)를 생성하여 조작 가능
- 왜 사용할까?
- 논리적 데이터 독립성을 구현할 수 있음
- 논리적 데이터 독립성 : 응용 프로그램들이 서로 영향을 주지 않고 원하는 논리적 구조를 제공
- 물리적 데이터 독립성 : 응용 프로그램들이 서로 영향을 주지 않고 데이터의 물리적 구조를 변경