[정보처리기사] 데이터베이스

SEUNGJUN·2024년 2월 5일
post-thumbnail

1. 데이터베이스 기본 개념

학생 테이블 (Students)

학생ID이름나이성별학번주민등록번호
1홍길동20남성20240101001022-**
2김영희22여성20240102000230-**
3이철수22남성20240103000512-**

강의 테이블 (Courses)

강의ID강의명담당교수
101수학김선생
102영어이선생
103과학박선생

수강신청 테이블 (Enrollments)

수강ID학생ID강의ID성적
11101A
21102B
32103A+
43101C
  1. 데이터 베이스 (Database)

    • 학생 정보, 강의 정보, 수강신청 정보와 같은 데이터 등이 포함되어 있는 테이블들의 집합 장소를 데이터 베이스라 한다.
  2. 릴레이션(Relation)

    • 학생 테이블, 강의 테이블, 성적 테이블 등의 데이터를 저장하는 구조.
  3. 튜플, 레코드 (Tuple, Record)

    • 예시로 수강신청 테이블에서 각 행은 한 학생의 한 강의 수강 신청 정보를 나타내고 있으며, 이를 튜플이라고 한다.
  4. 속성, 필드 (Attribute, Field)

    • 수강신청 테이블의 각열은 특정 정보를 담당하는 속성입니다. 예를 들어, "성적"열은 해당 수강의 성적을 나타내는 속성이라고 말할수 있다.
  5. 도메인(Domain)

    • 성적 속성의 도메인은 A, B, A+, C 와 같은 성적을 가지고 있는데 속성이 가질수 있는 원자값들의 집합이라고 생각할수 있다.
  6. 카디널리티(Cardinality)

    • 두 테이블 간의 관계에서 하나의 엔터티(레코드)가 다른 엔터티와 어떻게 연결되는지 관계를 말한다.
      • 일대일(1:1): 하나의 엔터티가 다른 엔터티와 일대일로 연결된 경우로, 한 항생이 한개의 주소를 가질 때, 일대일이다.
      • 일대다(1:N): 하나의 엔터티가 다른 엔터티와 일대다로 연결된 경우로, 한 교수가 여러 명의 학생을 지도하는 경우, 교수와 학생 간의 관계는 일대다 이다.
      • 다대다(N:M): 하나의 엔터티가 다른 엔터티와 다대다로 연결된 경우로, 여러 학생이 여러 강의를 수강하는 경우, 학생과 강의 간의 관계는 다대다이다. 이 경우에는 보통 연결 테이블을 사용하여 관계를 나타낸다.
  7. 디그리/차수(Degree)

    • 테이블의 열(Attribute)의 수를 나타낸다.

데이터 베이스 키(Key)

데이터베이스 설계 및 관리에서 중요한 역할을 수행하며, 효율적인 데이터 검색, 관계 정의, 데이터 무결성을 지원한다.

  1. Candidate Key(후보키)

    • 학생 테이블에서는 학생ID, 학번, 주민등록번호가 후보키가 될수 있는데, 유일성과 최소성을 만족하는 키로, 기본키가 될 수 있는 후보로 선정된 키라고 볼수 있다.
  2. Primary Key(기본기)

    • 학생 테이블에서 학생ID, 학번, 주민등록번호 중에서 하나가 기본키로 선택될수가 있는데, 튜플을 유일하게 식별하기 위한 주요한 키로, 후보키 중에 하나가 선택 될수가 있다.
  3. Main Key(메인 키)

    • 메인키는 Primary Key와 동일 개념으로 튜플을 식별하는데 중요한 키를 의미한다.
  4. Alternate Key(대체키)

    • 학생 테이블에서 주민등록번호는 학번이 선택된 경우에 대체키가 될 수 있다. 후보키 중에서 선택되지 않은 나머지 키로, 보조적으로 식별을 위해 사용될수 있는 키다.
  5. Super Key(슈퍼키)

    • 학생 테이블에서 학생ID, 학번, 주민등록번호는 유일하게 식별 할수 있는 슈퍼키 인데, 테이블을 유일하게 식별하기 위한 어떤 키든지를 의미한다. 슈퍼키는 후보키와 기본키를 포함한다.
  6. Foreign Key(외래키)

    • 수강신청 테이블에서 학생ID가 학생 테이블의 학생ID를 참조하는 외래키 이다. 다른 테이블의 기본키를 참조하는 테이블의 어트리뷰트로, 두 테이블 간의 관계를 나타낸다.

여기에서 후보키는 유일성과 최소성을 만족하고, 슈퍼키는 유일성을 만족하는데, 이때 유일성과 최소성은 어떤 의미를 가질까 생각해 볼수 있다.

유일성 (Uniqueness)

유일성은 특정 키나 속성이 데이터 집합에서 고유한 값을 가져야 함을 의미하는데, 각 행이나 튜플을 유일하게 식별할 수 있어야 한다는 것이다. 특히 기본키는 모든 튜플에서 유일한 값을 가져야 한다. 이는 중복 데이터를 방지하고 데이터의 정확정을 유지한다.

최소성(Minimality)

최소성은 키나 속성이 꼭 필요한 최소한의 속성으로 이루어져야 함을 의미한다. 키를 구성하는 속성들 중에서 어느 하나라도 제거할 경우 고유성이 깨지는 것을 허용하지 않는다. 최소성을 지키면서도 필요한 최소한의 속성으로 구성된 키를 선택하는 것이 중요하다.

예시로 학생 테이블에서 (학번, 주민등록번호)가 후보키라고 가정할때, 이 키가 최소성을 만족하려면 두 속성이 함께 사용되어야 한다. 만약에 (학번)만으로도 유일성을 만족한다면, (학번)이 최소성을 가진 키가 된다고 할수 있다.

데이터베이스 관리 시스템(DBMS) SQL 서브 언어

  1. DCL (Data Control Language)
  • 데이터에 대한 접근 권한을 제어하는 명령어

주요 명령어

  • GRANT: 데이터베이스 객체(테이블, 뷰)에 대한 특정 권한을 사용자에게 부여함.
  • REVOKE: 사용자로부터 권한을 회수함.
-- 사용자에게 특정 테이블에 대한 SELECT 권한을 부여
GRANT SELECT ON employees TO user1;

-- 사용자로부터 특정 테이블에 대한 INSERT 권한을 회수
REVOKE INSERT ON employees FROM user1;
  1. DML (Data Manipulation Language)
  • 데이터 조작을 위한 명령어

주요 명령어

  • SELECT: 데이터베이스에서 데이터를 조회하는 명령어.
  • INSERT: 새로운 데이터를 테이블에 추가하는 명령어.
  • UPDATE: 테이블의 기존 데이터를 수정하는 명령어.
  • DELETE: 테이블에서 데이터를 삭제하는 명령어.
-- employees 테이블에서 모든 정보를 조회
SELECT * FROM employees;

-- employees 테이블에 새로운 직원 정보 추가
INSERT INTO employees (employee_id, first_name, last_name) VALUES (101, 'John', 'Doe');

-- employees 테이블에서 조건에 맞는 데이터 수정
UPDATE employees SET salary = 60000 WHERE department_id = 10;

-- employees 테이블에서 조건에 맞는 데이터 삭제
DELETE FROM employees WHERE employee_id = 101;
  1. DDL(Data Definition Language)
  • 데이터베이스 구조를 정의하고 관리하기 위한 명령어

주요 명령어

  • CREATE: 데이터베이스 객체(테이블, 인덱스 등)을 생성하는 명령어.
  • ALTER: 데이터베이스 객체의 구조를 수정하는 명령어.
  • DROP: 데이터베이스 객체를 삭제하는 명령어.
-- employees 테이블 생성
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    salary INT
);

-- employees 테이블에 새로운 열 추가
ALTER TABLE employees ADD COLUMN department_id INT;

-- employees 테이블 삭제
DROP TABLE employees;

트랜젝션(Transaction)

데이터베이스에서 작업의 논리적인 단위를 나타낸다. 트랜젝션은 여러 개의 데이터베이스 연산들을 하나의 논리적인 작업으로 묶어서, 모두 성공적으로 수행될 때만 데이터베이스를 일관성 있는 상태로 유지하도록 하는 개념

ACID 속성

1. 원자성 (Atomicity)

  • 트랜잭션은 모든 연산이 성공적으로 수행되거나 아무런 연산도 수행되지 않은 상태로 유지되어야 한다. 일부 연산만 성공하고 나머지가 실패했다면, 전체 트랙잭션이 롤백되어야 한다.
-- 트랜잭션의 시작
START TRANSACTION;

-- 데이터 조작 작업
UPDATE accounts SET balance = balance - 100 WHERE account_id = 123;  -- 출금
UPDATE accounts SET balance = balance + 100 WHERE account_id = 456;  -- 입금

-- 트랜잭션 종료 및 커밋
COMMIT;

예를들어, 계좌 이체 트랜잭션을 생각해볼수 있다. 이때 보내는 계좌에서 금액을 감소시키는 연산과 받는 계좌에 금액을 증가시키는 연산이 있는데 만약에 어느 한 연산이라도 실패하게 된다면, 트랜잭션이 모두다 롤백이 되어야 한다는 것이다. 보내는 계좌에서 출금 및 받는 계좌의 입금이 동시에 취소된다라고 생각할수 있다.

2. 일관성 (Consistency)

  • 트랜잭션이 시작 전과 종류 후에 데이터베이스는 일관된 상태로 유지되어야 한다. 트랜잭션이 적용된 결과는 일관성을 유지해야 한다.
-- 트랜잭션의 시작
START TRANSACTION;

-- 데이터 조작 작업
UPDATE grades SET score = 90 WHERE student_id = 123;

-- 트랜잭션 종료 및 커밋
COMMIT;

일관성을 유지하는 예시로 학생 성적 업데이트 트랜잭션이 있다. 학생의 성적을 업데이트 할때, 성적은 특정 범위(0 ~ 100) 내에 있어야 한다고 가정하면, 일관성을 유지하기 위해 트랜잭션 시작 전 종료 후 일관된 상태로 유지 되어야 한다.

3. 고립성(Isolation)

  • 여러 트랙잭션이 동시에 수행되더라도, 각 트랜잭션은 다른 트랜잭션에 영향을 주지 않고 독립적으로 수행되는 것처럼 보여야 한다.
-- 트랜잭션 1
START TRANSACTION;
UPDATE grades SET score = 95 WHERE student_id = 123;
COMMIT;

-- 트랜잭션 2 (동시에 실행)
START TRANSACTION;
UPDATE grades SET score = 85 WHERE student_id = 456;
COMMIT;

고립성을 유지하기 위해 각 트랜잭션은 서로에게 영향을 주지 않으며, 각 학생의 성적이 동시에 업데이트되어도 서로간의 간섭이 없어야 한다.

4. 지속성(Durability)

  • 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 저장되어야 한다. 이후 시스템의 장애가 발생하더라도 결과는 유지되어야 한다.

계좌 이체 트랜잭션이 성공적으로 이루어 졌을때 영구적으로 데이터 베이스에 저장이 되어야 한다. 이후에 시스템이 다운되거나 장애가 발생 하더라도 결과는 지속적으로 유지가 되어야한다.

트랜잭션의 구성 요소

  1. 시작 (Begin)

    • 트랜잭션의 시작을 나타냄.
  2. 종료 (End)

    • 트랜잭션의 성공적인 완료를 나타냄
  3. 커밋 (Commit)

    • 트랜잭션이 성공적으로 완료되었으며, 결과를 데이터베이스에 영구적으로 저장함.
  4. 롤백 (Rollback)

    • 트랜잭션이 중간에 실패하면, 트랜잭션이 시작되기 전 상태로 되돌리는 단계.

데이터베이스 병행 제어

데이터 베이스에서 병행 제어(Concurrency Control)는 여러 트랜잭션이 동시에 데이터베이스에 접근할 때 일관성을 유지하고 데이터 손상을 방지하기 위한 기법이다.

1. Locking(락을 이용한 병행 제어)

Ex) 상황: 은행 계좌 데이터베이스에서 두 트랜잭션 A와 B가 같은 계좌에서 동시에 인출 작업을 진행 하려고 한다.

1. Locking 단계

  • A와 B 모두 해당 계좌에 대한 읽기 락을 획득한다.
  • 이때 동시에 여러 트랜잭션이 계좌를 읽을 수 있게 하기 위한 공유 락이다.

2. 인출 작업

  • A가 계좌에서 100원을 인출하고자 할 때, 쓰기 락을 요청 한다.
  • B는 동시에 인출 작업을 수행하려고 하지만, 이미 A가 해당 계좌에 대한 쓰기 락을 획득했으므로 대기함.

3. Lock 해제

  • A가 작업을 마치면 락을 해제한다.
  • B가 대기 중이었던 동시에 계좌에 접근하여 작업을 수행한다.

로킹 단위의 특징

로킹단위로크 수병행성로킹 오버헤드병행성 수준데이터베이스 공유도
커짐감소단순감소낮음감소
감소증가복잡증가높음증가

락을 이용하여 병행 제어를 하게 되면 읽기, 쓰기 트랜잭션 처리할때 서로 충돌을 방지하고 일관성을 유지할수 있다.

2. Timestamp-based Concurrency Control(타임스탬프 병행 제어)

타임스탬프(Timestamp) : 일련의 이벤트나 트랙잭션에 대해 시간 정보를 기록하는데 사용하는 값.

Ex) 상황: 두 트랜잭션 A와 B가 동시에 은행 계좌에서 송금 작업을 수행하려고 한다.

1. 타임스탬프 부여

  • 각 트랜잭션은 시작 시점에 타임스탬프를 부여받는다.

2. 읽기와 쓰기 단계

  • A가 계좌에서 잔액을 읽는다. (A의 타임스탬프는 TA)
  • B가 계좌에서 잔액을 읽는다. (B의 타임스탬프는 TB)
  • A가 계좌에 송금을 하려고 할 때, A의 타임스탬프(TA)가 B의 타임스탬프(TB)보다 작은지 확인한다.

3. 송금 작업

  • A의 타임스탬프가 더 작으므로 A의 작업이 성공적으로 수행된다.

타임스탬프를 이용한 병행 제어는 트랜잭션의 시작 시간을 기반으로 충돌을 방지하게 되므로 일관성이 유지될수 있다.

스키마 (Schema)

데이터베이스에서 데이터 구조, 데이터베이스 객체 간의 관계, 제약 조건 등을 정의하는 데 사용되는 구조적인 틀을 의히한다. 스키마는 데이터베이스의 설계와 관련이 있으며, 데이터베이스에서 사용되는 테이블, 뷰, 인덱스, 프로시저, 트리거 등과 관련된 정보를 포함한다.

스키마 유형

1. 물리적 스키마 (Physical Schema)

  • 데이터를 어떻게 저장할지, 실제로 어떤 디스크 구조를 사용할지에 대한 정보 제공
  • 테이블이나 인덱스의 저장 방식, 클러스터링 등과 관련이 있다.

  • 1. HDD(Hard Disk Drive)
    - 회전하는 디스크 플래터에 자료를 기록하고 읽는 방식.
  • 2. SSD(Solid State Drive)
    - 메모리 칩에 데이터를 저장하고 읽는 방식.
  • 3. RAID(Redundant Array of Independent Disks)
    - 여러 개의 하드 디스크를 조합하여 하나의 논리적인 저장 장치를 만드는 방식
  • 4. SAN(Storage Area Network)
    - 네트워크를 통해 여러 서버가 공유하는 저장 공간. 중앙 집중식으로 데이터를 관리.

2. 논리적 스키마 (Logical Schema)

  • 데이터의 구조, 관계, 제약 조건 등을 논리적으로 정의한다.
  • 테이블 간의 관계, 각 테이블의 속성, 제약 조건 등과 관련 있다.
  • 논리적 스키마는 사용자와 데이터베이스 간의 인터페이스를 정의하며, 데이터베이스에 저장되는 데이터의 논리적인 구조를 설명함.

3. 관계 스키마 (Logical Schema)

  • 관계형 데이터베이스에서 데이터의 구조를 정의하는 개념
  • 데이터베이스의 논리적 설계를 표현하며, 사용자나 응용 프로그램이 데이터에 접근하는 방식을 정의함.

이상 현상

  • 관계형 데이터베이스에서 데이터 조작이나 조회 시 발생하는 문제나 비정상적인 현상을 나타낸다. 주로 데이터의 불일치, 비일관성, 데이터 손실과 관련이 있다.

1. 삽입 이상(Insertion Anomaly)

  • 새로운 데이터를 삽입할 때 원하지 않는 문제가 발생하는 경우. 특정 테이블에 모든 속성 값이 필요한데 일부 값만 입력되면 발생하는 현상으로 예를 들어 학생 수강 테이블에서 특정 학생이 수강하지 않은 강의에 대해 정보를 삽입할 때, 다른 속성들은 빈 값이나 기본값으로 채워지는 경우.

2. 갱신 이상(Update Anomaly)

  • 데이터를 갱신할 때 일부 튜플만 갱신되어 정보가 불일치 하거나 비일관성이 발생하는 경우.
    예로 학생 정보 테이블에서 학생의 주소가 변경되었을 때, 모든 수강신청 테이블과 학생 성적 테이블의 해당 학생의 주소를 일일이 업데이트하지 않으면 정보 불일치 발생.

3. 삭제이상(Deletion Anonaly)

  • 튜플을 삭제할 때 원하지 않는 데이터 손실이 발생하는 경우. 예로 특정 강의를 수강한 모든 학생이 수강신청 테이블에서 삭제되면 해당 강의 정보가 사라져 버리는 경우.

이상 현상은 잘못된 스키마 설계로 릴레이션에 예기치 못한 현상이 발생하는 것이므로 방지하기 위해서는 정규화를 통해 데이터베이스를 설계하는 것이 일반적으로 권장되고 있다.

함수적 종속성(Functional Dependency)

  • 관계형 데이터베이스에서 두 개 이상의 속성(attribute)간의 종속성을 나타내는 개념이다. 어떤 속성의 값이 다른 속성의 값에 종속 되어 있는 경우, 이를 함수적 종속성으로 표현한다.

1. 완전 함수적 종속성 (Fully Functional Dependency)

  • 어떤 속성 집합이 다른 속성에 대해 완전하게 함수적으로 종속된 경우.
    - 학번 -> 이름, 전공, 학년

2. 부분 함수적 종속성(Partial Functional Dependency)

  • 어떤 속성 집합이 일부 다른 속성에 대해 함수적으로 종속된 경우.
    - 학번, 과목코드 -> 성적 ( 학번과 과목코드 둘 다 있을 때만 성적을 결정할수 있음)

3. 이행적 함수적 종속성(Transitive Functional Dependency)

  • 어떤 속성 집합이 다른 속성에 대해 함수적으로 종속되고, 그 다른 속성이 또 다른 속성에 대해 함수적으로 종속된 경우.
    - X -> Y 이고, Y -> Z 이면, X -> Z가 성립된다.

4. 다치 함수적 종속성(Multivalued Dependency)

  • 관계형 데이터베이스에서 테이블의 속성들 간의 복합적인 종속성을 나타낸다. 릴레이션에서 한 속성 값이 변경 될때 다른 속성 값도 따라서 변경 되는 경우
    - 학생과 강의 정보를 저장하는 테이블에서 학번, 강의명 -> 성적

관계 대수

관계 대수는 관계형 데이터베이스에서 데이터를 조작하고 쿼리하는 데 사용되는 형식적인 언어.

1. 선택 (Selection): σ

  • 선택 연산은 특정 조건을 만족하는 튜플을 선택한다.
  • Ex) 학생 테이블에서 나이가 20인 학생을 선택하는 연산
    - σ 나이=20(학생)

2. 투영 (Projection): π

  • 투영 연산은 특정 속성만을 선택하여 새로운 테이블을 만든다.
  • Ex) 학생 테이블에서 학번과 이름만 선택하는 연산
    - π 학번, 이름(학생)

3. 합집합 (Union): ∪

  • 합집합 연산은 두 관계를 결합하여 중복을 제거한 결과를 생성한다.
  • Ex) 학생 테이블과 교수 테이블을 합칠 때.
    - 학생 ∪ 교수

4. 차집합 (Difference): -

  • 차집합 연산은 한 관계에서 다른 관계의 튜플을 제거한다.
  • Ex) 수강 테이블에서 학생 테이블에 있는 학번과 일치하지 않는 튜플을 제거하는 연산
    - 수강 − π 학번(학생)

5. 교집합 (Intersection): ∩

  • 교집합 연산은 두 관계에서 공통된 튜플만을 선택한다.
  • Ex) 과목 A를 수강하는 학생과 과목 B를 수강하는 학생의 교집합.
    - π 학번(σ 과목=’A’(수강)) ∩ π 학번(σ 과목=’B’(수강))

6. 카티션 곱 (Cartesian Product): ×

  • 카티션 곱 연산은 두 관계 간의 모든 가능한 조합을 생성함
  • Ex) 학생 테이블과 과목 테이블의 카티션 곱.
    - 학생 × 과목

무결성(Integrity)

무결성은 데이터베이스의 정확성, 일관성 및 신뢰성을 보장하기 위한 규칙이나 제약 조건을 의미함.

1. 개체 무결정 (Entity Integrity)

  • 이미 이전에 설명한 것처럼, 개체 무결성은 기본키가 테이블에서 항상 유효하고 존재해야 함을 보장함.

2. 참조 무결성 (Referential Integrity)

  • 참조 무결성은 두 테이블 간의 외래키(Foreign Key)관계에서 발생한다. 외래키는 참조하는 테이블의 기본키와 일치하거나 NULL이어야 한다. 이를 통해 참조된 테이블의 무결성을 유지하고, 데이터 간의 일관성을 보장한다.
    - 예시로 학생 테이블에서 강의를 수강하는 경우, 강의 테이블의 강의ID가 외래키로 사용되는 경우, 강의ID 값은 학생 테이블에서 참조되는 강의 테이블의 강의ID 값과 일치하거나 NULL이어야 한다.

3. 도메인 무결성 (Domain Integrity)

  • 도메인 무결성은 각 속성의 데이터 유형, 범위, 형식이 정의된 도메인에 속하는지 확인한다.

4. 키 무결성 (Key Integrity)

  • 키 무결성은 테이블의 키(기본키, 후보키)가 유효하고 중복되지 않아야 한다.

5. 데이터 무결성 (Data Integrity)

  • 데이터 무결성은 데이터베이스에서 저장된 데이터가 정확하고 일관성 있게 유지되어야 한다.

6. 작업 무결성 (Transaction Integrity)

  • 작업 무결성은 트랜잭션 처리 시 데이터베이스의 일관성을 유지하는 것을 의미한다. 트랜잭션 내에서 데이터 베이스 상태가 유지되어야 한다.

스키마 3계층

1. 외부 스키마 (External Schema)

  • 외부 스키마는 사용자 또는 응용 프로그램의 관점에서 데이터베이스를 정의한다. 각 사용자나 응용 프로그램은 자신만의 외부 스키마를 가지며, 이는 사용자가 필요로 하는 데이터의 논리적 구조를 정의한다.
External Schema (Student View):
---------------------------------------
| StudentID | FirstName | LastName |
---------------------------------------
| 1         | John      | Doe      |
| 2         | Jane      | Smith    |
| 3         | Mark      | Johnson  |

예를 들어, 학사 관리 시스템의 외부 스키마는 학생들에게 필요한 정보를 중심으로 정의가 될수 있다. 이런 외부 스키마는 실제로 데이터베이스에 어떤 식으로 저장되는지에 대한 세부 정보가 공개될 필요 없으니, 사용자가 필요로 하는 정보만 제공함.

2. 개념 스키마 (Conceptual Schema)

  • 개념 스키마는 데이터베이스의 전체의 논리적 구조를 정의한다. 개념 스키마는 모든 외부 스키마의 통합된 뷰를 제공하며, 데이터베이스 전체에 대한 논리적 구조를 정의하는 역할을 한다.
Conceptual Schema:
-----------------------
| Students | Courses |
| Enrollments |
-----------------------

예를 들어, 학사 관리 시스템의 개념 스키마는 학생, 강의, 수강신청 등의 주요 엔터티와 관계를 정의한다. 개념 스키마는 외부 스키마와 달리 구체적인 사용자 또는 응용 프로그램에 의존하지 않고, 데이터베이스의 전체 구조를 통합적으로 정의한다. 쉽게 말해 외부 스키마의

3. 내부 스키마 (Internal Schema)

  • 내부 스키마는 데이터를 물리적으로 어떻게 저장하는지에 대한 세부 정보를 정의한다. 데이터베이스 시스템이 사용하는 저장 구조, 인뎅싱 클러스터링을 다룬다.
Internal Schema (InnoDB Storage):
--------------------------------------
| Tables, Indexing, Clustering, etc. |
--------------------------------------

내부 스키마는 주로 데이터베이스 관리 시스템(DBMS)의 입장에서 이해되며, 물리적 구조와 성능 최적화를 담당한다.

전반적으로 봤을때, 외부 스키마는 사용자나 응용프로그램의 입장에서 데이터베이스를 바라보는 뷰를 정의하고, 개념 스키마는 전체적인 논리적 구조를 정의하며, 내부 스키마는 물리적인 세부 사항을 다룬다.

2. 데이터베이스 설계 단계

1. 요구사항 수집 및 분석

  • 사용자 및 시스템의 요구사항을 파악하고 문제를 정의함

예를 들어 학사 관리 시스템을 구축하기 위해 사용자와의 인터뷰를 통해 다양한 요구사항을 수집합니다. 학생 정보, 강의 계획, 성적 등을 포함한 데이터와 해당 데이터를 다루는 기능을 파악한다.

2. 개념적 설계

  • 전체적인 데이터 모델을 개발하여 시스템의 논리적 구조를 정의함

학생 엔터티와 강의 엔터티 간의 관계를 ERD로 표한한다. 학생은 여러 개의 강의를 수강할 수 있고, 강의는 여러 학생에 의해 수강될 수 있다.

3. 논리적 설계

  • 개념적 설계를 논리적 데이터 모델로 변환하고 세부적인 데이터 구조를 정의함

학생 테이블과 강의 테이블을 생성하고, 강의를 수강한 학생 정보를 나타내기 위해 수강 테이블을 추가한다. 각 테이블의 속성을 정의하고, 정규화를 통해 중복을 최소화 한다.

4. 물리적 설계

  • 논리적 설계를 바탕으로 실제 데이터베이스 구현을 위한 물리적 구조를 정의함

각 테이블의 컬럼과 데이터 타입을 정의하고, 각 테이블에 대한 인덱스를 생성한다. 데이터베이스 성능을 고려하여 클러스터링이나 파티셔닝을 결정하고, 보안 정책에 따라 사용자 권한을 부여함.

5. 구현 및 테스트

  • 물리적 설계를 기반으로 데이터베이스를 생성하고 테스트함

SQL을 사용하여 정의한 테이블과 인덱스를 생성하고, 테스트 데이터를 입력하여 시스템을 구현한다. 다양한 시나리오에 대해 테스트를 수행하여 데이터베이스가 예상대로 동작하는지 확인.

6. 운영 및 유지보수

  • 데이터 베이스가 운영 환경에서 원활하게 동작하도록 지속적인 관리 및 개선을 수행함

운영 환경에 데이터베이스를 배포하고, 백업 및 복구 계획을 수립한다. 성능 모니터링을 통해 시스템의 성능을 지속적으로 관찰하고, 필요에 따라 인덱스 재조정 및 최적화 작업을 수행함.

3. 정규화 (도부이결다조)

데이터베이스 설계 과정에서 중복을 최소화 하고 데이터의 일관성을 유지하기 위한 프로세스로, 일반적으로 1NF(제 1정규형)부터 5NF(제 5정규형)까지의 단계로 나누어 진다.

1. 제 1정규형 (1NF)

  • (도)메인이 원자값
  • 각 열은 원자 값(Atomic Value)만을 가지며, 모든 속성 값은 동일한 데이터 형식을 가져야 한다.
학번과목
101수학,영어,과학
102역사,지리

1NF 변환

학번과목
101수학
101영어
101과학
102역사
102지리

2. 제 2정규형 (2NF)

  • (부)분적 함수 종속 제거
  • 테이블이 1NF이면서, 모든 비주요 속성이 주요 속성에 완전 함수 종속이 되어야 한다. 즉, 기본키의 일부가 아닌 다른 속성들은 기본키 전체에 종속 되어야 한다.

- 강의 정보 테이블 -

강의 ID학생 ID강의명성적
1101수학A
2101영어B
2102역사A+

기본키는 {강의ID, 학생ID}이고, 강의명은 강의ID에만 종속되므로 2NF가 아니다.

2NF 변환

- 강의 테이블 -

강의 ID강의명
1수학
2영어
2역사

- 성적 테이블 -

강의 ID학생 ID성적
1101A
2101B
2102A+

3. 제 3정규형 (3NF)

  • (이)행적 함수 종속 제거
  • 테이블이 2NF이면서, 이행적 종속이 없어야 한다.

- 교수 정보 테이블 -

학과교수명전공
컴퓨터공학김교수데이터베이스
전자공학박교수회로이론

학과는 교수명에 종속되지만 교수명에만 종속되므로 이행적 종속이 존재한다.

3NF 변환

- 학과 테이블 -

학과교수명
컴퓨터공학김교수
전자공학박교수

- 전공 테이블 -

교수명전공
김교수데이터베이스
박교수회로이론

4. BCNF (Boyce-Codd Normal Form)

  • (결)정자이면서 후보키가 아닌 것 제거
  • 테이블이 3NF이면서, 모든 결정자가 후보키여야 한다.

5. 제 4 정규형 (4NF)

  • (다)치 종속 제거
  • 다치 종속 : 하나의 테이블에서 한 속성 집합이 다른 속성 집합에 대해 독립적이지 않고 종속적인 경우.

Ex) 다대다(N:M) 관계를 가지는 테이블

- 학생 강의 테이블(Students_Courses) -

학생ID강의명
1수학, 영어
2역사, 과학

이 테이블에는 학생ID가 강의명에 다치 종속적인 관계가 있습니다. 한 학생이 여러 강의를 수강하고, 한 강의도 여러 학생이 수강할수 있다.

4NF변환

- 학생 테이블(Students) -

학생ID이름
1홍길동
2하니

- 강의 테이블(Courses) -

강의ID강의명
1수학
2영어
3역사
4과학

- 강의신청 테이블(Enrollments) -

학생ID강의ID
11
22
33
44

4NF에서는 학생 강의 테이블을 학생 테이블과 강의 테이블로 분해하여 각 테이블 간의 중복을 최소화하고 다치 종속을 제거합니다.

5. 제 5 정규형 (5NF)

  • (조)인 종속성 이용
  • 조인 종속성은 테이블간의 조인이나 결합에 의해 비로소 의미가 부여되는 상황으로 5NF에서는 이러한 조인 종속성을 이용해서 테이블을 분해한다.

- 강의 테이블(Courses) -

강의ID강의명
1수학
2영어

- 교재 테이블(TextBooks) -

교재ID교재명
1산업수학
2기하학
3영어회화
4문법

- 강의-교재 조인 테이블(Courses_Textbooks_Relation) -

강의ID교재ID
11
12
23
24

여기서 5NF에서는 조인 종속성을 강조하고, 강의 테이블과 교재 테이블을 조인을 통해 필요한 정보를 얻을수 있어야 한다. 즉, 강의와 교재의 조합이 의미를 갖도록 하는 것이 중요하다.

예를 들어서 우리가 수학 강의에 어떤 교재들이 사용되었는지 알고 싶다면, 다음과 같은 SQL 쿼리를 사용해 볼수 있다.

SELECT Courses.CourseName, Textbooks.TextbookName
FROM Courses
JOIN Courses_Textbooks_Relation ON Courses.CourseID = Courses_Textbooks_Relation.CourseID
JOIN Textbooks ON Courses_Textbooks_Relation.TextbookID = Textbooks.TextbookID
WHERE Courses.CourseName = '수학';

이 쿼리는 강의 테이블과 교재 테이블 간의 조인을 통해서 수학강의에 사용된 교재들을 얻어 올수가 있다. 5NF에서는 이러한 조인 연산을 활용하여 필요한 정보를 얻을수 있도록 테이블을 설계한다.

profile
RECORD DEVELOPER

0개의 댓글