본문 바로가기
공부/데이터 베이스

데이터베이스 - 개념 총정리

by xladmt 2025. 4. 15.

1. 데이터베이스란?

1-1. DataBase vs DBMS vs DB System

  •  Database(DB) : 관련있는 데이터들의 조직화된 집합
  •  DBMS(DataBase Management Systems) : DB에 저장된 데이터가 일관되고 무결한 상태로 유지되도록 관리하는 시스템
    •  사용자에게 DB를 정의하고 만들고 관리하는 기능을 제공하는 소프트웨어 시스템 
    •  ex) Postgre SQL, MySQL, Oracle, ...
  •  DB System : DB와 DBMS를 이용해 조직에 필요한 정보를 제공해주는 전체 시스템
    •  Database + DBMS + 연관된 applications

 

1-2. 데이터베이스 특징

  1. 실시간 접근성(Real-Time Accessibility) : 비정형적인 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야 한다.
  2. 지속적인 변화(Continuous Evloution) : 데이터베이스의 상태는 동적이다. 즉, 새로운 데이터의 삽입(Insert), 삭제(Delete),  갱신(Update)으로 항상 최신의 데이터를 유지해야 한다.
  3. 동시 공용(Concurrent Sharing) : 데이터베이스는 서로 다른 목적을 가진 여러 응용자들을 위한 것이므로 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 한다.
  4. 내용에 의한 참조(Content Reference) : 데이터베이스에 있는 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾는다.

 


2. 데이터 언어

데이터 언어는 사용자가 데이터베이스를 구축하고 이에 접근하기 위해 데이터베이스 관리 시스템과 통신하는 수단이다. 데이터 언어는 사용 목적에 따라 데이터 정의어, 데이터 조작어, 데이터 제어어로 나눈다.

 

명령어 종류 명령어 설명
데이터 조작어
(DML : Data Manipulation Language)
SELECT 데이터베이스에 들어 있는 데이터를 조회하거나 검색하기 위한 명령어를 말하는 것으로 RETRIEVE 라고도 함
INSERT
UPDATE
DELETE
데이터베이스의 테이블에 들어 있는 데이터에 변형을 가하는 종류(데이터 삽입, 수정, 삭제)의 명령어
데이터 정의어
(DDL : Data Definition Language)
CREATE
ALTER
DROP
RENAME
TRUNCATE
테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들로 생성, 변경, 삭제, 이름 변경과 같은 데이터 구조의 명령어
데이터 제어어
(DCL : Data Control Language)
GRANT
REVOKE
데이터베이스에 접근하고 객체들을 사용하도록 권한을 주고 회수하는 명령어
트랜잭션 제어어
(TCL : Transaction Control Language)
COMMIT
ROLLBACK
SAVEPOINT
논리적인 작업의 단위를 묶어서 DML에 의해 조작된 결과를 작업 단위(트랜잭션) 별로 제어하는 명령어

 

* Select 쿼리의 수행 순서

FROM, ON, JOIN > WHERE, GROUP BY, HAVING > SELECT > DISTINCT > ORDER BY > LIMIT


3. 데이터 모델

  •  현실 세계의 정보들을 컴퓨터에 표현하기 위해서 단순화, 추상화하여 체계적으로 표현한 개념적 모형
  •  데이터, 데이터의 관계, 데이터의 의미 및 일관성, 제약조건 들을 기술하기 위한 개념적 도구들의 모임

 

3-1. 데이터 모델의 종류

  •  개념적 데이터 모델
    •  현실 세계에 존재하는 개체를 인간이 이해할 수 있는 정보 구조로 표현하기 때문에 정보 모델이라고도 한다.
    •  대표적인 개념적 데이터 모델로는 E-R 모델이 있다.
  •  논리적 데이터 모델
    •  개념적 모델링 과정에서 얻은 개념적 구조를 컴퓨터가 이해하고 처리할 수 있는 컴퓨터 세계의 환경에 맞도록 변환하는 과정이다.
    •  데이터 간의 관계를 어떻게 표현하느냐에 따라 관계 모델, 계층 모델, 네트워크 모델로 구분한다.
  •  관계 데이터 모델
    •  관계 데이터 모델은 사람들이 직관적으로 생각하기에 표 형태의 데이터를 저장하기 위한 그릇

 

3-2. 데이터 모델의 구성요소

  •  개체(Entity)
    •  데이터베이스에 표현하려는 것으로 사람이 생각하는 개념이나 정보 단위 같은 현실 세계의 대상체이다.
    •  파일 시스템의 레코드에 대응하는 것으로 어떤 정보를 제공하는 역할을 수행한다.
    •  독립적으로 존재하거나 그 자체로서도 구별 가능하다.
  •  속성(Attribute)
    •  데이터의 가장 작은 논리적 단위로서 파일 구조상의 데이터 항목 또는 데이터 필드에 해당한다.
    •  개체를 구성하는 항목이다.

교수 번호, 성명, 전공, 소속으로 구성된 교수 개체

  •  관계(Relation) 
    •  엔티티(개체) 간의 관계 또는 속성 간의 관계이다. 
      •  관계의 형태
        •  일대일 : 개체 집합 A의 각 원소가 개체 집합 B의 원소 한 개와 대응하는 관계
        •  일대다 : 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하고 이지만, 개체 집합 B의 각 원소는 개체 집합  A의 원소 한 개와 대응하는 관계
        •  다대다 : 개체 집합 A의 각 원소는 개체 집합 B의 원소 여러 개와 대응하고 개체 집합 B의 각 원소도 개체 집합 A의 원소 여러 개와 대응하는 관계

교수와 학생의 개체 간 관계


4. 스키마

데이터베이스 관리 시스템(DBMS)이 주어진 설정에 따라 데이터베이스 스키마를 생성하고, 데이터베이스 사용자가 자료를 저장, 조회, 삭제, 변경할 때 DBMS는 자신이 생성한 데이터 베이스 스키마를 참조하여 명령을 수행한다. 즉, DBMS는 스키마를 참조하여 사용자의 명령을 수행하는 것이다.

4-1 스키마 3계층

  •   외부(서브) 스키마(External Schema) = 사용자 뷰
    •  사용자나 응용프로그래머가 각 개인의 입장에서 필요로 하는 데이터베이스의 논리적 구조를 정의한 것
    •  전체 데이터베이스의 한 논리적인 부분으로 볼 수 있으므로 서브 스키마(Sub Schema)라고도 함
    •  하나의 데이터베이스 시스템에는 여러 개의 외부 스키마가 존재할 수 있으며 하나의 외부 스키마를 여러 개의 응용 프로그램이나  사용자가 공용할 수도 있음
    •  일반 사용자는 질의어(SQL)을 이용하여 DB를 쉽게 사용할 수 있음
  •  개념 스키마(Concaptual Schema) = 전체적인 뷰
    •  데이터베이스의 전체적인 논리적 구조로서, 모든 응용 프로그램이나 사용자들이 필요롤 하는 데이터를 종합한 조직 전체의 데이 터베이스로 하나만 존재
    •  개체간의 관계와 제약 조건을 나타내고 데이터베이스의 접근 권한, 보안 및 무결성 규칙에 관한 명세를 정의
    •  데이터베이스 파일에 저장되는 데이터의 형태를 나타내는 것으로, 단순위 스키마(Schema)라고 하면 개념 스키마를 의미
    •  데이터베이스 관리자(DBA)에 의해서 구성
  •  내부 스키마(Internal Schema) = 저장 스키마(Storage Schema)
    •  물리적 저장장치의 입장에서 본 데이터베이스 구조로, 물리적인 저장장치와 밀접한 계층
    •  실제로 데이터베이스에 저장될 레코드의 물리적인 구조를 정의하고, 저장 데이터 항목의 표현방법, 내부 레코드의 물리적 순서 등을 나타낸다.
    •  시스템 프로그래머나 시스템 설계자가 보는 관점의 스키마


5. 테이블(Table) 관련 용어

용어 정의
테이블 (Table == Relation) - 튜플(행)들의 집합
- 각 릴레이션은 오직 하나의 레코드 타입만 포함
- 각 애트리뷰트(열)들의 순서는 중요하지 않음 (집합은 순서 없음)
- 동일한 튜플이 두 개 이상 존재하지 않음
- 튜플들의 순서는 중요하지 않음.
- 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유하면 됨
* 릴레이션 스키마 : 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합
* 릴레이션 인스턴스 : 릴레이션에 어느 시점에 들어 있는 튜플들의 집합, 시간의 흐름에 따라 계속 변함
속성 (Attribute == Field == Column) - 릴레이션의 열
튜플 (Tuple == Record == Row) - 릴레이션의 각 행
차수 (Degree) - 열의 수(차수, 속성의 수)
* 모든 릴레이션은 적어도 한 개의 속성을 가져야 함.
카디널리티 (Cardinality) - 행의 수(기수, 튜플의 수)
* 릴레이션은 튜플이 0이 될 수 있음
도메인 (Domain) - 릴레이션에 포함된 각각의 속성들이 가질 수 있는 값들의 집합

 

예시) 

출처 : https://davincicoding.tistory.com/m/65

 


6. Key의 종류

키의 종류 설명
슈퍼 키(Super Key) 유일성을 만족하는 키
복합 키(Composite Key) 2개 이상의 속성을 사용한 키
후보 키(Candidate Key) 유일성과 최소성을 만족하는 키. 기본키가 될 수 있는 후보이기 때문에 후보키라고 불림
기본 키(Primary Key) 후보 키에서 선택된 키. Null 값이 들어갈 수 없으며, 기본키로 선택된 속성은 동일한 값이 들어갈 수 없음
대체 키(Surrogate Key) 후보 키 중에 기본 키로 선택되지 않은 키
외래 키(Foreign Key) 어떤 테이블 간의 기본 키를 참조하는 속성. 테이블들 간의 관계를 나타내기 위해 사용

 

키의 관계

 


7. 무결성

데이터의 정확성 또는 유효성을 의미. 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적으로 또는 명시적으로 정의

7-1. 무결성 제약 조건

  1. 도메인 제약 조건
    •  각 애트리뷰트 값이 반드시 원자값이어야 함
    •  애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있음
  2. 키 제약조건
    •  키 애트리뷰트에 중복된 값이 존재해서는 안됨(기본키가 아님)
  3. 엔티티 무결성 제약조건
    •  엔티티 : 데이터 집합(사원, 부서, 고객, 상품, ...)
    •  릴레이션의 기본 키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없음
    •  대체 키에는 적용되지 않음
  4. 참조 무결성 제약조건
    •  두 릴레이션의 연관된 튜플들 사이의 일관성을 유지하는데 사용됨
    •  릴레이션 R2의 외래 키가 릴레이션 R1의 기본 키를 참조할 때, 참조 무결성 제약조건은 아래의 두 조건 중 하나가 성립되면 만족됨
      1. 외래 키의 값은 R1의 어떤 튜플의 기본 키 값과 같다.
      2. 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않으면 널값을 가진다.

 


8. 테이블 제약 조건

  •  테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러가지 규칙을 적요해 놓는 것
  •  간단하게 말하면 테이블 안에서 데이터의 성격을 정의하는 것
  1. NOT NULL
    •  컬럼을 필수 필드화 시킬 때 사용
    •  NOT NULL 제약조건 설정 시 해당 컬럼에는 꼭 데이터를 입력해야 함
  2. UNIQUE
    •  데이터의 유일성을 보장(중복되는 데이터가 존재할 수 없음)하고, 자동으로 인덱스가 생성
    •  unique은 null허용하지만, primary key는 null 허용 안함
    •  unique은 하나의 테이블에 여러 개 올 수 있지만, primary key는 하나만 존재
  3. PRIMARY KEY
    •  기본 키 : unique + not null 의 결합과 같음
    •  기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서 외래키들이 참조할 수 있는 키로서의 자격을 가지고 있음(참조 무결성)
    •  unique 제약조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성, 그 이름은 기본 키 제약조건의 이름과 같음
  4. FOREIGN KEY
    •  기본키를 참조하는 컬럼 or 컬럼들의 잡합(외래키는 기본키나 unique가 아니면 생성 제약)
    •  외래키를 가지는 컬럼의 데이터 형은 외래키가 참조하는 기본키의 컬럼과 데이터 형이 일치해야 한다.(참조 무경성 제약)
    •  외래키에 의해 참조되고 있는 기본키 : 삭제 불가
    •  on update cascade  : 기본키가 수정될 경우 외래키도 같이 수정
    •  on delete cascade : 기본키가 삭제될 때 같이 삭제
  5. DEFAULT
    •  데이터를 입력하지 않아도 지정된 값이 기본으로 입력됨
    •  default라고 값을 명시하면 기본값이 들어감
    •  열이름이 명시되지 않으면 자동 기본갓
    •  값이 직접 명시되면 기본값은 무시됨
  6. CHECK
    •  컬럼의 값을 어떤 특정 범위로 제한

 


9. 정규화

정규화(Normalization)의 기본 목표는 테이블 간에 중복된 데이터를 허용하지 않는다는 것이다. 중복된 데이터를 허용하지 않음으로써 무결성(Integrity)를 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다. 이러한 테이블을 분해하는 정규화 단계가 정의되어 있는데, 여기서 테이블을 어떻게 분해되는지에 따라 정규화 단계가 달라진다.

 

제1 정규화

제1 정규화란 테이블의 컬럼이 원자값(Automic Value)을 갖도록 테이블을 분해하는 것이다. 

제1 정규화를 만족하지 않은 테이블

위의 테이블에서 '추신수'와 '박세리'는 여러 개의 취미를 가지고 있기 때문제 제1 정규형을 만족하지 못하고 있다. 이를 제1 정규화를 적용한 테이블은 아래와 같다.

제1 정규화된 테이블

 

제2 정규화

제2 정규화란 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것이다. 여기서 완전 함수 종속이라는 것은 기본키의 부분집합이 결정자가 되어선 안되다는 것을 의미한다. 

제2 정규형을 만족하지 못하는 테이블

위 테이블에서 기본키는 (학생번호, 강좌이름) 으로 복합키이다. 그리고 (학생번호, 강좌이름)인 기본키는 성적을 결정하고 있다. 그런데 여기서 강의실이라는 컬럼은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다. 즉, 기본키(학생이름, 강좌이름)의 부분키인 강좌이름이 결정자이기 때문에 위의 테이블의 경우 다음과 같이 기존의 테이블에서 강의실을 분해하여 별도의 테이블로 관리하여 제2 정규형을 만족시킬 수 있다.

제2 정규화를 만족하는 테이블

 

 

제3 정규화

제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것이다. 여기서 이행적 종속이라는 것은 A → B, B → C가 성립할 때 A → C가 성립되는 것을 의미한다.

 기존의 테이블에서 학생 번호는 강좌 이름을 결정하고 있고, 강좌 이름은 수강료를 결정하고 있다. 그렇기 때문에 이를 (학생 번호, 강좌 이름) 테이블과 (강좌 이름, 수강료) 테이블로 분해해야 한다. 이행적 종속을 제거하는 이유는 비교적 간단하다.

예를 들어 501번 학생이 수강하는 강좌가 스포츠경영학으로 변경되었다고 하자. 이행적 종속이 존재한다면 501번의 학생은 스포츠경영학이라는 수업을 20000원이라는 수강료로 듣게 된다. 물론 강좌 이름에 맞게 수강료를 다시 변경할 수 있지만, 이러한 번거로움을 해결하기 위해 제3 정규화를 하는 것이다.

즉, 학생 번호를 통해 강좌 이름을 참조하고, 강좌 이름으로 수강료를 참조하도록 테이블을 분해해야 하며 그 결과는 아래와 같아.

 

BCNF 정규화

BCNF 정규화란 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것이다. 예를 들어 다음과 같은 특수수강 테이블이 존재한다고 하자.

 특수수강 테이블에서 기본키는 (학생번호, 특강이름)이다. 그리고 기본키 (학생번호, 특강이름)는 교수를 결정하고 있다. 또한 여기서 교수는 특강이름을 결정하고 있다.

 그런데 문제는 교수가 특강이름을 결정하는 결정자이지만, 후보키가 아니라는 점이다. 그렇기 때문에 BCNF 정규화를 만족시키기 위해서 위의 테이블을 분해해야 하는데, 다음과 같이 특강신청 테이블과 특강 교수 테이블로 분해할 수 있다.

 

 


10. 관계 대수

관계 대수식이란 기존 릴레이션(테이블)들로부터 새로운 릴레이션을 생성하는 절차적 언어 문법이다.

관계 대수

  •  셀렉션 : 테이블에서 한 개 끄집어 낸다
  •  프로젝션 : 학생 테이블에서 특정한 학번 이름만 출력
  •  합집합 : union 겹치는 걸 제외하고 테이블 합
  •  교집합 : 겹치는 것만 테이블
  •  차집합 : A - B 한 결과 테이블
  •  카티션 곱 : 나올 수 있는 조합 경우의 수
  •  조인 : 결합
  •  디비전 : 분할

관계 연산자들의 기능

 


[참고]

https://inpa.tistory.com/category/DBMS/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%20%EC%9D%B4%EB%A1%A0

 

'DBMS/데이터베이스 이론' 카테고리의 글 목록

성장 욕구가 가파른 초보 개발자로서 공부한 내용을 쉽게 풀어쓴 기술 개발자 블로그를 운영하고 있습니다.

inpa.tistory.com

https://mangkyu.tistory.com/110

 

[Database] 정규화(Normalization) 쉽게 이해하기

지난 포스팅에서 데이터베이스 정규화와 관련된 내용을 정리했었다. 하지만 해당 내용이 쉽게 이해되지 않는 것 같아서 정규화 관련 글을 풀어서 다시 한번 정리해보고자 한다. 1. 정규화(Normaliz

mangkyu.tistory.com