데이터베이스란?
데이터를 효율적으로 저장, 관리, 검색, 수정, 삭제할 수 있는 체계적이고 구조화된 시스템이다.
일반적으로 컴퓨터 시스템에서 데이터베이스는 여러 데이터를 구조화된 형태로 저장하고, 이를 쉽게 접근할 수 있게 해주는 소프트웨어 시스템을 말한다.
파일 시스템이 아닌 데이터베이스를 사용하는 이유
1. 불필요한 데이터와 자주 변하는 데이터의 존재
- 파일 시스템을 사용한다면 각각의 파일이 필요한 정보를 모두 가지고 있어야 한다 (Redundant Data)
- 수정해야하는 파일이 많아지면 일관성이 깨질 수 있다 (Inconsistency)
2. 데이터 접근의 어려움
- 파일 시스템을 사용하는 프로그램은 파일 구조와 경로가 변경될 때마다 코드의 잦은 수정이 필요할 수 있다
3. 데이터 분리
- 파일 시스템을 사용한다면 파일의 Location이 여러 군데 일 수 있다. 이는 프로그램 유지보수 측면에서 좋지 못하다
4. 데이터의 제약 조건
- 파일 시스템을 사용한다면 데이터 제약조건을 프로그램 코드를 통해 검사해야 하며, 매우 복잡하다
- 데이터베이스 엔진을 사용하면 제약조건을 몇개의 명령으로 쉽게 설정할 수 있다
5. 원자성(Atomicity) 보장 문제
- 원자성 보장의 조건 : 일련의 명령을 완전히 수행하거나, 전혀 수행하지 않은 상태를 보장
- 파일 시스템은 System Crash 등으로 작업이 중단되면 일관성이 깨질 수 있다 (Inconsistency)
- 데이터베이스 엔진의 트랜잭션(Transaction) 기능을 사용하면 원자성 보장이 가능하다
6. 동시성 접근에 대한 문제
- 동시에 여러개의 스레드가 접근하면 표시되는 정보에 오차가 발생하여 결과에 오류가 발생할 수 있다
- 데이터베이스 엔진은 락과 트랜잭션을 통해 올바른 동시성 지원이 된다.
7. 보안에 관한 문제
- 데이터베이스 엔진은 각 사용자마다 테이블에 대한 권한을 부여할 수 있다.
데이터베이스 테이블의 구성요소
테이블은, 데이터를 구조화하여 저장하는 기본 단위이다. 테이블은 행(Row)과 열(Column)로 구성된다.
1. 열(Column):
- 속성(Attribute) 또는 필드(Field)라고도 함.
- 각 열은 특정한 데이터 타입(예: INTEGER, VARCHAR, DATE 등)을 가지며, 테이블에서 저장되는 데이터의 속성을 나타냄.
2. 행(Row):
- 레코드(Record) 또는 튜플(Tuple)이라고도 함.
- 하나의 행은 테이블에 저장된 데이터의 한 개체를 나타냄.
열과 행의 기본적인 데이터에 기본 키 (Primary Key), 외래 키(Foreign Key), 제약조건 (Constraints) 등의 옵션을 설정하여 개발자가 필요한 대로 테이블을 설계할 수 있다.
데이터베이스 스키마란?
스키마란 데이터베이스의 청사진과 같이, 데이터베이스에 저장될 정보들의 논리적(Logical) 구성을 나타낸다.
올바른 데이터베이스 스키마 설계가 중요한 이유는 다음과 같다.
- 데이터 무결성 보장
- 데이터베이스의 관리 및 확장의 용이성
- 효율적인 데이터 검색 및 업데이트를 가능하게 함
스키마는 다음으로 구성된다.
1. 테이블 (Tables)
- 데이터베이스에 데이터를 저장하는 기본 단위
- 테이블 구조에는 칼럼의 이름, 데이터 타입, 제약조건이 포함된다
2. 속성 (Attributes)
- 테이블의 열을 나타내며 데이터의 특정 속성을 저장
3. 제약조건 (Constraints)
- 데이터의 무결성을 보장하는 규칙
- NOT NULL, PRIMARY KEY, FOREIGN KEY, CHECK, UNIQUE
4. 관계 (Relationships)
- 테이블간의 연결을 정의
5. 뷰 (Views)
- 하나 이상의 테이블에서 만들어진 가상의 테이블로 데이터를 쿼리 한 결과를 저장
- 물리적 데이터가 저장되지는 않는다
6. 인덱스 (Indexes)
- 테이블에서 데이터를 더 빠르게 검색할 수 있게 돕는 구조
출처:
- 건국대학교 데이터베이스 강의 (김욱희 교수님, 2024)