CS/Database

데이터베이스 기본 개념

olsohee 2024. 3. 6. 13:00

파일시스템과 데이터베이스의 비교

과거에는 데이터 관리를 위해 파일 시스템을 사용했다. 파일 시스템은 데이터를 프로그램과 분리하여 별도의 파일에 저장하는 방법이다. 파일은 프로그램과 분리되어 컴퓨터의 디스크에 저장되며, 컴퓨터가 꺼진 상태에도 여전히 디스크에 데이터를 유지한다.

 

그리고 파일 시스템은 응용 프로그램마다 별도의 파일로 관리한다. 따라서 각 프로그램들은 파일을 다뤄야 하는 부담이 생기고, 각 파일별로 저장된 데이터를 공유하지 않기 때문에 데이터의 중복이 발생한다. 그리고 이로 인해 데이터 일관성의 문제가 발생할 수 있다. 

반면 DBMS의 경우 데이터 정의 및 관리를 DBMS에게 맡기기 때문에 프로그램 자체가 훨씬 간단하다. 그리고 여러 프로그램에서 하나의 데이터베이스를 공유할 수 있기 때문에 데이터 중복 저장과 일관성 문제가 발생하지 않는다.

데이터베이스

데이터베이스(DB)는 여러 사람에게 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합을 말한다.

 

데이터베이스의 특징은 다음과 같다.

  • 실시간 접근성: 데이터베이스는 실시간으로 서비스된다. 따라서 사용자의 요청에 대해 즉각적인 처리와 응답이 이루어진다.  
  • 지속적인 변경: 데이터베이스에 저장된 데이터는 지속적으로 변경될 수 있다. 즉 데이터의 삽입, 삭제, 수정 등을 통해 최신의 데이터를 유지해야 한다.
  • 동시 공용: 데이터베이스는 서로 다른 유저에 의해 동시 접근이가능해야 한다.
  • 내용에 의한 참조: 데이터베이스에 있는 데이터를 참조할 때 데이터의 실제 물리적 위치에 의해서가 아니라 사용자가 요구하는 데이터의 내용으로 데이터를 찾아야 한다.

DBMS

데이터베이스가 데이터의 집합이라면, 이런 데이터들을 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)라고 한다. DBMS는 데이터베이스와 사용자 간의 인터페이스 역할을 해주는 소프트웨어이다. DBMS를 사용하면 DBMS가 자료를 통합하여 관리해주고 데이터의 접근을 용이하게 해주기 때문에 편리하다. 또한 DBMS를 통해 데이터 관리가 이뤄지기 때문에 응용 프로그램은 데이터 관리에 대한 부담을 덜 수 있다.

 

DBMS의 특징은 다음과 같다.

  • 데이터 구조화
    • 물론 구조화된 데이터가 아닌 비정형 데이터들을 다루기 위한 NoSQL도 있지만, 관계형 데이터베이스를 다루는 RDBMS의 경우에는 테이블, 레코드, 필드 등과 같은 구조화된 형태로 데이터를 저장하고 이 구조로 인해 데이터를 쉽게 검색 및 관리할 수 있게 해준다. 
  • 데이터 무결성
    • 데이터 무결성은 데이터의 정확성, 신뢰성, 일관성을 보장하는 것을 말한다. DBMS는 데이터 무결성을 보장하기 위해 기본키 제약조건, 외래키 제약조건, 유니크 제약조건 등 다양한 제약조건을 사용한다.
  • 데이터 독립성
    • DBMS는 데이터베이스와 사용자 간의 인터페이스 역할을 하기 때문에 데이터의 독립성을 보장해준다.
    • 논리적 데이터 독립성: 데이터베이스의 논리적 구조(데이터 모델)가 변경되어도 응용 프로그램에  영향을 주지 않는다. (ex, f테이블에 새로운 필드 추가, 필드의 데이터 타입 변경)
    • 물리적 데이터 독립성: 데이터베이스의 물리적 구조가 변경되더라도 데이터베이스늬 논리적 구조나 응용 프로그램에 영향을 주지 않는다. (ex, 데이터의 저장 위치 변경, 새로운 인덱스 추가)
  • 데이터 보안
    •  DBMS는 사용자 인증, 암호화 등의 기능을 통해 데이터의 보안을 제공한다. 
  • 데이터 백업 및 복구
    • 정기적인 백업과 복구 기능 제공으로 시스템 장애나 데이터 손실이 발생했을 때 데이터를 복구할 수 있다.
  • 다중 사용자 환경 지원
    • DBMS를 통해 여러 사용자가 데이터에 동시에 접근하고 조작할 수 있다. 그리고 이때 DMBS는 데이터의 일관성을 보장하고 동시성을 제어하기 위해 트랜잭션, 락 등의 기능을 제공한다.
  • 효율적인 데이터 관리
    • 대량의 데이터를 효율적으로 저장, 검색, 관리할 수 있다. DBMS는 인덱스, 쿼리 최적화 같은 기술들을 제공하여 대량의 데이터에 대해 빠른 검색이 가능하다.
  • 표준화된 쿼리 언어 사용
    • 대부분의 DBMS에서는 SQL(Structed Query Language)과 같은 표준화된 쿼리 언어를 사용하여 데이터를 관리할 수 있다.
  • 확장성과 접근성
    • 데이터의 양이 증가함에 따라 확장이 가능하고, 네트워크를 통해 원격으로 접근할 수도 있다. 따라서 다양한 애플리케이션과 통합하여 사용할 수 있다.

스키마

스키마는 데이터베이스의 논리적 구조를 정의하는 설계도이다. 스키마를 통해 데이터의 구조, 데이터 간의 관계, 데이터에 적용되는 제약 조건 등이 명시된다. 

3단계 데이터베이스 구조

데이터베이스의 복잡한 내부 구조를 감추고 일반 사용자가 데이터베이스를 쉽게 이해하고 이용할 수 있도록 미국의 표준화 기관인 ANSI/SPARC에서는 3단계 데이터베이스 구조를 제안했다.

 

3단계 데이터베이스 구조는 하나의 데이터베이스를 외부, 개념, 내부 세 단계로 나눈 것이다. 내부 단계에서 외부 단계로 갈수록 추상화 레벨이 높아진다. 추상화 레벨이 높아진다는 것은 데이터베이스가 실제 어떻게 돌아가는지 관심 없다는 것과 비슷하다. 사용자 관점에서 내부 시스템을 알 수도 없고, 알 필요도 없기 때문이다. 3단계 구조를 통해, 모든 데이터의 저장 및 유지와 관련된 복잡한 내용을 숨기고 필요한 데이터만 단순화한 외부 단계의 관점을 일반 사용자들에 제공 가능하다. 

  • 외부 단계: 개별 사용자 관점
  • 개념 단계: 조직 전체의 관점
  • 내부 단계: 물리적인 저장 장치의 관점

  • 외부 단계 
    • 일반 사용자나 응용 프로그래머가 접근하는 계층으로 데이터 추상화의 최상위 단계이다.
    • 이와 같이 외부 단계에서 사용자에게 필요한 데이터베이스를 정의한 것을 외부 스키마라고 한다.
    • 데이터베이스 하나에 여러 개의 외부 스키마가 존재할 수 있으며, 하나의 외부 스키마를 여러 사용자나 여러 개의 응용 프로그램이 공용할 수 있다.
    • 외부 스키마는 전체 데이터베이스 중 사용자가 관심을 가지는 일부분으로 볼 수 있어서 서브 스키마라고도 한다.

  • 개념 단계
    • 개념 스키마는 조직 전체의 관점에서 생각하는 데이터베이스의 모습이다. 전체 데이터베이스에 어떤 데이터가 저장되는지, 데이터들 간에는 어떤 관계가 존재하고 어떤 제약조건이 있는지에 대한 정의뿐만 아니라, 데이터에 대한 보안 정책이나 접근 권한에 대한 정의도 포함한다.
    • 이는 DBA가 관리하는 계층이다.
    • 하나의 데이터베이스에는 하나의 개념 스카마가 존재한다.
    • 데이터베이스 관리자는 데이터베이스의 일부분이 아닌 전체에 관심을 둔다. 따라서 개념 단계에서는 이 같은 관리자의 관점에서 모든 사용자에게 필요한 데이터를 통합하여 전체 데이터베이스의 논리적인 구조를 정의하는데, 이를 개념 스키마라고 한다. 

  • 내부 단계 
    • 내부 단계는 전체 데이터베이스가 디스크와 테이프 같은 저장 장치에 실제로 저장되는 방법을 정의하는데, 이를 내부 스키마라 한다.
    • 데이터베이스는 저장 장치에 파일 형태로 저장되는데 내부 스키마는 파일에 데이터를 저장하는 레코드의 구조, 레코드를 구성하는 필드의 크기, 인덱스를 이용한 레코드 접근 경로 등을 정의한다.
    • 내부 스키마 역시 데이터베이스 하나에 내부 스키마 하나만 존재한다.

이 3단계 데이터베이스 구조의 특징은 데이터 독립성이다. 데이터 독립성은 하위 단계의 내용을 추상화하여 상위 단계에서 그 세부 사항을 숨김으로써 한 단계에서의 변경이 다른 단계에 영향을 미치지 않도록 하는 것이다. 예를 들어 개념 스키마에 새로운 테이블을 생성하거나 변경하더라도 외부 스키마가 직접 다루는 테이블이 아니면 외부 스키마는 영향을 받지 않는다(개념 스키마와 외부 스키마 간의 독립성). 또 다른 예로, 성능 개선을 위해 물리적 저장 장치를 재구성하더라도 개념 스키마나 외부 스키마는 영향을 받지 않는다(내부 스키마와 개념 스키마, 외부 스키마 간의 독립성). 따라서 이러한 이유로 3단계 데이터베이스 구조는 현대의 대부분의 데이터베이스 시스템에서 적용되고 있다.

릴레이션

릴레이션은 관계형 데이터베이스를 이해하기 위해 알아야 할 개념이다. 릴레이션은 행과 열로 구성된 테이블을 의미한다. 릴레이션은 스키마와 인스턴스로 구성된다. 

  • 릴레이션 스키마: 관계 데이터베이스의 릴레이션이 어떻게 구성되는지, 어떤 정보를 담는지에 대한 기본적인 구조를 정의한다. 테이블에서 스키마는 테이블의 첫 행인 헤더에 나타나며 각 데이터의 특징을 나타내는 속성, 자료타입 등의 정보를 담고 있다. 
    • 속성(attribute): 각 열을 의미한다.
    • 도메인(domain): 각 속성들이 어떤 값을 가질 수 있는지를 나타낸다.
    • 차수(degre): 릴레이션이 가지는 속성의 개수를 의미한다.
  • 릴레이션 인스턴스: 릴레이션 스키마에 실제로 저장된 데이터의 집합니다.
    • 튜플(tuple): 릴레이션 인스턴스에서의 각각의 행을 이라고 한다. 튜플의 속성 값은 스키마에서 정의한 도메인 값으로 구성되며, 튜플이 가지는 속성의 개수는 스키마의 차수와 동일하다. 또한 릴레이션 내의 모든 튜플들은 서로 중복되지 않아야 한다.
    • 카디날리티(cardinality): 릴레이션에 저장된 튜플의 수를 의미한다. 카디날리티는 튜플의 삽입, 삭제, 수정 등에 따라 수시로 변한다.

키(Key)

키는 무언가를 식별하는 고유한 식별자 기능을 한다. 즉, 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때 다른 행과 구별할 수 있는 속성이다. 키의 종류는 다음과 같다.

  • 슈퍼키
    • 테이블에서 각 행을 유일하게 식별할 수 있는 하나 또는 그 이상의 속성들의 집합이다. 
    • 유일성만 만족하면 슈퍼키가 될 수 있다. (유일성: 하나의 키로 특정 행을 바로 찾아낼 수 있음)
  • 후보키
    • 테이블에서 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합니다.
    • 후보키는 유일성과 최소성을 동시에 만족해야 한다.
  • 기본키
    • 후보키들 중 하나를 선택한 키로 유일성과 최소성을 만족하는 속성이다.
    • 테이블에서 기본키는 오직 1개만 지정할 수 있다.
    • 기본키는 null 값을 가질 수 없고, 중복된 값을 가질 수 없다. 
  • 대체키
    • 후보키가 두 개 이상일 경우 그 중 하나를 기본키로 지정하고, 남은 후보키를 대체키라고 한다. 즉, 대체키는 기본키로 선정되지 않은 후보키이다.
  • 외래키
    • 테이블이 다른 테이블의 데이터를 참조할 때 두 테이블을 서로 연결하는데 사용되는 키이다.  
    • 이때 외래키가 포함된 테이블을 자식 테이블이라 하고, 외래키 값을 제공하는 테이블을 부모 테이블이라 한다.
    • 외래키 값은 null이거나 부모 테이블의 기본키 값과 동일해야 한다. 즉, 부모 테이블의 기본키가 자식 테이블의 외래키가 된다.
    • 이때 부모 테이블의 튜플이 먼저 삭제될 수 없다. 왜냐하면 부모 테이블을 참조하는 자식 테이블의 외래키 값이 참조하는 곳이 사라지기 때문이다. 

무결성 제약조건

무결성(Integrity)이란 정보에 결점이 없도록 유지하는 성질을 의미한다. 그렇다면 데이터 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미한다.

 

따라서 데이터베이스에서 정의되는 개념인 무결성 제약조건은 데이터베이스에 저장된 값들이 항상 일관성을 갖고, 데이터의 유효성, 정확성, 안정성을 유지할 수 있도록 하는 제약조건을 의미한다. 

 

데이터 무결성 제약조건의 종류는 다음과 같다. 

  • 개체 무결성(기본키 제약조건)
    • 본키는 null 값을 가질 수 없고, 중복된 값을 가질 수 없다(테이블에 기본키는 1개).
  • 참조 무결성(외래키 제약조건)
    • 외래키 값은 null이거나 부모 테이블의 기본키 값과 동일해야 한다.
    • 그리고 외래키는 참조할 수 없는 값을 지닐 수 없다. (따라서 부모 테이블이 먼저 삭제되면 외래키 제약 조건에 위반된다.)
  • 도메인 무결성
    • 테이블에 존재하는 필드의 무결성을 보장하기 위한 것으로, 필드의 타입, null 값 허용 유무 등에 대한 사항을 정의하고 올바른 데이터가 입력되었는지 확인하는 조건이다.  

Reference