데이터베이스 개론

avatar
2025.01.05
·
19 min read

2715

Ch1. 데이터베이스 개념 및 특징

DB 및 DB 관리 시스템

  • 데이터는 객관적 사실이라는 존재적 특성을 가짐

  • 데이터는 추론, 예측, 전망, 추정을 위한 근거로 기능하는 당위적 특성을 가지고 있음

  • 정량적 데이터 / 정성적 데이터로 나뉨

DB

  • 논리적으로 연관된 데이터를 모아 일정한 형태로 저장해 놓은 것

  • 중복 데이터를 최소화해 조직의 목적에 맞게 관리한 것

  • ISOS

    • Integrated Data

    • Stored Data

    • Operational Data

    • Shared Data

DB 시스템 특징

  • R1C3

    • 실시간 접근성(Real Time Accessibility): 실시간 응답

    • 지속적인 변화(Continuouse Evolution): 삽입,삭제,수정을 해 항상 최신의 데이터를 동적 유지

    • 동시 공유(Concurrent Sharing): 목적이 서로 다른 여러 사용자가 동시에 원하는 데이터 공유

    • 내용에 의한 참조(Content Regerence): 사용자가 요구하는 데이터 내용을 참조

  • 파일 시스템 - 중복저장의 문제

    • 데이터를 파일로 관리해 생성, 삭제, 수정, 검색

    • 응용 프로그램마다 필요한 데이터를 별도의 파일로 생성 및 관리

  • DBMS

    • 조직에 필요한 데이터를 관리하는 시스템

  • 주요 기능

    • 데이터 정의: 구조를 정의하거나 수정 기능

    • 데이터 조작: 데이터 삽입, 삭제, 수정, 검색 기능

    • 데이터 제어: 데이터 접근 제어 및 안전하게 유지

Ch2. 데이터베이스 개론

01. 데이터베이스 유형 및 특징

1. 계층형 데이터베이스

  • 데이터가 트리 구조로 구성

  • 부모-자식 관계 정보 표현

  • 부모 레코드는 여러 자식 레코드 소유, 자식은 단하나의 부모 레코드만 소유

  • 일대일, 일대다 관계가 무너지면 변경이 어려움

  • 데이터 중복이 발생하기 쉬움

  • 거의 사용하지 않지만, XML 문서, 파일 시스템 등에서 사용

2. 네트워크형 데이터베이스

  • 노드와 집합구조로 표현

  • 노드는 네트워크 상에 있으며 대등한 관계

  • 한 쌍의 노드에서 하나를 owner, 다른 하나는 member로 표현

  • 종속성 문제가 발생하기 쉬움

3. 키-값 데이터베이스

  • 레코드를 검색하기 위해 키 사용

  • 데이터 중복이 발생하며 비정형 데이터 저장에 적합

  • 스키마 없이 작동, 데이터 구조를 미리 정의할 필요가 없음

  • 키-값데이터베이스가 NoSQL의 한 종류인 것

    • Key-value 제외에도 Document, Column, Graph 등이 있다.

4. 관계형 데이터베이스

  • 가장 많이 사용되는 DB

  • 데이터가 하나 이상의 열과 행의 테이블에 저장

    • column = field = attribute

    • row = tuple = record

  • 사전 정의된 관계로 데이터를 구성

  • 정형 데이터 처리에 유리

  • Entity Relationship Diagram 을 사용

    • 논리 모델, 물리모델 존재

  • MySQL, Oracle, SQL Server, PostgreSQL, SQLite …

→ 결국 데이터의 특성에 따라 DB를 잘 선택하자.

02. 관계형 데이터 모델

  • E.F Codd 박사가 제안

  • 수학의 집합 이론에 근거해 디자인

  • 비절차적인 언어로 원하는 데이터를 쉽게 표현

릴레이션

  • 행과 열로 구성된 테이블

    • relation: 릴레이션 테이블

    • relation data model: 관계 데이터 모델

    • realtional database: 관계 데이터베이스

    • relational algebra: 관계대수

    • realtionship: 테이블과의 관계

key

  • 유일하게 식별한다는 의미

  • 관계 DB에서 키는 릴레이션에서 튜플을 식별할 때 사용

  • 키는 릴레이션을 맺는데 사용

Super key

  • 튜플을 유일하게 식별할 수 있는 하나의 속성 또는 속성 집합

  • (주민번호, 이름) 처럼 포함하지 않아도되는 속성을 포함할 수 있음

  • 키를 구성하는 속성이 많으면 관계 표현이 복잡해진다.

Candidate key

  • 튜플을 유일하게 식별할 수 있는 속성의 최소 집합

  • 효율성 측면에서 매우 중요

  • 슈퍼키에서 없어도되는 속성을 포함하면 후보키가 아니다.

Primary Key

  • 여러 후보키 중에서 하나를 선정해 대표로 삼는 키

  • 후보키가 1개면 그 키를 사용, 여러 개라면 릴레이션 특성을 반영해 하나를 선택

  • 기본키 제약 조건

    • 튜플을 식별할 수 있는 고유한 값을 가져야한다.

    • NULL 값 허용 x

    • 키 값의 변동이 발생하지 않는다.

Surrogate Key(대리키)

  • 기본키가 보안을 요하거나, 여러 개의 속성으로 구성되 복잡하거나 마땅한 기본키가 없을 때 일련번호 같은 가상의 속성을 만들어 기본 키로 사용

  • 임의로 생성하는 값으로 사용자가 직관적으로 그 값의 의미를 알 수 없다.

Alternate Key(대체키)

  • PK(기본키)로 선정되지 않은 후보키

Foreign Key

  • 다른 릴레이션의 기본키를 참조하는 속성

  • 관계 데이터 모델의 특징인 릴레이션 간의 관계를 표현

  • 외래키가 성립하기 위해서는 참조와 참조되는 양쪽 릴레이션의 도메인이 서로 동일해야 한다.

  • 릴레이션의 PK 값이 변경되면 참조하는 외래키 값도 변경

    • 외래키 제약조건

  • 다른 릴레이션이 아닌 자기 자신을 참조할 수도 있다.

무결성 제약조건

  • 데이터 무결성은 데이터의 일관성과 정확성을 지키는 것

  • 데이터는 결함이 없고 질의의 대해 신뢰성 있는 답을 제공해야한다.

  • 일관성을 유지하고 중복을 제거한다.

  • 삽입, 수정, 삭제시 여러가지 제약 조건을 따른다.

  • 튜플에 삽입 가능한 데이터 값을 제한하는 도메인 무결성

    • 릴레이션 내의 튜플 속성이 도메인에 지정된 값만 허용하는 조건

    • 데이터 type, null, not null, default, check

  • 모델의 관계표현을 위한 개체 무결성, 참조 무결성이 있다.

    • 개체 무결성 제약조건: 기본키 제약

      • 기본키를 지정하고 그에 따른 무결성 원칙, NULL을 가질 수 없다.

      • 릴레이션 내에서 오직 한 개의 값만 가질 수 있다.

    • 참조 무결성 제약조건: 외래키 제약

      • 참조되는 키들은 도메인이 동일해야 한다.

      • 자식 릴레이션은 부모 릴레이션의 제약을 받는다.

      • RESTRICTED, CASCADE, DEFAULT, NULL

03. 관계 대수

  • 수학의 대수와 같은 연산을 이용해 질의하는 방법

  • 절차적 언어

    • 하나 이상의 릴레이션에 연산을 수행하여 결과 릴레이션이 나오기까지의 절차를 확인할 수 있는 방법을 제공

  • SQL은 관계 해석을 기반으로 하지만, DBMS 내부에서는 관계대수에 기반을 둔 연산을 수행한다.

  • 관계 DB는 릴레이션이라는 수학적 개념에 기초한다.

  • 집합은 숫자, 문자, 사람 등 객체의 모임이다.

    • 카티션프로덕트의 기초집합이 각각 가질 수 있는 값의 범위를 도메인이라 한다.

    • 집합 연산은 합집합, 교집합, 카티션프로덕트 등이 있다.

관계대수 연산자

  • 수학에서 operator란 피연산자에 적용되는 연산 기호

  • 관계대수 연산자는 2가지 그룹으로 나눌 수 있다.

    • 관계 데이터 모델을 위한 순수 관계 연산(relational operations)

      • selection, projection, join, division, rename

    • 수학적 집합이론에 차용된 일반 집합연산(set operations)

      • 합집합, 교집합, 차집합, 카티션프로덕트

관계연산

  • selection: 릴레이션의 튜플을 추출하기 위한 연산으로 단항 연산자

    • 조건에 맞는 튜플을 반환

    • <속성> = <상수값 or 속성> 형태

  • projection: 릴레이션의 속성을 추출하기 위한 연산으로 단항 연산자

    • 결과 릴레이션의 차수는 대상 릴레이션의 차수보다 작거나 같고, 카디널리티는 동일

    • π<속성> (R), π<이름, 주소, 전화번호> (고객)

집합연산

  • 합집합, 교집합, 차집합, 카티션 프로덕트

  • 카티션 프로덕트(X)

    • 차수는 두 릴레이션의 차수의 합

    • 카디널리티는 두 릴레이션의 곱

조인

  • 두 릴레이션의 공통 속성을 기준으로 속성 값이 같은 튜플을 수평으로 결합

  • 두 릴레이션을 카티션 프로덕트로 연산 후 셀렉션 연산을 한 것과 동일

  • R ⋈c S = σc(R * S), c는 조인 조건

  • 조인을 수행하려면 두 릴레이션의 조인에 참여하는 속성이 서로 동일한 도메인으로 구성

  • 기본 조인 연산: 두 릴레이션 간의 속성 값 비교 (세타 조인, 동등 조인, 자연 조인)

  • 확장된 조인 연산: 두 릴레이션을 조인한 후 한 릴레이션의 튜플만 반환 (세미 조인, 외부 조인)

division

  • 릴레이션의 속성 값의 집합으로 연산 수행

  • 특정 값들을 모두 갖고 있는 튜플을 찾을 때 사용

04. 트랜잭션과 동시성

트랜잭션

  • DBMS에서 데이터를 다루는 논리적 작업 단위

  • 단일 SQL문을 사용하기도 하지만, 여러 개의 SQL문을 순차적으로 수행하기도 한다.

  • 장애시 데이터를 복구하는 단위

  • DB에서 여러 작업이 동시에 같은 데이터를 다룰 때 이 작업을 서로 분리하는 단위

  • 전체가 수행되거나 수행되지 않아야한다.

BEGIN TRANSACTION
	A 계좌에서 10000을 인출 (UPDATE)
	B 계좌에서 10000을 입금 (UPDATE)
COMMIT TRANSACTION
  • DB에 저장된 데이터를 다루며, DBMS에 처리

트랜잭션의 4가지 성질 (ACID)

  1. 원자성(Automicity): 전부 수행되거나 수행되지 않아야한다.

    1. 트랜잭션 중간에 작업을 멈추면 recovery 알고리즘을 이용해 변경 내용 취소

    2. 자의적으로 트랜잭션을 취소하는 명령은 ROLLBACK 사용

  2. 일관성(Consistency): 수행 전이나 수행 후 항상 일관된 상태 유지

    1. 테이블이 생성될 때 CREATE, ALTER문의 무결정 제약조건을 통해 명시

    2. 수행 중 일관성이 유지하지 못하는 상태가 있을 수 있다.

  3. 고립성(Isolation): 수행 중에 다른 트랜잭션이 끼어들어 변경 중인 데이터 값을 훼손하는 일이 없어야 한다.

  4. 지속성(Durability): 성공적으로 완료한 데이터는 영구히 저장

    1. DBMS는 작업한 내용을 로그에 기록하고 문제 발생시 로그 파일을 이용해 복구 작업을 수행

동시성

  • 동시 접근에 대한 일관성을 유지하기 위해 동시접근 알고리즘 사용

  • 갱신 손실 문제

    • 2개의 트랜잭션이 1개의 데이터를 동시에 update할 때 발생

    • DB에서 절대 발생하면 안되는 현상

    • 트랜잭션이 데이터를 읽거나 수정할 때 데이터에 표시하는 잠금 장치

    • 동시 처리시 순서를 제어해 갱신 손실 문제 해결

    • shared lock(읽기), exclusive lock(읽고 쓰기) 각각 LS와 LX로 관리

    • 트랜잭션이 락을 획득받지 못하면 대기 상태 유지

05. 데이터베이스 보안과 권한 관리

권한 관리를 통한 DB 보안

  • 로그인 단계에서 접근 제한 기능 제공

  • 업무의 특성 및 중요도에 따라 특정 사용자만 접근이 필요할 수 있다.

  • 권한에 따라 Read, Write, Execute만 가능 등으로 다양하다.

  • DB 관리자는 계정 관리를 위한 모든 권한을 가진다.

권한 부여

  • GRANT 명령어를 사용해 객체에 대한 사용 권한을 부여

  • GRANT는 모든 속성에 전체 또는 일부 권한 부여

    • UPDATE, SELECT 속성 중 일부만 부여 가능

  • GRANT로 권한을 부여받은 권한은 기본적으로 다른 사용자에게 부여할 수 없다.

    • WITH GRANT OPTION으로 다른 사용자에게 부여 가능

  • 고객 테이블에 대한 삽입과 삭제 권한을 모든 사용자에게 부여

    • grant insert, delete on 고객 to public

  • 고객 테이블 중 등급과 주소에 대한 수정 권한을 kang에게 부여

    • grant update(등급, 주소) on 고객 to kang

  • 고객 테이블에 대한 검색 권한을 with grant option으로 kang에게 부여

    • grant select on 고객 kang with grant option

권한 삭제

  • REVOKE는 부여된 권한을 삭제

  • REVOKE 권한 ON 객체 FROM 사용자 CASCAD | RESTRICT;

  • A → B (부여) → C(부여) 상황에서 B의 권한을 취소하게 되면?

    • C의 권한도 취소하려면 CASCADE 명령을 사용

    • C의 권한을 유지하려면 RESTRICT 명령을 사용

    • REVOKE SELECT ON 고객 FROM Kang CASCADE;

역할(role)

  • DB 객체에 대한 권한을 모아둔 집합

  • 역할 생성

    • GRANT ROLE role_name;

  • 생성된 역할에 권한 부여

    • GRANT 권한 ON 객체 TO role_name;

  • 역할 삭제

    • DROP ROLE role_name;

역할 생성 및 부여

  • 사용자에게 역할 부여

    • GRANT role_name TO 사용자;

  • 부여한 역할 삭제

    • REVOKE role_name FROM 사용자;







- 컬렉션 아티클