본문 바로가기
몰라 컴퓨터 일반/데이터베이스

데이터베이스

by 몰라닉네임 2024. 10. 18.

 

무결성: 데이터가 처리되는 모든 과정에서 변경되거나 손상되지 않고 완전성, 정확성, 일관성을 유지함을 보장하는 특성

개체 무결성 : 기본키는 후보 키 중에서 선정한 키로서, NULL일 수 없다.
참조 무결성 :외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 한다. 
기존 파일 처리 시스템의 문제점 

- 데이터의 종속성 

- 데이터의 중복성 

 

데이터베이스의 특징
  •  실시간 접근
  •  계속적인 변화
  •  동시공유 
  •  내용에 의한 참조 (주소에 의한 참조 X)
  •  독립성 보장(종속성 유지 X)

 

데이터베이스는 데이터의 최소한의 중복을 허용한다. 

중복을 허용함으로써 회복에 의한 신뢰성과 데이터 접근 속도 향상을 꾀할 수 있다. 하지만 데이터의 많은 중복은 데이터 무결성을 침해하는 원인이 될 수 있다. 

 

데이터 독립성 - DBMS의 궁극적인 목표

 - 논리적 데이터 독립성: 기존 응용 프로그램에 영향을 주지 않고 데이터베이스의 논리적 구조를 변경시킬 수 있는 특성

 - 물리적 데이터 중복성: 응용 프로그램과 논리적 구조에는 영향을 주지 않고 데이터베이스의 물리적 구조를 변경시킬 수 있는 특성

 

※ 아래 스키마 구조 참고 

외부스키마의 변화 없이 개념스키마를 변경할 수 있는 특성을 논리적 데이터 독립성이라고 하고 개념스키마의 변화 없이 내부 스키마를 변경할 수 있는 특성을 물리적 데이터 독립성이라고 함 

 

스키마

- 데이터 베이스의 전체적인 논리적 설계를 의미하는 것

- 제약 조건에 관한 정의를 총칭

 

아래 그림 떠올리자

1)외부 스키마

- 사용자나 응용프로그래머가 접근할 수 있는 데이터베이스 정의

 

2)개념 스키마 (단순한 스키마라고 하면 개념 스키마를 의미)

- 범기관 입장의 데이터베이스 정의, 기관 전체의 견해 

- 접근권한, 보안정책, 무결성 규칙 명세

3) 내부 스키마

- 저장장치의 관점에서 전체 데이터베이스가 저장되는 방법을 명세 

 

 

데이터베이스 설계

1. 요구조건 분석 단계 : 데이터 및 처리 요구조건

2. 개념적 설계 단계

 - ERD 개체-관계 다이어그램 사용

 - DBMS 독립적 개념 스키마 설계

 - 트랜잭션 모델링

3. 논리적 설계 단계 (정규화한다.)

 - 목표 DBMS에 맞는 스키마 설계

 - 트랜잭션 인터페이스 설계

4. 물리적 설계 단계

 - 목표 DBMS에 맞는 물리적 구조 설계

 - 트랜잭션 세부 설계

5. 구현 단계

E-R 다이그램의 기호

- 사각형 : 개체 집합

- 이중 사각형 : 약한 개체

- 타원형 : 속성

- 이중타원형 : 다중 속성

- 마름모 : 관계집합

 

관계형 모델

도메인: 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합

※릴레이션의 특징 

- 한 릴레이션에 포함된 튜플들은 모두 상이하다.

- 한 릴레이션에 포함된  튜플 사이에는 순서가 없다.

- 한 릴레이션을 구성하는 애트리뷰트 사이에는 순서가 없다.

- 모든 애트리뷰트 값은 원자값이다. 그렇기 때문에 분해 불가능 (튜플은 분해가 가능 (X))

 

관계 데이터 모델의 키

 

 ※ 무결성 제약

- 도메인 무결성 : 특정 속성의 값이 그 속성이 정의된 도메인에 속한 값이어야 한다.

- 키 무결성 : 한 릴레이션에 같은 키 값을 가진 튜플들은 허용하지 않는다.

- 개체 무결성 : 기본키는 후보 키 중에서 선정한 키로서, NULL일 수 없다.

- 참조 무결성 : 외래키 값은 NULL이거나 참조 릴레이션의 기본키 값과 동일해야 한다. ***

 

 

VIEW(뷰)
  • 기본 테이블로부터 유도된 가상 테이블로서, 뷰 테이블은 물리적으로 존재하지 않음 
  • 삽입, 삭제, 갱신 연산은 제약이 따름, 검색연산의 경우 기본 테이블과 동일함

※ 뷰 사용 이유

1) 복잡하고 어려운 쿼리문으로 조회를 수행해야 할 때, 매번 작성해야 하는 번거로움을 해결해준다.

2). 편의와 DB의 보안 때문, 원본 테이블에 직접 접근하지 않아도 사용자가 임의의 View를 구성하여 별도의 이름을 붙이거나 접근 가능한 사람을 지정할 수 있다.

 

※ 뷰의 특징

  • 뷰는 실제로 존재하는 테이블이 아니다.(물리적으로 존재하지 않기 때문)
  • 논리적 데이터 독립성을 제공한다
  • 뷰 위에 또 다른 뷰를 생성할 수 있다.
  • 뷰를 생성한 기존의 테이블이 삭제되면 뷰도 삭제된다.
  • 뷰를 통해 필요한 데이터만을 뷰로 정의해서 처리할 수 있기 때문에 관리 용이하다
  • 뷰 생성에 사용된 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰는 데이터 변경이 불가능하다
  • 뷰는 정의를 변경할 수 없기 때문에 DROP 후 다시 CREATE 한다 **
  • 뷰를 통해서 데이터에 접근 가능하기 떄문에 데이터를 안전하게 보호할 수 있다. ***
  • 복잡하고 어려운 쿼리문으로 조회를 수행해야 할 때, 매번 작성해야하는 번거로움을 해결해준다. ***
정규화

- 정규화의 정의 : 하나의 종속성이 하나의 릴레이션으로 분해하는 과정

 

- 정규화의 목적 : 자료 저장 공간을 최소화하고 DB 내 데이터의 불일치 위험을 최소화하는데 있다. 또한 자료의 수정, 삭제에 때라는 얘기치 않은 오류(Anomaly)를 최소화하여 데이터의 구조의 안전성을 최대화하는 것이 목적이다.

 

https://donotknowwhat.tistory.com/220

 

정규화

 

donotknowwhat.tistory.com

 

 

이상현상

 - 삽입이상 : 원하지 않는 정보를 강제 삽입해야 하는 경우

 - 삭제 이상 : 유지되어야 하는 정보까지 연쇄 삭제되는 경우

 - 갱신 이상 : 중복된 튜플 중에서 일부 애트리뷰트만 갱신되는 경우

 

 

 

트랜잭션

- 트랜잭션은 한꺼번에 모두 수행되어야 할 일련의 데이터베이스 연산들의 모임을 의미한다. 

 

 트랜잭션의 성질 (ACID) ****

 - Atomicity (원자성) : 트랜잭션은 전부, 전무의 실행만이 있지 일부 실행으로 트랜잭션의 기능을 가질 수는 없다.

 - Consistency (일관성) : 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관된 데이터베이스 상태로 된다.

 - Isolation (격리성, 고립성) : 연산의 중간결과에 다른 트랜잭션이나 작업이 접근할 수 없다.

 - Durability (영속성, 지속성) : 트랜잭션은 일단 그 실행을 성공적으로 끝내면 그 결과를 어떠한 경우에라도 보장받는다.

 

트랜잭션의 상태

1) 부분 완료(Partially Committed): 트랜잭션이 마지막 명령문을 실행한 직후의 상태

2) 철회(Aborted): 트랜잭션이 실행에 실패하여 RollBack 연산을 수행한 상태

3) 완료(Committed): 트랜잭션이 실행을 성공적으로 완료하여 Commit연산을 수행한 상태 

4) 활동(Active): 트랜잭션이 실행을 시작했거나 실행 중인 상태

4) 실패(Failed): 정상적 실행을 더 이상 계속할 수 없어서 중단한 상태

 

Redo 와 Undo

- Redo: 데이터베이스 비정상 종료 시 트랜잭션 시작(start)과 완료(commit)에 대한 기록이 있는 트랜잭션들의 작업을 재작업

 

- Undo: 데이터베이스 비정상 종료 시작은 있지만 완료 기록이 없는 트랜잭션들이 작업한 내용을 모두 취소

(이후 값을 이전 값으로 변경)

 

회복과 동시성의 제어

 

SQL 헷갈릴 수 있는 부분 정리

 

Drop과 Delete의 차이 

DROP은 테이블 삭제시, DELETE는 튜플을 삭제할 경우 사용

 

UNION ALL은 합집합을 의미하며, 중복을 허용

 

유효한 SQL 찾을 때 주의사항

- SELECT 와 GOUP BY 칼럼 확인 (중요!!!!)

-그룹화 이후의 조건식은 WHERE 대신 HAVING을 사용

- 중첩질의문의 결과가 집합으로 생성될 경우 조건식에서 사용할 경우 IN 과 같은 집합연산자를 사용

 

LOCK (로크)

- Lock 은 하나의 트랜잭션이 데이터를 접근하는 동안 다른 트랜잭션이 그 데이터를 접근 못하게 한다. 

- 트랜잭션이 Lock한 데이터에 대해서는 해당 트랜잭션이 종료되기 전에 해당 데이터에 대한 Unlock을 실행해야 한다.

 

2단계 로킹 규약

- 2단계 로킹 규약을 적용하면 트랜잭션의 직렬가능성 보장하지만, 교착상태 를 막을 수는 없다. ***

 

Exclusive Lock VS Shared Lock

멀티 트랜잭션 환경에서 DB의 일관성과 무결성을 유지하려면 트랜잭션의 순차적 진행을 보장할 수 있는 직렬화 장치가 필요하다.

 

Exclusive Lock Shared Lock
Write Lock 이라고도 한다. Read Lock 이라고도 한다.
어떤 트랜잭션에서 데이터를 변경하고자 할 때 (Write) 다른 트랜잭션에서 읽거나 쓰지 못하게 한다. 어떤 트랜잭션에서 데이터를 읽고자 할 때 Share Lock은 허용하지만Exlusive Lock은 불가
 -> 다시 말해 리소스를 다른 사용자가 동시에 읽을 수 있게 하되 변경은 불가능하게 
- Exclusive Lock 에 걸리면 Shared Lock을 걸 수 없다.
- Exclusive Lock에 걸린 자원에 대해 다른 Exclusive Lock  걸 수 없다.  
- Shared Lock 은 동시에 여러개 적용될 수 있다.
- Shared Lock이 하나라도 걸려있으면 Exclusive Lock 걸 수 없다. 

 

권한 부여

한 문제의 예시임

U1 : GRANT SELECT, INSERT ON STUDENT ON TO U2 WITH GRANT OPTION;
U2 : GRANT SELECT, INSERT ON STUDENT TO U3;
U1 : REVOKE GRANT OPTION FOR SELECT ON STUDENT FROM U2;
U1 : REVOKE INSERT ON STUDENT FROM U2 CASECADE;
  • U1은 U2에게 학생테이블에 대한 SELECT, INSERT 권한을 '권한 부여 능력'과 함께 부여함
  • U2는 U3DPRP 학생 테이블에 대한 SELECT,  INSERT 권한을 부여함

 

  • U1은 U2로부터 학생 테이블에 대한 SELECT(검색) 권한 부여 능력을 철회함, U2의 학생 테이블에 대한 검색 권한은 남아있음
  • U1은 U2로부터 학생 테이블에 대한 삽입 권한을 철회함
  • U2의 학생 테이블에 대한 삽입 권한 부여 능력도 없어지게 됨
  • U2로부터 삽입권한을 부여받는 U3의 삽입 권한도 없어짐

AVG(칼럼) NULL 포함여부

- 칼럼 값이 null 이면 제외하고 평균을 구한다

예 ) 10,4,null 의 평균은 (10+4)/2 이다

 

-count(*)의 경우는 NULL을 세지만, count(칼럼) NULL을 세지 않는다.

 

순수 관계 연산자

 

Division 은 두 개의 릴레이션의 관계에서 한 릴레이션의 모든 튜플들과 관계를 갖는 속성값들을 검색하는 연산이다. 

참고 https://chartworld.tistory.com/12

 

ALTER문 

(열 삭제 ) 

ALTER TABLE ENROL DROP grade FROM CASCAED;

-- ENROL 테이블에서 grade 열을 삭제한다.

 

 

참고

  • '컴퓨터일반 달달노트' 박태순 이성행 공저
  • '컴퓨터일반 기출문제집' 박미진 편저 

 

'몰라 컴퓨터 일반 > 데이터베이스' 카테고리의 다른 글

트랜잭션 격리수준(DB Isolation Level)  (4) 2024.10.18
정규화  (0) 2024.05.24