데이터베이스 설계시 고려사항
- 데이터의 무결성 유지
- 삽입, 삭제, 갱신 등의 연산 후에도 데이터베이스에 저장된 데이터가 정해진 제약조건을 항상 만족해야 함.
- 데이터의 일관성 유지
- 데이터베이스에 저장된 데이터들 사이나, 특정 질의에 대한 응답이 처음부터 끝까지 항상 변함없이 일정해야 함.
- 데이터의 회복성 유지
- 데이터의 보안성 유지
- 데이터의 효율성 유지
- 응답시간의 단축, 시스템의 생산성, 저장 공간의 최적화 등이 가능해야 함.
- 데이터베이스의 확장성 유지
개념적 설계(정보 모델링, 개념화)
- 스키마 모델링과 트랜잭션 모델링을 병행하여 수행한다.
- 요구 분석 단계에서 나온 결과(요구 조건 명세)를 DBMS에 독립적인 E-R 다이어그램(개체 관계도)으로 작성한다.
- DBMS에 독립적인 개념 스키마를 설계한다.
논리적 설계(데이터 모델링)
- 특정 DBMS가 지원하는 논리적 자료 구조로 변환시키는 과정
- 개념 스키마를 평가 및 정제하고 특정 DBMS에 종속적인 논리적 스키마를 설계하는 단계
- 트랜잭션의 인터페이스를 설계
- 관계형 데이터베이스라면 테이블을 설계하는 단계
물리적 설계(데이터 구조화)
- 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정
- 트랜잭션을 작성한다.
- 반응시간(트랜잭션 수행을 요구한 시점부터 처리 결과를 얻을 때까지의 경과시간), 공간 활용도, 트랜잭션 처리량(단위 시간 동안 데이터베이스 시스템에 의해 처리될 수 있는 트랜잭션의 평균 개수)을 선택적으로 고려할 수 있다.
데이터베이스 설계 순서

관계 데이터베이스의 Relation 구조
- 릴레이션은 데이터들을 표(Table)의 형태로 표현한 것으로, 구조를 나타내는 릴레이션 스키마와 실제 값들인 릴레이션 인스턴스로 구성된다.

키의 개념 및 종류
- 후보키(Candidate Key)
- 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하느 속성들의 부분집합
- 모든 릴레이션은 반드시 하나 이상의 후보키를 가져야 함.
- 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 함. - 기본키(Primary Key)
- 후보키 중에서 선택한 주키
- 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성
- Null 값을 가질 수 없음.
- 기본키로 정의된 속성에는 값이 중복되어 저장될 수 없음. - 대체키(Alternate Key)
- 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들을 말함.
- 보조키라고도 부름. - 슈퍼키(Super Key)
- 슈퍼키로 구성된 속성의 집합과 동일한 값은 나타나지 않는다. -> 유일성은 만족 but, 최소성은 만족X - 외래키(Foreign Key)
- 관계를 맺고 있는 릴레이션 R1, R2에서 릴레이션 R1이 참조하고 있는 릴레이션 R2의 기본키와 같은 R1 릴레이션의 속성
- 외래키는 참조되는 릴레이션의 기본키와 대응되어 릴레이션 간에 참조 관계를 표현하는데 중요한 도구임.
- 외래키로 지정되면 참조 테이블의 기본키에 없는 값은 입력할 수 없음.
무결성(Integrity)
- 개체 무결성
- 릴레이션에서 기본키를 구성하는 속성은 널(NULL) 값이나 중복값을 가질 수 없음. - 참조 무결성
- 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 함. - 도메인 무결성
- 특정 속성의 값이 정의된 도메인에 속한 값이어야 한다는 규정
관계대수
- 관계형 데이터베이스에서 원하는 정보와 그 정보를 어떻게 유도하는가를 기술하는 절차적인 언어
- 릴레이션을 처리하기 위해 연산자와 연산규칙을 제공하는 언어
- 피연산자가 릴레이션, 결과도 릴레이션
- 순수 관계 연산자 : Select(시그마), Project(파이), Join(나비), Division
- 일반 집합 연산자 : UNION(합집합), INTERSECTION(교집합), DIFFERENCE(차집합), Cartesian Product(교차곱)
순수 관계 연산자
- Select
- Project
- 주어진 릴레이션에서 속성 List에 제시된 Attribute 만을 추출하는 연산
- 릴레이션의 열에서 해당하는 Attribute를 추출하는 것이므로 수직 연산자라고도 함. - Join
- Division
관계해석
- 관계해석은 원하는 정보가 무엇이라는 것만 정의하는 비절차적 특성을 지닌다.
- 튜플 관계해석과 도메인 관게해석이 있다.
- 관계해석과 관계대수는 관계 데이터베이스를 처리하는 기능과 능력 면에서 동등하다.
- 질의어로 표현한다.
정규화
- 정규화의 개요
잘못 설계된 관계형 스키마를 더 작은 속성의 세트로 쪼개어 바람직한 스키마로 만들어 가는 과정 - 정규화의 목적
- 데이터 구조의 안정성을 최대화
- 어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 만든다.
- 효과적인 검색 알고리즘을 생성
- 중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지
- 데이터 삽입 시 릴레이션을 재구성할 필요성을 줄인다. - 정규화 과정

Anormaly(이상)의 개념 및 종류
- 정규화를 거치지 않은 데이터베이스 내에 데이터들이 불필요하게 중복되어 릴레이션 조작 시 발생하는 예기치 못한 곤란한 현상
- 삽입, 삭제, 갱신 이상
정규화 과정
- 함수적 종속 관계
ex) <수강> 릴레이션 (학번, 이름, 과목명) -> '학번'이 결정되면, '과목명'에 상관없이 '학번'에 항상 같은 이름이 대응된다.
-> 이럴 경우, '이름'을 '학번'에 함수 종속적이라고 하며, '학번' -> '이름' 과 같이 표기한다. - 이행적 종속 관계
- A -> B이고 B -> C일 때, A -> C를 만족하는 관계
SQL의 분류
- DDL(데이터 정의어)
- SCHEMA, DOMAIN, TABLE, VIEW, INDEX 를 정의하거나 변경 또는 삭제할 때 사용하는 언어
- CREATE, ALTER, DROP - DML(데이터 조작어)
- 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 이용한다.
- SELECT, INSERT, DELETE, UPDATE - DCL(데이터 제어어)
- 데이터의 보안, 무결성, 데이터 회복, 병행수행 제어 등을 정의하는 데 사용하는 언어
- COMMIT, ROLLBACK, GRANT, REVOKE
뷰(View)
- 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본 테이블로부터 유도된 가상 테이블
- 저장장치 내에 물리적으로 존재하지 않지만, 사용자에게 있는 것처럼 간주
- 데이터 보정작업, 처리고정 시험 등 임시적인 작업을 위한 용도
- 기본 테이블과 같은 형태의 구조를 가지며, 조작도 기본 테이블과 거의 같다.
- 가상 테이블이기 때문에, 물리적으로 구현되어 있지 않음.
- 필요한 데이터만 뷰로 정의해서 처리할 수 있기 때문에 관리가 용이하고, 명령문이 간단해진다.
- 조인문의 사용을 최소화, 뷰를 통해서만 데이터에 접근할 수 있기에 뷰에 나타나지 않은 데이터를 안전하게 보호할 수 있음
- 기본 테이블의 기본키를 포함한 속성 집합으로 뷰를 구성해야만 삽입, 삭제, 갱신 연산이 가능하다.
- 정의된 뷰는 다른 뷰의 정의에 기초가 될 수 있다.
- 하나의 뷰를 삭제하면 그 뷰를 기초로 정의된 다른 뷰도 자동으로 삭제된다.
- 뷰의 장점
- 논리적 데이터 독립성을 제공한다
- 동일 데이터에 대해 동시에 여러 사용자의 상이한 응용이나 요구를 지원해준다.
- 사용자의 데이터 관리를 간단하게 해준다.
- 접근 제어를 통한 자동 보안이 된다. - 뷰의 단점
- 독립적인 인덱스를 가질 수 없다.
- 뷰의 정의를 변경할 수 없다.
- 뷰로 구성된 내용에 대한 삽입, 삭제, 갱신 연산에 제약이 따른다. - 뷰 정의문
CREATE VIEW 뷰이름[속성이름[.속성이름])]
AS SELECT문; - 뷰 삭제문
DROP VIEW 뷰이름 {RESTRICT | CASCADE}
RESTRICT | CASCADE
RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 삭제가 취소됨.
시스템 카탈로그
- 시스템 그 자체에 관련이 있는 스키마 및 다양한 객체에 관한 정보를 포함하는 시스템 데이터베이스
- 카탈로그들이 생성되면 자료 사전(Data Dictionary)에 저장되기 때문에 좁은 의미로는 카탈로그를 자료 사전이라고도 한다.
- 카탈로그에 저장된 정보를 메타 데이터라고 한다.
- 카탈로그 자체도 시스템 테이블로 구성되어 있어 일반 이용자도 SQL을 이용하여 내용을 검색해 볼 수 있다.
- INSERT, DELETE, UPDATE문으로 갱신하는 것은 허용하지 않는다.
- DBMS가 스스로 생성하고 유지한다.
- 카탈로그는 사용자가 SQL문을 실행시켜 기본 테이블, 뷰, 인덱스 등에 변화를 주면 시스템이 자동으로 갱신된다.
트랜잭션
- 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미
- 데이터베이스 시스템에서 복구 및 병행 수행 시 처리되는 작업의 논리적 단위
- 하나의 트랜잭션은 Commit되거나 Rollback 된다.
- 트랜잭션은 일반적으로 회복의 단위가 된다.
트랜잭션의 특성
- 원자성: 트랜잭션의 연산은 데이터베이스에 모두 반영되든지 아니면 전혀 반영되지 않아야 함.
- 일관성: 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환함.
- 독립성, 격리성: 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행중에 다른 트랜잭션의 연산이 끼어들 수 없음.
- 영속성, 지속성: 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 함.
회복(Recovery)
- 회복은 트랜잭션들의 처리를 수행하는 도중 장애가 발생하여 데이터베이스가 손상되었을 때 손상도기 이전의 정상 상태로 복구시키는 작업
- 장애의 유형
- 트랜잭션 장애: 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등 트랜잭션 내부의 비정상적인 상황으로 인하여 프로그램 실행이 중지되는 현상
- 시스템 장애: 데이터베이스에 손상을 입히지는 않으나 하드에워 오동작, 소프트웨어의 손상, 교착 상태 등에 의해 모든 트랜잭션의 연속적인 수행에 장애를 주는 현상
- 미디어 장애: 데이터베이스의 일부 또는 전부가 물리적으로 손상된 상태
- 회복 관리기(Recovery Management)
- DBMS의 구성 요소
- 메모리 덤프, 로그를 이용하여 수행
- 트랜잭션 실행이 성공적으로 완료되지 못하면 트랜잭션이 데이터베이스에 만들었던 모든 변화를 취소시키고 트랜잭션 수행 이전의 원래 상태로 복구하는 역할을 담당
- 회복 기법의 종류
- 연기 갱신 기법
- 즉각 갱신 기법
- 그림자 페이지 대체 기법
- 검사점 기법
병행 제어
- 동시에 여러 개의 트랜잭션을 병행 수행시킬 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어하는 것
병행 제어의 문제점
- 갱신 분실: 2개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때, 갱신 결과의 일부가 없어지는 현상
- 비완료 의존성: 하나의 트랜잭션 수행이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상
- 모순성: 두 개의 트랜잭션이 병행 수행될 때, 원치 않는 자료를 이용함으로써 발생하는 문제
- 연쇄 복귀: 병행 수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우 다른 트랜잭션도 함께 Rollback되는 현상
병행 제어의 목적
- 데이터베이스의 공유를 최대화
- 시스템의 활용도를 최대화
- 데이터베이스의 일관성을 유지
- 사용자에 대한 응답 시간을 최소화
로킹(Lock)
- 주요 데이터의 액세스를 상호 배타적으로 하는 것
- 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock을 요청해서 Lock이 허락되어야 만 그 로킹 단위를 액세스할 수 있도록 하는 기법
로킹 단위
- 병행 제어에서 한꺼번에 로킹할 수 있는 데이터 단위
- 데이터베이스, 파일, 레코드, 필드 등은 로킹 단위가 될 수 있다.
- 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만, 병행성 수준이 낮아지고, 로킹 단위가 작으면 로크의 수가 많아 관리하기 복잡하지만 병행성 수준이 높아진다.
보안
- 데이터베이스 보안의 개요
- 무결성과 보안
- 무결성은 권한이 있는 사용자로부터 데이터베이스를 보호하는 것
정확하게 사용할 수 있도록 보장하는 것 - 보안은 권한이 없는 사용자로부터 데이터베이스를 보호하는 것
데이터베이스 사용자들이 데이터베이스를 사용하고자 할 때 언제든지 사용할 수 있도록 보장하는 것
- 무결성은 권한이 있는 사용자로부터 데이터베이스를 보호하는 것
- 암호화 기법
- 개인키 암호 방식 == 대칭 암호 방식 == 단일키 암호화 기법 ex) DES(Data Encryption Standard)
- 암호화/복호화 속도가 빠르며, 알고리즘이 단순하고 파일 크기가 작음
- 사용자의 증가에 따라 관리해야할 키의 수가 상대적으로 많아짐.
- DES는 56Bit의 16개 키를 이용하여 64Bit의 평문 블록을 16회의 암호 계산 단계를 거쳐 64Bit의 암호문을 얻는다. - 공개키 암호 방식 == 비대칭 암호 방식 ex) RSA(Rivest Shamir Adleman)
- 키의 분배가 용이하고, 관리해야 할 키의 개수가 적음
- 암호화/복호화 속도가 느리며, 알고리즘이 복잡하고 파일 크기가 큼.
- 개인키 암호 방식 == 대칭 암호 방식 == 단일키 암호화 기법 ex) DES(Data Encryption Standard)
분산 데이터베이스
- 논리적으로 하나의 시스템에 속하지만 물리적으로는 네트워크를 통해 연결된 여러 개의 컴퓨터 사이트에 분산되어 있는 데이터베이스를 의미한다.
- 자료의 공유성 향상, 분산 제어가 가능, 시스템 성능 향상, 효용성과 융통성이 높음, 신뢰성 및 가용성이 높음
- DBMS가 수행할 기능이 복잡, 데이터베이스 설계가 어려움, 개발 비용이 증가, 처리 비용 증가, 잠재적 오류 발생 증가
- 분산 데이터베이스의 4대 목표
- 위치 투명성
액세스하려는 데이터베이스의 실제 위치를 알 필요 없이 단지 데이터베이스의 논리적인 명칭만으로 액세스할 수 있음. - 중복 투명성
동일 데이터가 여러 곳에 중복되어 있더라도 사용자는 마치 하나의 데이터만 존재하는 것처럼 사용하고, 시스템은 자동으로 여러 자료에 대한 작업을 수행함. - 병행 투명성
분산 데이터베이스와 관련된 다수의 트랜잭션들이 동시에 실현되더라도 그 트랜잭션의 결과는 영향을 받지 않음. - 장애 투명성
트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 불구하고 트랜잭션을 정확하게 처리함.
- 위치 투명성
자료 구조의 분류
- 선형: 선형 리스트(배열), 연결 리스트, 스택, 큐, 데크
- 비선형 구조: 트리, 그래프
데크(Deque)
- 삽입과 삭제가 리스트의 양쪽 끝에서 모두 발생할 수 있는 자료구조
트리(Tree)
- 근 노드(Root Node): 가장 상위의 노드
- 디그리(Degree, 차수): 각 노드에서 뻗어 나온 가지의 수
- 트리의 디그리: 노드들의 디그리 중에서 가장 많은 수
- 단말 노드 = Leaf Node: 자식이 하나도 없는 노드
- 비단말 노드: 자식이 하나라도 있는 노드
- 자식 노드
- 부모 노드
- 형제 노드: 동일한 부모를 갖는 노드
- Level : 근 노드의 Level을 1로 가정
- 깊이: 어떤 Tree에서 노드가 가질 수 있는 최대의 레벨 (루트 노드 1로 가정)
이진 트리의 운행법
- Preorder(전위) 운행 : Root -> L -> R
- Inorder(중위) 운행: L -> Root -> R
- Postorder(후위) 운행: L -> R -> Root
주요 정렬 알고리즘의 이해





이분 탐색
- 탐색 효율이 좋고, 탐색 시간이 적게 소요된다.
- 전체 파일을 두 개의 서브 파일로 분리해 가면서 Key 레코드를 검색하기 때문에 검색회수를 거듭할 떄마다 검색 대상이 되는 데이터의 수가 절반으로 줄어듦.
- 찾고자 하는 Key 값을 파일의 중간 레코드 Key됴 값과 비교하면서 검색한다.
- 중간 레코드 번호 mid = (low + high) / 2
해싱(Hashing)
- Hash Table이라는 기억공간을 할당하고, 해시 함수를 이용하여 레코드 키에 대한 Hash Table 내의 Home Address를 계산한 후 주어진 레코드를 해당 기억장소에 저장하거나 검색 작업을 수행하는 방식
- 검색 속도가 가장 빠르지만, 기억 공간이 많이 요구됨.
- DAM(직접접근방법) 파일을 구성할 때, 해싱이 사용됨
- 삽입, 삭제 작업의 빈도가 많을 때, 유리한 방식

순차 파일 = 순서 파일 -> 자기 테이프(순차 접근)에서 많이 사용
- 입력되는 데이터들을 논리적인 순서에 따라 물리적 연속 공간에 순차적으로 기록
- 급여 관리 등과 같이 변동 사항이 크지 않고 기간별로 일괄 처리를 주로 하는 경우에 적합하다.
- 데이터 검색 시 순차 검색하므로 효율이 낮음.
- 새로운 레코드를 삽입, 삭제, 수정하는 경우 파일 전체를 복사해야 하므로 시간이 많이 소요된다.
색인 순차 파일 (Indexed Sequential File) -> 자기 디스크에서 많이 사용
- 순차 처리와 랜덤 처리가 모두 가능하도록 레코드들을 키 값 순으로 정렬시켜 기록하고, 레코드의 키 항목만을 모은 색인을 구성하여 편성하는 방식
- 레코드를 참조할 떄는 색인을 탐색한 후 색인이 가리키는 포인터(주소)를 사용하여 직접 참조할 수 있다.
- 자기 디스크에 많이 사용되며, 자기 테이브에서는 사용할 수 없다.
- 순차 처리와 랜덤 처리가 모두 가능, 효율적인 검색이 가능하고, 레코드이 삽입, 삭제, 갱신이 용이
- 색인 구역과 오버플로우 구역을 구성하기 위한 추가 기억 공간이 필요
- 파일이 정렬어 있어야 해서 -> 추가, 삭제가 많으면 효율이 떨어진다.
- 색인을 이용한 엑세스를 하기 때문에 엑세스 기간이 랜덤 편성 파일보다 느리다.
색인 순차 파일의 구성
- 기본 구역(Prime Area): 실제 레코드들을 기록하는 부분으로, 각 레코드는 키 값 순으로 저장
- 색인 구역(Index Area): 기본 구역에 있는 레코드들의 위치를 찾아가는 색인이 기록되는 부분
- 오버플로 구역(OVerflow Area): 기본 구역에 빈 공간이 업성서 새로운 레코드의 삽입이 불가능할 때를 대비하여 예비적으로 확보해둔 부분
- 실린더 오버플로 구역 -> 독립 오버플로 구역 : 기본 구역에 빈 공간이 없어서 새로운 레코드의 삽입이 불가능할 때를 대비하여 예비적으로 확보해둔 부분
'CS > 데이터베이스' 카테고리의 다른 글
동시성 제어 (0) | 2025.04.10 |
---|---|
B-tree, B+tree (0) | 2025.04.10 |
데이터베이스 정의 (0) | 2025.04.07 |