데이터베이스(DB) 기초
[ 정보 환경 ]
- 데이터 : 실세계에서 관찰 또는 측정된 사실 또는 값
- 정보 : 상황에 따라 적절한 결정을 할 수 있게하는 지식
- 데이터베이스(DB) : 한 조직의 여러 응용 프로그램들이 공유하여 사용하는 통합하고 저장된 운영 데이터의 집합
- 데이터베이스 관리 시스템(DBMS) : 데이터베이스를 사용할 수 있게 하는 소프트웨어
데이터베이스 조건
- 통합된 데이터
- 최소의 중복
- 통제된 중복
- 저장 데이터
- 컴퓨터가 접근할 수 있는 매체에 저장되어야 함
- 운영 데이터
- 조직의 업무를 위한 데이터
- 공용 데이터
- 조직의 여러 사람들과 응용 프로그램이 공유하여 사용
데이터베이스 특성
- 온라인 접근성
- 질의에 대한 온라인 실시간 응답
- 계속적인 변화
- 지속적으로 데이터 삽입, 갱신, 삭제
- 동시 공용
- 여러 사용자가 동시에 데이터를 접근할 수 있음
- 내용에 의한 참조
- 데이터의 조건 또는 특성만 알려주면 그것을 접근이 가능
- 데이터의 주소 또는 위치를 알 필요는 없어야 함
데이터 구성
- 개체
- 현실 세계의 개념 또는 정보의 단위 (ex. 사람, 학생, 교수, 강의실 등)
- 속성 들로 구성
- 관계
- 개체(집합)들 간의 관계
데이터베이스 구조
- 논리적 구조
- 일반 사용자 또는 응용 프로그래머 입장의 데이터베이스 구조
- 관계형 데이터베이스의 경우 레코드들로 이루어진 테이블
- 물리적 구조
- 저장 장치에 기록되는 물리적인 배치 구조
- ex. 디스크 블록, 포인터 체인, 인덱스, 오버플로우 등
[ 데이터베이스 관리 시스템 ]
파일을 이용한 데이터 처리의 문제점
- 데이터 종속성
- 파일의 내부 구조에 응용 프로그램이 영향을 받음
- 데이터 중복성
- 동일한 내용의 데이터가 중복해서 관리
- 데이터 중복으로 인한 문제점
- 데이터 일관성 상실
- 보안성 취약
- 경제성 취약
- 데이터 무결성 취약
데이터베이스 관리시스템
- DBMS 필수 기능
- 데이터 정의 기능
- 사용할 데이터의 구조를 정의할 수 있어야 함
- 데이터 조작 기능
- 데이터의 검색, 삽입, 삭제, 갱신
- 데이터 제어 기능
- 데이터 무결성 유지 기능
- 권한과 보안 기능
- 동시 사용에 따른 병행 제어 기능
- 데이터베이스 관리시스템 (DBMS) 장단점
- 장점
- 데이터 중복 최소화
- 데이터의 공유 사용
- 데이터 무결성 유지
- 데이터의 보안 보장
- 조직 내 데이터의 표준화
- 데이터 요구의 조정
- 단점
- 운영비 증대
- 특정 응용 프로그램의 복잡화
- 복잡한 백업과 회복
- 시스템 취약성 ( DBMS 장애는 곧 업무 중단 )
데이터 독립성
- 데이터베이스의 논리적 또는 물리적 구조가 변경되더라도 응용 프로그램이 영향을 받지 않게함
- 논리적 데이터 독립성
- 물리적 데이터 독립성
- 각 데이터 구조간에 사상 기능이 필요
[ 데이터베이스 시스템의 구성 ]
데이터베이스 시스템
- 데이터베이스 시스템의 구성요소
- 데이터베이스 (DB) ( 스키마 + 실제 데이터 )
- 데이터베이스 관리시스템 (DBMS)
- 데이터베이스 언어 (DB Language)
- 데이터베이스 사용자 (User)
- 데이터베이스 관리자 (DB Adminitrator)
- 데이터베이스 컴퓨터 (H/W)
- 데이터베이스 도구 (Tool/Utility)
스키마 (Schema)
- 데이터베이스 = 스키마 + 데이터
- 스키마
- 데이터베이스 내의 데이터의 구조, 관계, 제약조건에 대한 명세
- View에 따라 스키마는 달리 보여질 수 있음
- 응용 프로그램 관점
- 조직(기관) 전체의 관점
- 물리적 저장 장치 수준의 관점
- 스키마 구조 (3단계)
- 외부 스키마 ( = 서브 스키마 )
- 개개의 사용자 또는 응용 프로그램 수준의 스키마
- 개념 스키마
- 조직 전체 수준의 스키마
- 외부 스키마들의 통합
- 내부 스키마
- 개념 스키마의 저장 구조를 정의
시스템 카탈로그
- 스카마 정보, 사상 정보 등을 저장한 시스템 데이터베이스 ( = 데이터 사전 )
- 데이터베이스 시스템이 사용하는 데이터를 유지하는 시스템용 데이터베이스
- 메타 데이터를 유지
- 일반 사용자도 접근 가능
- 데이터 디렉토리
- 시스템 카탈로그를 접근하기 위한 정보
- 사용자 접근 불가능
- 시스템만 접근 가능
데이터 언어
- 데이터 정의어 (Data Definition Language)
- 데이터베이스를 정의하는 용도
- 데이터 조작어 (Data Manipulation Language)
- 데이터의 추가, 조회, 갱신, 삭제 용도
- 데이터 제어어 (Data Control Language)
- 데이터의 보안, 무결성, 병행제어, 회복을 위한 언어
데이터베이스 도구
- 대량 적재 도구
- Import / Export Tool
- 백업 도구
- 파일 재조직 도구
- 성능 모니터링 도구
[ 관계 데이터베이스 ]
- 릴레이션 = 릴레이션 스키마 + 릴레이션 인스턴스
- 릴레이션 스키마
- 속성들의 집합으로 릴레이션의 논리적 구조
- 릴레이션 스킴 또는 릴레이션 내포이라고도 함
- 시간에 따라 변하지 않음
- 릴레이션 인스턴스
- 일정 시점에서의 투플(Tuple)들의 집합
- 시간에 따라 변함
- 투플
- 속성에 해당하는 데이터의 모임
- 속성
- 단순 속성
- 단일값
- 복합 속성
- 단순 도메인의 결합으로 이루어진 속성 ( ex. DATA는 YEAR, MONTH, DAY 결합 )
- 일반적으로 하나의 속성값으로 취급
- 속성의 값은 분해할 수 없는 원자값
- 도메인
- 속성이 취할 수 있는 원자값들의 집합
릴레이션의 수학적 의미
- 릴레이션은 도메인 순서쌍 집합의 부분 집합
- 릴레이션의 차수 (Degree)
- 릴레이션을 이루는 속성의 개수
- 카디널러티 (Cardinality)
- 릴레이션에 포함된 투플의 개수 ( 인스턴스의 개수 )
널 (Null) 값
- 정보의 부재를 나타내는 특수한 값
- 아직 알려지지 않은 값
- 값이 있지만 아직 모르는 값
- 공백(Blank) 또는 영(Zero)와는 다름
릴레이션 특성
- 투플의 상이성
- 릴레이션에 포함된 투플은 모두 상의
- 모든 속성의 값이 동일한 투플이 존재해서는 않됨
- 투플의 무순서성
- 릴레이션 내의 투플들 간에는 순서가 없음
- 속성의 무순서성
- 릴레이션 내의 속성들간에는 순서가 없음
- 속성의 원자성
- 모든 속성의 값은 원자값
- 관계 데이터 모델은 정규화 릴레이션만을 대상으로 함
데이터베이스 키 (Key)
- 키 (Key)
- 릴레이션 내의 투플을 항상 유일하게 식별할 수 있는 속성들의 집합
- = 투플 식별자
- 후보키 (Candidate Key)
- 다음 조건을 모두 만족하는 키
- 유일성
- 최소성 ( 하나의 속성이라도 제외하면 키가 되지 못함 )
- 모든 릴레이션은 적어도 하나의 후보키를 갖음
- 수퍼키 (Super Key)
- 유일성은 만족하나 최소성은 만족하지 못하는 키
- 기본키 (Primary Key, PK)
- 후보키들 중에서 설계자가 특별히 지정한 키
- Null 값을 가질 수 없음
- 데이터 접근 방법과 관련하여 중요한 의미를 가짐
- 대체키 (Alternate Key)
- 기본키로 지정되지 않은 후보키
무결성 제약
- 개체 무결성 제약
- 기본키에 해당하는 속성은 Null 값이 될 수 없음
- 참조 무결성 제약
- 참조할 수 없는 외래키 (FK) 값을 가져서는 안됨
- 참조 릴레이션의 외래키 값은 Null 또는 반드시 피참조 릴레이션 기본키로 존재하는 값이어야 함
[ 관계 대수와 관계 해석 ]
- 관계 대수 ( 절차 언어 )
- 릴레이션에 대한 연산의 결과는 릴레이션
- 연산자의 종류
- 일반 집합 연산자 ( 합집합, 교집합, 차집합, 카티션 프로덕트 )
- 순수 관계 연산자 ( 실렉트, 프로젝트, 조인, 디비전 )
- 관계 해석 ( 비절차 언어 )
- = 투플 관례 해석
- 투플 단위의 연산을 나타내는 관계해석식으로 질의문 표현
- 기능적으로는 관계 대수와 동등
- 비절차적 특성 ↔ 관계대수는 절차적
- 도메인 관계 해석
- = 도메인 해석
- 질의문을 도메인 해석식으로 나타냄
- 도메인 변수를 사용하여 해석식 표현
- 관계 해석 → 투플 변수 사용
[ SQL ]
- 테이블(릴레이션) 생성 : create table <테이블 이름> ( 컬럼 자료형 );
- 테이블 삭제 : drop table <테이블 이름>;
- 데이터 삽입 : insert into <테이블 이름> values ( 컬럼값 );
- 데이터 검색 : selext * from <테이블 이름> where <조건식>
데이터 조작언어 (DML)
- 데이터 조작을 위해서는 CRUD 연산이 가능해야 함
- 데이터의 생성 (Create)
- 읽기, 조회, 검색 (Read)
- 갱신 (Update)
- 삭제 (Delete)
- SQL의 DML은 insert, select, update, delete 명령문에 해당
명령어
- insert 명령
- 테이블에 레코드를 컬럼 순서대로 삽입
- insert into <테이블 이름> values ( … )
- 컬럼 명을 지정하여 삽입
- insert inro <테이블 이름>(<컬럼명>) values (<컬럼명>)
- select 결과 삽입
- insert into <테이블 이름> select 문
- update 명령
- update <테이블 이름> set <컬럼명=컬럼값> [where 조건식]
- delete 명령
- 테이블 내의 행을 삭제하고 테이블 정의는 유지
- 테이블 내의 모든 행 삭제
- delete <테이블 이름>
- 조건에 해당하는 행들만 삭제
- delete <테이블 이름> where 조건식
- commit / rollbak 명령
- commit
- 트랜잭션 커밋
- 이전 커밋시점부터 현재 커밋 명령 실행 시점까지의 변경 내역을 디스크에 기록
- rollback
- 이전 커밋시점부터 현재 롤백 명령 실행 시점까지의 변경 내역을 모두 취소
- 서버 또는 클라이언트 프로그램이 비정상 종료되면 현재까지의 작업 내용은 자동적으로 롤백
- DDL 명령 (create, alter, drop 등)과 DCL 명령 (grant, revoke 등)은 그 자체가 commit 명령을 포함
- DDL, DCL 명령의 실행 결과, 이전의 갱신 내역은 취소 불가
- commit, rollback = DCL 명령 ( NOT DML )
- select 명령
- 단일 테이블에 대한 검색
- select [컬럼] 또는 * from <테이블명> [where 조건식]
- where 조건식
- where 조건식 [ and | or 조건식 ]*
- select distinct 명령
- 중복된 레코드는 한번만 출력
- select distinct [컬럼] 또는 * from <테이블명> [where 조건식]
- order by 구문
- select 결과를 정렬하여 출력
- asc (오름차순, 디폴트)
- dsc (내림차순)
- select * from <테이블 명> order by [<컬럼> [ asc | dsc ]]*
- like 연산자
- 문자열 패턴 검색
- % : 임의의 길이 및 임의의 문자 의미
- _ : 단일한 임의의 문자 의미
- in 연산자
- 주어진 값들에 포함되는 것만을 검색
- ex. select * from STUDENT where year in (1, 2);
- between 연산자
- 값의 범위에 따른 검색
- ex. select * from STUDENT where year between 1 and 3
- alias
- 테이블 또는 컬럼의 이름을 주어진 이름으로 지정
- ex. select sno as 학번, sname as name from STUDENT
- group by 절
- 컬럼값이 같은 것들을 묶어 집계함수를 적용
- 사용 예시 1 : 학과별로 개설된 과목의 개수를 구하라
- select dept, count(*) as 과목수from COURSE group by dept;
- 사용 예시 2 : 과목별로 기말고사의 평균을 구하라
- select cno, avg(finterm) as 기말평균from ENROL group by cno;
- having 절
- 그룹에 대해 조건식을 적용
- group by 절에 없는 경우에도 전체 테이블이 대상
- 사용 예시 : 3명이상 수강하는 과목의 기말평균을 계산하라
- select cno, avg(finterm) as 기말평균 from ENROL group by cno having count(*) >= 3;
'Memo' 카테고리의 다른 글
pypy3 Install (0) | 2020.12.13 |
---|---|
Hyperledger Indy SDK Build (삽질중) (0) | 2020.12.01 |
JEB java.lang.NullPointerException 오류 해결 방법 (0) | 2020.07.19 |
Git 사용법 (0) | 2020.06.21 |
코드 작성 기초 (Basic Coding) (0) | 2020.06.02 |