이번 글에서는 스키마, 데이터 독립성, 무결성 제약조건 등의 내용을 다루게 됩니다.
스키마란?
스키마는 데이터베이스의 구조와 제약 조건을 정의한 청사진이라고 보면 아주 편합니다.
데이터베이스가 어떻게 구성되고, 어떤 데이터가 저장되며, 데이터 간의 관계는 무엇인지를 설명합니다.
스키마는 3단계로 나눌 수 있습니다. 이를 3단계 데이터베이스 구조라고 합니다.
3단계 데이터베이스 구조란 하나의 데이터베이스를 관점에 따라 세 단계로 나는 것을 의미합니다.
하나하나 알아보도록 합시다.
외부 스키마
외부 스키마는 특정 사용자나 애플리케이션이 데이터를 보는 방식(뷰)을 정의한 겁니다.
서브 스키마라고도 합니다.
따라서, 데이터베이스 하나에 여러 외부 스키마가 존재할 수 있습니다.
외부 스키마의 역할은 다음과 같습니다.
- 사용자 요구에 맞게 데이터를 제한적으로 보여줌
- 데이터 접근 권한을 정의하여 보안을 강화
- 각 사용자 그룹에 맞춘 맞춤형 인터페이스 제공
외부 스키마는 이런 것들이포함됩니다.
- 테이블의 특정 컬럼이나 행에 대한 사용자 뷰
- 데이터 필터링, 정렬, 그룹화 등
외부 스키마의 특징은 다음과 같습니다.
- 여러 외부 스키마를 정의할 수 있으며, 각각 서로 다른 사용자 요구를 충족
외부 스키마의 예시로는 이런 게 있겠네요!
- 학생의 개인정보를 학생 본인에게는 보여주지만, 교수에게는 이름과 학번만을 제공
개념적 스키마
개념 스키마는 데이터베이스의 전체 논리적 구조를 정의합니다. 또한 모든 데이터를 통합하여 하나의 일관된 뷰를 제공합니다.
즉, 데이터베이스 하나에 단 하나의 개념 스키마만 존재합니다.
개념적 스키마의 역할은 다음과 같습니다.
- 데이터베이스의 데이터 모델링
- 데이터의 구조(테이블, 속성)와 제약조건(무결성, 관계)을 정의
개념적 스키마에는 이런 것들이 포함됩니다.
- 테이블, 속성(컬럼), 데이터 타입, 관계, 제약 조건
개념적 스키마의 특징은 다음과 같습니다.
- 데이터의 논리적 독립성을 보장
개념적 스키마의 예시로는 이런 게 있겠네요!
- 학생 (학번, 이름, 나이, 학과)
- 수강 (수강번호, 학번, 과목코드)
내부 스키마
내부 스키마는 데이터베이스가 물리적으로 저장되는 방식을 나타냅니다. 이에 따라 저장소 관점에서 데이터를 정의하게 됩니다.
저장 스키마라고도 합니다.
내부 스키마의 역할은 다음과 같습니다.
- 데이터를 저장할 때 효율성을 최적화
- 저장소의 파일 구조, 인덱스, 페이지 구조등을 정의
- 데이터 접근 속도를 최적화하기 위한 설계
내부 스키마는 이런 것들이 포함됩니다.
- 데이터의 물리적 저장 위치
- 저장 구조(파일 포맷, 인덱스 사용, 파티셔닝 ,,,)
- 압축 및 암호화 같은 데이터 관리 메커니즘
내부 스키마의 특징은 다음과 같습니다.
- 데이터의 물리적 독립성을 보장
내부 스키마의 예시로는 이런 게 있겠네요!
- 학번을 기준으로 해시 인덱스를 생성
- 테이블 데이터를 디스크 블록에 배치하는 방식
3단계 데이터베이스 구조간의 관계
위에서 알아본 3단계 데이터베이스 구조간의 관계에 대해서 알아보겠습니다.
1. 외부 스키마 -> 개념적 스키마 -> 내부 스키마
- 외부 스키마는 사용자가 데이터베이스를 보는 방식 (사용자 뷰)
- 개념적 스키마는 데이터베이스의 전체 구조를 정의 (중앙적 논리 뷰)
- 내부 스키마는 데이터의 실제 저장 방식을 정의 (물리적 뷰)
2. 독립성 보장
- 논리적 독립성 : 개념적 스키마와 외부 스키마 간의 독립성
- 개념적 스키마가 변경되어도 외부 스키마에 영향을 미치지 않음
- 물리적 독립성 : 개념적 스키마와 내부 스키마 간의 독립성
- 내부 스키마가 변경되어도 개념적 스키마에 영향을 미치지 않음
독립성에 대해서 뭔가 느낌이 오지 않는 느낌입니다. 한번 더 살펴보도록 하겠습니다.
물리적 독립성
물리적 독립성은 데이터가 물리적으로 저장되는 방식이 변경되어도, 상위계층(개념 스키마)에 영향을 미치지 않는 성질을 말합니다.
이건 어디에 쓸모가 있을까요?
저희가 데이터베이스 관리자라고 생각해 봅시다.
저희가 하고 싶은 건 저장 방식을 효율적으로 변경하기 위해 인덱스 또는 데이터를 압축하는 방법을 택할 수 있겠네요.
이렇게 저장 방식을 변경하더라도, 애플리케이션은 이러한 변경을 알 필요가 없다는 걸 뜻합니다. 따라서 데이터를 어떻게 저장할지 편리하게 변경할 수 있겠죠?
다음과 같은 예시도 있습니다.
- 데이터를 디스크에서 SSD로 옮기거나, 데이터를 클러스터로 분산 저장해도 데이터 모델이나 애플리케이션 로직에는 영향을 미치지 않습니다.
논리적 독립성
논리적 독립성은 데이터베이스의 논리적 구조(테이블, 속성)가 변경되더라도, 상위계층 (외부 스키마)에 영향을 미치지 않는 성질을 말합니다.
이건 어디에 쓸모가 있을까요?
만약 논리적 구조가 변경될 때마다 애플리케이션 코드나 사용자 인터페이스를 수정해야 한다면 아주 귀찮을 것입니다.
논리적 독립성은 이러한 상황을 방지해 줍니다. 아주 좋지요?
더 쉬운 이해를 위해 저희는 개발자니 잠깐이나마 코드를 봐볼까요?
SELECT 학번 FROM 학생
기존에 이런 쿼리문을 작성해서 쓰고 있다고 가정해 봅시다.
근데! 학생 테이블에 성별 칼럼이 추가됐다고 하네요.. 근데 이때 기존에 쓰던 쿼리문에 영향이 있을까요?
여러분들도 알다시피 없습니다! 이해가 잘되죠?!
저희는 앞서 스키마와 3단계 데이터베이스 구조를 다뤘습니다.
스키마를 좀 더 들어가 보도록 하죠.
이번에는 릴레이션 스키마와 릴레이션 인스턴스에 대해서 다뤄보도록 하겠습니다.
여기서 릴레이션이란 테이블을 관계형 데이터베이스에서 테이블을 의미합니다.
릴레이션 스키마
릴레이션 스키마란 릴레이션의 구조를 정의한 설계도입니다.
릴레이션 스키마에는 이런 것들이포함됩니다.
- 릴레이션 이름 : 테이블의 이름
- 속성 : 테이블의 열(컬럼) 이름들
- 도메인 : 각 속성이 가질 수 있는 값의 범위
- 제약 조건 : 데이터의 유효성을 보장하는 규칙
릴레이션 스키마의 특징은 이렇습니다.
- 테이블의 구조를 정의하며, 데이터는 포함하지 않는다.
- 데이터베이스 설계 시 작성되며, 정적인 속성을 가진다.
더 빠른 이해를 위해 예시를 한번 살펴봅시다.
학생(학번: INT, 이름: VARCHAR(50), 나이: INT, 학과: VARCHAR(50))
이는 다음과 같이 매핑됩니다.
- 릴레이션 이름 : 학생
- 속성 : 학번, 이름, 나이, 학과
- 도메인 : (학번, INT) (이름, VARCHAR(50)), (나이, INT), (학과, VARCHAR(50))
- 제약 조건 : 아쉽게도 현재 제약조건은 없습니다!
릴레이션 인스턴스
릴레이션 인스턴스는 릴레이션 스키마를 기반으로 특정 시점에 저장된 데이터의 집합입니다.
테이블에서 실제로 저장된 행(Row)을 의미합니다.
릴레이션 인스턴스에는 이런 것들이포함됩니다.
- 튜플(Tuple) : 릴레이션의 행(row), 하나의 데이터 레코드
- 도메인 값 : 각 속성에 저장된 실제 값
릴레이션 인스턴스의 특징은 이렇습니다.
- 동적인 속성을 가지며, 시간이 지나면서 변경될 수 있습니다.
- 릴레이션 스키마가 동일하더라도 릴레이션 인스턴스는 시점에 따라 다를 수 있습니다.
빠른 이해를 돕기 위해 예시를 봐봅시다.
학생
-----------------------------
학번 이름 나이 학과
1 홍길동 21 컴퓨터공학
2 김영희 22 전자공학
3 박철수 20 기계공학
이러한 예시가 있을 때 가로로 데이터를 읽어봅시다.
읽어보셨나요? 그게 바로 튜플입니다.
- 튜플 1 : (1, 홍길동, 21, 컴퓨터공학)
- 튜플 2 : (2, 김영희, 22, 전자공학)
- 튜플 3 : (3, 박철수, 20, 기계공학)
릴레이션에 대해 배워보았으니 두 가지만 더 배워봅시다.
간단한 개념이니 조금만 더 힘내봅시다. 💪💪
릴레이션의 차수와 카디널리티
차수(Degree)는 릴레이션에 포함된 속성의 개수입니다.
즉, 테이블의 열(컬럼)의 개수를 나타냅니다.
카디널리티(Cardinality)는 릴레이션에 포함된 튜플의 개수입니다.
즉, 테이블에 저장된 행(Row)의 개수를 나타냅니다.
빠르게 알아봅시다.
학생
-----------------------------
학번 이름 나이 학과
1 홍길동 21 컴퓨터공학
2 김영희 22 전자공학
3 박철수 20 기계공학
위에서 살펴봤던 테이블을 다시 가져왔습니다.
이 테이블에서 차수와 카디널리티는 각각 몇일까요?
차수는 테이블의 속성의 개수라고 했습니다.
즉, 학번, 이름, 나이, 학과가 포함되며 총 4개겠네요.
카디널리티는 행(튜플)의 개수라고 했죠?
현재 테이블에 3명의 학생이 있으니 카디널리티는 3이 되겠네요.
다소 긴 글이 되어 읽는데 지루할 수 있겠지만 하나하나 데이터베이스의 중요한 개념들입니다.
꼭 숙지하시길 바랍니다!
긴 글 읽어주셔서 감사합니다.
'CS > 데이터베이스' 카테고리의 다른 글
SQL 이란? (0) | 2025.01.07 |
---|---|
MySQL과 InnoDB (1) | 2025.01.03 |
키는 뭘까? (0) | 2025.01.02 |
DBMS 란 무엇일까? (0) | 2025.01.02 |
파일시스템과 데이터베이스 (0) | 2025.01.01 |