무결성: 데이터가 처리되는 모든 과정에서 변경되거나 손상되지 않고 완전성, 정확성, 일관성을 유지함을 보장하는 특성
개체 무결성 : 기본키는 후보 키 중에서 선정한 키로서, 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
이상현상
- 삽입이상 : 원하지 않는 정보를 강제 삽입해야 하는 경우
- 삭제 이상 : 유지되어야 하는 정보까지 연쇄 삭제되는 경우
- 갱신 이상 : 중복된 튜플 중에서 일부 애트리뷰트만 갱신되는 경우
트랜잭션
- 트랜잭션은 한꺼번에 모두 수행되어야 할 일련의 데이터베이스 연산들의 모임을 의미한다.
트랜잭션의 성질 (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 은 두 개의 릴레이션의 관계에서 한 릴레이션의 모든 튜플들과 관계를 갖는 속성값들을 검색하는 연산이다.
ALTER문
(열 삭제 )
ALTER TABLE ENROL DROP grade FROM CASCAED;
-- ENROL 테이블에서 grade 열을 삭제한다.
참고
- '컴퓨터일반 달달노트' 박태순 이성행 공저
- '컴퓨터일반 기출문제집' 박미진 편저
'몰라 컴퓨터 일반 > 데이터베이스' 카테고리의 다른 글
트랜잭션 격리수준(DB Isolation Level) (4) | 2024.10.18 |
---|---|
정규화 (0) | 2024.05.24 |