SQL
데이터와 정보
데이터(data)
- 관찰이나 측정을 통해서 수집된 사실이나 값 (value)
- 정량적 또는 정성적 실제값
ex)
제주도 한라산 1950m
전북 지리산 1915m
강원 설악산 1708m
정보(information)
- 데이터에 의미를 부여한 것
- 의사결정에 도움이 되도록 데이터를 의미있는 패턴으로 정리한 것
ex)
대한민국에서 가장 높은 산은 한라산이다.
데이터 구조
논리적 구조
- 사용자의 관섬에서 본 데이터의 개념적 구조
- 데이터의 논리적 배치
- 논리적 레코드
물리적 구조
- 저장 관점에서 본 데이터의 물리적 배치
- 저장장치에 저장된 데이터의 실제 구조
- 물리적 레코드
데이터베이스 / 데이터베이스 관리 시스템(DBMS)
데이터 베이스
- 데이터의 집합체
- 조직에 필요한 정보를 얻기 위해 논리적으로 연관된 데이터를 모아서 구조적으로 통합해놓은 것
- 여러 사용자나 응용프로그램이 공유
- 동시 접근 가능
데이터베이스 관리 시스템(DBMS)
- 데이터베이스를 관리해주는 소프트웨어 시스템
- Oracle / MySQL / MS SQL Server / MongoDB / MariaDB
데이터베이스 시스템
- 통합된 데이터를 관리, 처리, 사용자에게 서비스하기 위한 전체 시스템
데이터베이스 시스템 구성 요소
- 데이터베이스 (DB)
- DBMS (데이터베이스 관리 시스템)
- 데이터 언어 (Data Language)
- 사용자 (User)
- 데이터베이스 관리자 (DBA)
- 데이터베이스 컴퓨터
데이터베이스 / 데이터베이스 관리 시스템(DBMS) 특징
- 데이터 공유
- 데이터 중복 최소화
- 데이터 독립성
- 데이터 안정성
- 데이터 무결성
- 보안
- 데이터 추상화
- 다양한 뷰 제공
데이터 공유
- 필요한 자료를 한 번만 데이터베이스에 저장하고 모든 사용자 (응용프로그램)가 공유
- 데이터 중복 방지, 최신 데이터 유지, 일관성 보장
- 파일 시스템에서는 여러 응용프로그램에서 데이터를 중복하여 저장/관리
데이터 무결성
- 데이터베이스 안의 데이터는 오류가 없어야 함
- 데이터베이스에 저장된 데이터 값과 표현하는 현실 세계의 실제 값이 일치해야 함
- 데이터 상호간에 모순성이 없고, 현실 세계에도 모순되지 않도록 데이터 유지
ex1)
데이터를 동일한 두 곳에 저장.
한 곳은 갱신, 다른 곳은 갱신하지 않은 경우 두 데이터 간의 데이터 불일치 발생.
=> 데이터의 무결성이 보장되지 않는다고 함
ex2)
현실세계 모순: 나이 300살
ex3)
데이터 상호 간의 모순: 은행 A, B, C 지점만 존재. 고객 정보에 H 지점으로 기입 => 데이터 무결성 위배
- 이러한 오류를 방지하기 위해 외래키 (FK)를 사용하여 테이블 간의 모순성 배재
무결성 제약조건(Integrity Constraint)
- 무결성을 보장하기 위해 정확하지 않은 데이터가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건
- 데이터베이스에 저장된 데이터의 무결성을 보장하고 데이터베이스의 상태를 유지하기 위함
보안
- 데이터베이스의 테이블에 따라 접근 권한을 다르게 하여 데이터베이스의 비밀 유지와 조작 방지
데이터 추상화
- 데이터베이스에서는 사용자에게 저장 구조의 복잡성을 숨기고
- 테이블 개념만으로 DB를 생성/관리할 수 있도록 지원해주는 특성
다양한 뷰 제공
- 다양한 형태 (뷰)로 사용자에게 필요한 DBMS 데이터 세트 제공
- 수 천 가지의 뷰 정의
- 사용자 편의성 제공
- 보안 및 권한 관리
DBMS의 기능
- 데이터 정의 (Definition)
- 데이터의 구조를 정의하고 데이터 구조에 대한 삭제 및 변경 기능 수행
- 데이터 조작 (Manupulation)
- 데이터 조작하는 소프트웨어(응용프로그램)가 요처어하는 데이터의 검색, 삽입, 수정, 삭제 등의 작업 지원
- 데이터 제어 (Control)
- 데이터베이스 사용자 생성하고 모니터링 접근 제어.
- 무결성, 보안 및 권한 검사, 백업과 회복, 동시성 제어 등 기능 지원
데이터 언어(Data Language)
- 데이터베이스를 구축하고 이용하기 위한 데이터베이스 관리 시스템과의 통신 수단
- 데이터 정의어(DDL)
- 데이터 조작어(DML)
- 데이터 제어어(DCL)
데이터 정의어(DDL)
- 데이터베이스의 구조 정의를 위한 언어
- 데이터베이스 구조, 데이터 형식, 접근 방식 등 데이터베이스 구축 및 변경
- CREATE / DROP / ALTER
데이터 조작어(DML)
- 데이터 처리를 위해 응용프로그램과 데이터베이스 관리 시스템 간의 인터페이스를 위한 언어
- 데이터 처리 연산 가능
- 검색 / 삽입 / 수정 / 삭제
- SELECT / INSERT / UPDATE / DELETE
데이터 제어어(DCL)
- 보안 및 권한 제어, 데이터 무결성, 복구, 병행 제어 등을 위한 언어
- 데이터 보안: 권한이 없는 접근으로부터 보호
- 데이터 무결성: 데이터의 정확성, 안정성 보장
- 데이터 회복(복구): 시스템 오류 등으로부터 회복
- 병행 제어: 다수 사용자가 공유
- GRANT / REVOKE / COMMIT / ROLLBACK
데이터베이스의 발전
- 오프라인 관리: 종이에 연필로 기록해 장부로 관리
- 파일 시스템의 사용
- 컴퓨터 파일에 기록/저장 - notepad, excel 등
- 컴퓨터에 저장된 파일은 읽고, 쓰기가 편한 약속된 형태의 구조 사용
- 데이터 중복으로 인한 불일치 문제
- 데이터베이스 관리 시스템 (DBMS)
- 파일 시스템의 단점 보완
- 대량의 데이터를 보다 효율적으로 관리하고 운용
데이터베이스 / DBMS 종류
- 계층형 데이터베이스
- 처음으로 나온 DBMS 개념 - 1960년대 시작
- 레코드(행, 튜플)들을 계층구조로 표현한 데이터 모델 사용
- 검색 빠르지만, 구조 변경이 어렵고 데이터 중복 문제가 발생함
- 네트워크형 데이터베이스
- 레코드 링크(Pointer)로 구성
- 복잡한 내부 포인터 사용
- 프로그래머가 모든 구조를 이해해야만 프로그램 작성 가능
- 관계형 데이터베이스
- 데이터베이스를 테이블 형태로 구성하는 관계 데이터 모델 사용
- 단순하고 이해하기 쉬운 구조로 구성
- Oracle, MS SQL Server, MySQL, Informix, Sybase, DB2
- 속성(열, 칼럼) 값 사용
- NoSQL 데이터베이스
- Not Only SQL
- SQL을 사용하지 않는다는 의미
- SQL이 필요 없다는 의미가 아니고, 개선/보완을 의미
- 관계형 DBMS보다 덜 제한적인 일관성 모델을 이용
- 키(key)와 값(value) 형태로 저장
- 키를 사용해서 데이터 접근 및 관리
- MongoDB
- Not Only SQL
관계형 데이터 베이스(Relational Database / RDBMS)
- 관계형 데이터 모델: 데이터를 2차원 테이블 형태인 릴레이션 구조로 표현하는 논리적 데이터 모델
릴레이션(테이블)
- 관계형 데이터 구조
- 데이터를 원자 값으로 갖는 2차원의 테이블 표현
- 논리적 구조이므로 다양한 정렬 기준을 통하여 릴레이션 표현 가능
릴레이션 스키마 - 구조
- 데이터를 넣을 수 있도록 하는 릴레이션 틀
- 릴레이션 이름, 속성(열) 이름, 속성값의 도메인 정의
속성(Attribute)
- 데이터베이스를 구성하는 가장 작은 논리적 단위
- 릴레이션의 열 (Column)
- 개체(Entity의 특성, 상태 등 기술
- 파일 구조의 데 이터 필드에 해당
- 속성 = 열 = column = 필드
- 속성: 학번, 이름, 학과, 학년
도메인(Domain)
- 릴레이션에서 하나의 속성이 취할 수 있는 같은 타입의 원자 값을의 집합
ex)
[학년] 속성: 도메인 1~4 (또는 1~5)
- 실제 속성값이 나타날 때 속성값의 적법 여부를 검사하는데 이용
튜플(Tuple)
- 릴레이션의 행 / row / 레코드
- 릴레이션 내의 모든 튜플은 서로 중복되면 안됨
릴레이션의 특징
- 속성은 단일 값을 가진다
- 각 속성의 값은 도메인에 정의된 값만을 가지면 모두 단일 값이어야 함
- 한 속성은 2개 이상의 값을 가질 수 없음
- 속성은 서로 다른 이름을 가짐
- 한 속성의 값은 모두 같은 도메인 값을 가짐
- 속성의 순서는 상관 없음
- 릴레이션 내의 중복된 튜플은 허용하지 않음
- 기본키의 값이 동일해서는 안됨
- 튜플의 순서는 상관 없음
관계 데이터 제약
제약 (Constraint)
Key, 무결성 제약
- 데이터베이스에 저장되는 데이터에 대한 규칙
- 데이터베이스의 기본 구조를 유지하고 현실세계에서 데이터가 갖는 의미를 보다 정확하게 표현
- 데이터의 오류를 방지하기 위한 중요한 수단
키(key)
- 릴레이션을 구성하는 각 튜플(행)을 속성(열) 값에 의해 유일하게 식별할 수 있게 해주는 속성 또는 속성의 집합
- 릴레이션은 중복된 튜플을 허용하지 않기 때문에 각 튜플에 포함된 속성들 중 어느 하나(혹은 하나 이상)는 값이 달라야 함
키의 종류
- 기본키(주 키, Primary Key,
PK
)- 한 릴레이션에서 모든 튜플을 유일하게 구별할 수 있는 속성
- NULL 값은 허용하지 않음
- NULL: 빈값. 0도, space도 아님
- 중복될 수 없음
- 키 값의 변동이 일어나지 않아야 함
ex1)
학생(학생, 성명, 학과, 학년, ...)
기본키: 학번
ex2)
학생(학번, 주민번호, 성명, 학과, 학년, ...)
기본키: 학번(하나만 선택)
그 외의 기본키: 주민번호(선택 가능하지만 학생 테이블인 경우 학번을 주로 사용)
주민번호: 후보키, 대체키
- 외래키 (Foreign Key,
FK
)- 다른 릴레이션(테이블)의 기본 키를 참조하는 속성
- 현재 테이블에서는 기본키가 아닌 기본 속성이지만, 원래 속한 테이블에서는 기본키인 속성
- 참조하고(외래키), 참조되는(기본키) 양쪽 릴레이션의 도메인은 동일
- 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경
- NULL 값과 중복값 허용(가능하면 NULL값 안되게 함: NOT NULL)
ex1)
학과(학과코드(PK), 학과명, ...)
학생(학번(PK), 성명, 학과코드(FK))
- 후보키
- 대체키
- 복합키
- 여러 개의 속성을 묶어서 기본키로 사용하는 키
'프로그래밍 언어 > 데이터베이스' 카테고리의 다른 글
데이터베이스 Day5 - SQL에서의 각종 함수 (0) | 2021.11.24 |
---|---|
데이터베이스 Day3 - 데이터 조작어(DML) (0) | 2021.11.22 |
데이터베이스 Day2 - 데이터 정의어(DDL) (0) | 2021.11.19 |
데이터베이스 Day1 - MySQL 실행 (0) | 2021.11.19 |
데이터베이스 Day1 - MySQL 설치 (0) | 2021.11.19 |