SQLD
이번 포스팅에서는 SQLD 자격검증 시험을 위한 내용으로 SQL과 데이터 모델링의 이해에 관련된 부분을 정리한다.
SQL이란?
SQL(Structured Query Language) 영문 자체를 해석해 보자면 구조화된 질의 언어로 데이터 베이스로 부터 Query(질의)를 던져 자료를 관리 및 처리하기 위해 설계된 언어이다.
크게 3가지의 문법으로 분류되어 있는데 데이터를 정의하기 위한 DDL(Data Definition Language), 데이터 조작을 위한 DML(Data Manipulation Language), 그리고 데이터의 접근을 제어하기 위한 DCL(Data Control Language)이 존재한다.
데이터 모델링의 이해
데이터 모델링과 3가지 특징
데이터 모델링은 현실세계의 존재하는 것을 데이터 베이스에 저장하기 위한 작업으로 3가지의 특징을 가진다.
- 추상화(Abstraction)
- 데이터를 현실세계에 맞춰 표현하기 위해 정의하는 것
- 단순화(Simplification)
- 누구나 쉽게 이해할 수 있어야 함
- 명확성(Clarity)
- 해석이 가능해야 하고 이중적인 의미를 가지지 않음
데이터 모델링의 단계 (개 - 논 - 물)
- 개념적 모델링(Conceptual Data Modeling)
- 엔티티(Entity)와 속성(Attribute)을 도출하고 ERD를 작성하는 단계
- 엔티티는 업무적인 명사로 실체, 객체이다
- 기술적인 용어는 가급적 사용하지 않음
- ex)입출차, 주차장, 입차, 출차
- 논리적 모델링(Logical Data Modeling)
- 개념적 모델링을 논리적 모델링으로 변환하는 작업
- 정규화를 수행하여 중복 데이터를 제거하고 무결성(Integrity)를 유지
- ex)입출차(입출차번호,입차시간,출차시간…), 주차장(주차장번호, 타입, 면수….)
- 물리적 모델링(Physical Data Modeling)
- 실제로 데이터 베이스를 구축
- 성능, 보안, 가용성(성능대비 비용)을 고려
- ex) CREATE TABLE IN_OUT…….
데이터 모델링의 3가지 관점
- 데이터 관점
- 데이터간의 관계에 대한 관점으로 구조분석, 정적분석 (ex. 주차정보, 입차정보)
- 프로세스 관점
- 시나리오 분석, 도메인 분석, 동적분석 (ex. 차량이 들어오면 입차가 된다)
- 데이터와 프로세스 관점(상관관점)
- CRUD분석 (ex. 입차정보가 생기면 주차장 정보에 주차 가능 차량 대수가 준다)
ERD(Entity Relationship Diagram)
1976년 피터첸에 의해 만들어진 표기 법으로 엔티티의 속성과 관계를 다이어 그램으로 표햔하는 것
ERD 작성 절차
- 엔티티를 도출하고 그린다.
- 엔티티를 배치한다 (중요할수록 왼쪽 상단에 배치하는 것이 좋다)
- 엔티티간의 관계를 설정한다
- 관계명을 서술한다(관계간 어떤 프로세스가 작동하는지 ex.입차, 출차)
- 전체 참여도를 표현한다(1:1, 1:N, M:N의 관계)
- 관계의 필수 여부를 표현한다(ex. 고객은 반드시 계좌를 한개 이상 가진다)
데이터 모델링 고려 사항
- 데이터 모델의 독립성
- 중복된 데이터는 줄이고 PK, FK를 잘 설정
- 고객 요구사항의 표현
- 의사소통이 가능하도록 알맞은 컬럼으로 설계
- 데이터 품질확보
- 데이터 표준을 정하여 설계 (ex. Not null의 정의, 짧은 데이터 형식은 저장공간을 작게 둠)
3층 스키마 (3-Level Schema)
- ANSI(미국표준협회) : 다양한 DBMS간 SQL 쿼리가 호환되도록 정의한 표준
- 데이터 베이스의 독립성을 확보하기 위한 방법
- 데이터 베이스의 구조와 제약조건을 명세한 것
3층 스키마의 구조 (외부 - 개념 - 내부)
- 외부 스키마(External Schema)
- 사용자 관점의 업무적 데이터 접근
- 관련 데이터와 뷰(view)를 표시
- ex) 인사팀은 인사관련 데이터를 인사관리 뷰에서, 행정팀은 행정관련 데이터를 행정관리 뷰에서 접근
- 개념 스키마(Conceptual Schema)
- 설계자 관점, 사용자 전체 집단 관점
- 통합 데이터베이스 구조
- ex) 논리적으로 저장된 DB 테이블
- 내부 스키마(Internal Schema)
- 개발자 관점의 물리적 구조
- 인덱스, 데이터 구조, 레코드 구조, 필드 정의
- ex) 개발자가 설계한 대로 저장 방식을 OS가 기록
3층 스키마의 독립성
- 논리적 독립성
- 개념 스키마가 변경 되더라도 외부 스키마가 영향을 받지 않음
- ex) 테이블 명이 변하거나 컬럼명이 변한다 한들 관제 인원 업무에 지장이 가면 안됨
- 물리적 독립성
- 내부 스키마가 변경 되더라도 개념 스키마가 영향을 받지 않음
- ex) 인덱스나 컬럼의 타입, 레코드가 변해도 시스템 구조에 영향이 없어야 함
엔티티 Entity란
업무상 관리가 필요한 관심사로 명사를 말함
엔티티의 특징
- 식별자
- 유일한 식별자가 있어야 함 (ex. 입출차번호)
- 인스턴스 집합
- 데이터 로우가 2개 이상
- 속성(컬럼)
- 관계
- ex) 입출차 정보엔 주차장 구역이 있다
- 업무
- 엔티티는 업무에서 관리되는 집합
엔티티의 종류
- 유형과 무형에 따른 종류
- 유형 엔티티 : 업무에서 도출되어 지속적으로 사용되는 기본 (ex. 사원, 기기)
- 개념 엔티티 : 물리적 형태가 없는 개념적 엔티티 (ex. 가상계좌)
- 사건 엔티티 : 비지니스 엔티티 (ex. 수납, 카드결제)
- 발생 시점에 따른 종류
- 기본 엔티티(Basic) : 기본 키로 독립적인 엔티티 (ex. 사원번호)
- 중심 엔티티(Main) : 기본 엔티티에서 발생하여 행위 엔티티를 생성하는 것 (ex. 수납, 고지)
- 행위 엔티티(Active) : 2개 이상의 엔티티로 발생한 것 (ex. 할인내역, 수납이력)
속성 (Attribute)
엔티티의 항목으로 더 이상 분리 될 수 없는 단위로 컬럼이라고도 함
속성의 종류
- 분해에 따른 종류
- 단일속성 : 하나의 의미로 구성된 것 (ex. 이름)
- 복합속성 : 여러 개의 의미가 합쳐진 것 (ex. 주소)
- 다중값 속성 : 여러개의 값을 가지고 있는 속성 (ex. 상품리스트)
- 특성에 따른 종류
- 기본속성 : 본래의 특성 (ex. 차량번호)
- 설계속성 : 유일한 값을 가지는 모델링 과정에서 나오는 속성 (ex. 입출차번호)
- 파생속성 : 다른 속성에 의해 만들어지는 속성 (ex. 주차 요금 합계)
도메인 (Domain)
속성이 가질 수 있는 값의 범위로 예시로는 성별은 남성과 여성만 선택이 가능함
관계 (Relation Ship)과 종류
엔티티간의 관련성을 나타낸 것
- 존재관계 : 계좌를 개설하면 관리지점이 자연스럽게 붙음
- 행위관계 : 엔티티간의 행위가 있는 것으로 고객은 계좌를 통해 주문을 발주함
관계 차수(Cardinality)
두 개의 엔티티간의 관계로 참여 수 (1:1, 1:N, M:N)
식별관계와 비식별관계
- 식별관계 (Identification Relationship)
- 엔티티간 공유하고 있는 상태로 강한개채(Strong Entity)의 기본키를 약한개채(Week Entity)가 기본키로 공유 받는 것을 말하며 실선으로 표시
- ex) 입출차번호를 출차테이블에서 가지고 있다.
- 비식별관계
- 강한개체의 기본키를 약한 개채가 공유 받기는 하나 일반 컬럼으로 참조하는 것을 말하며 점선으로 표시
- ex) 부서와 사원의 관계 : 사원은 부서를 가지고 있을 수 도 있고 없을 수 도 있다.
엔티티 식별자(Entity Identifier)
유일성을 만족하며 구분이 가능하게 하는 것 (ex. 학번, 입출차번호, 주민등록번호)
키의 종류
- 기본키(Primary Key)
- 최소성 : 엔티티를 구성하기 위해 하나라도 없으면 안됨
- 대표성 : 엔티티를 대표함
- 유일성 : 중복이 되면 안됨
- 불변성 : 왠만해서는 변하지 않아야함
- 후보키(Candidate Key)
- 유일성과 최소성을 만족하는 키
- 슈퍼키(Super Key)
- 유일성은 만족하나 최소성을 만족하지는 않음 (ex. 학번과 주민등록번호의 조합으로 된 키)
- 대체키(Alternate Key)
- 후보키 중 기본키를 선정하고 남은 키
- 외래키(Foreign Key)
- 다른 테이블의 키를 가리키는 키
마무리
다음 시간엔 데이터 모델과 성능, 정규화와 반정규화에 대해서 학습한다
개인적인 이해를 바탕으로 작성한 글 입니다. 피드백 언제든 환영합니다!