스키마는 메타데이터의 집합 입니다.
테이블이 몇개있는지
테이블 명이 뭔지
테이블 용량이 얼마인지
컬럼이 뭐가 있는지
컬럼 길이는 몇인지
인덱스가 뭔지
뷰가 몇개인지
함수, 트리거 등등
=> DB를 설명하기 위한 데이터, 즉 메타데이터의 집합 = 스키마
스키마는 db의 구조와 제약 조건에 관한 전반적인 명세를 정의한 메타데이터의 집합입니다.
거두절미하고 실제 DB를 봅시다
create schema myschema;
로 생성된 스키마는 데이터를 그룹화하여 네임스페이스같은 역할을 합니다.
스키마는 여러개를 생성할 수 있고
스키마가 다르면 테이블 명을 똑같이 할 수 있습니다.(물론 헷갈리니 그렇게 하진 않겠지만)
그럼 외부 스키마, 내부 스키마, 개념 스키마는 무엇이냐
그냥 "개념적으로 나눈 것" 그 이상도 이하도 아닙니다.
실제로 3가지로 나눠서 존재하는게 아니라는 뜻입니다.
실질적인 스키마는 위의 이미지에서 보듯 "메타데이터의 집합" 이라는 것이 전부입니다.
그럼 이걸 굳이 왜 개념적으로 3가지를 나누었느냐?
DB 사용자의 관점에 따라 필요한 내용을 보여주기 위함입니다.
데이터분석가가 필요한 데이터를 찾아서 보는데 데이터의 압축률까지 알아야 할까요? 그렇지 않다는 뜻입니다.
각각의 관점을 이해하기 좋은 그림인 것 같습니다.
외부 스키마
누군가 원하는 정보를 조회 했습니다. 또는 view를 만들었습니다.
결과가 나왔습니다.
그것에 해당하는 메타데이터 집합(테이블 명, 컬럼 명, 컬럼 타입, 컬럼 길이, PK, FK 등) 이 외부 스키마입니다.
-> 사용자에게 보여지는 데이터와! 관련된 메타데이터 집합 = 외부 스키마
그러면 사용자마다 원하는 정보가 모두 다르겠죠?
그래서 외부 스키마도 그때그때 여러가지가 존재합니다.
● 외부스키마에 포함되는 메타데이터
테이블 명, 뷰 명, 컬럼 명, 컬럼 타입/길이, 제약 조건(NOT NULL, UNIQUE, DEFAULT, CHECK 등)
권한(사용자별 데이터 접근권한, CRUD 권한)
별칭(테이블 또는 컬럼에 대한 사용자 정의 이름)
설명(테이블, 뷰, 컬럼 등에 대한 설명)
통계 정보(예: 레코드 수, 평균값, 최대값) 등
개념 스키마
● 포함되는 메타데이터
엔터티 : 데이터베이스에서 관리되는 대상 (예: 고객, 제품, 주문) = 테이블 명
속성 : 엔터티의 특성을 나타내는 정보 (예: 고객 이름, 제품 가격, 주문 날짜) = 컬럼명
관계 : 엔터티 간의 연결 (예: 고객이 주문을 하는 관계) = 1:1, 1:N, N:M
제약 조건 : 데이터 무결성을 유지하기 위한 규칙 (예: 고객은 하나 이상의 주문을 가질 수 있다) = NOT NULL, UNIQUE, DEFAULT, CHECK 등
데이터 유형 : 속성에 저장될 데이터의 종류 (예: 문자, 숫자, 날짜) = 컬럼 타입
길이 : 속성에 저장될 데이터의 최대 길이 = 컬럼 길이
기본값 : 새 레코드가 생성될 때 속성에 자동으로 입력될 값
설명 : 엔터티, 속성, 관계 등에 대한 설명
통계 정보 : 엔터티에 저장된 데이터의 통계 정보 (예: 레코드 수, 평균값, 최대값)
내부 스키마
● 포함되는 메타데이터
저장 방식 : 데이터가 저장되는 물리적 장치 및 방식 (예: 디스크, 테이블, 인덱스)
데이터 구조 : 데이터가 저장되는 구조 (예: 레코드, 필드)
데이터 형식 : 데이터가 저장되는 형식 (예: 문자, 숫자, 날짜)
접근 방법 : 데이터에 접근하는 방법 (예: 인덱스, 포인터)
저장 공간 할당 : 각 데이터 항목에 할당되는 저장 공간
압축률 : 데이터 압축 여부 및 압축률
암호화 : 데이터 암호화 여부 및 암호화 알고리즘
보안 설정 : 데이터 접근 권한 및 제어
성능 최적화 : 데이터 검색 및 처리 속도 향상을 위한 설정
'DB' 카테고리의 다른 글
[DB] super key, candidate key, primary key, unique key, 1NF, 2NF, 3NF, BCNF (0) | 2024.03.18 |
---|---|
[DB] ACID, 동시성 제어, serializabiliy, recoverabiliy, lock, MVCC, isolation 레벨 (0) | 2024.03.18 |
[postgreSQL] row_number(), rank(), dense_rank(), partition by (0) | 2024.01.17 |
[postgreSQL] 포스트그레스 기본 명령어 실습해보기 (0) | 2024.01.09 |
[postgreSQL] 포스트그레스 설치하기(windows) (0) | 2024.01.08 |
댓글