공부기록

무결성 본문

CS/DB

무결성

코타쿠 2021. 5. 1. 14:26
  • 무결성
    • 무결성이란 데이터베이스에 저장된 데이터 값과 그 것이 표현하는 현실세계의 시제 값이 일치하는 정확성을 의미한다.
    • 무결성 제약조건은 데이터베이스에 들어있는 데이터의 정확성을 보장하기 위해 부정확한 자료가 데이터베이스 내에 저장되는 것을 방지하기 위한 제약 조건을 말한다.
    • 무결성 제약 조건은 데이터 베이스의 정확성과 일치성을 보장하기 위해 사용된다.
    • 무결성의 종류에는 개체 무결성, 도메인 무결성, 참조 무결성, 사용자 정의 무결성 등이 있다.
  • 개체 무결성
    • 개체 무결성은 기본 테이블을 기본키를 구성하는 어떤 속성도 null 값을 가져서는 안된다.
    • 기본키는 중복되어선 안된다.
    • not null, primary, unique
  • 도메인 무결성
    • 도메인 무결성은 주어진 속성의 값이 정의된 도메인에 속한 값이어야 한다는 규정이다.
    • check (조건)
    • 아래는 예시이다.
create table ex(
    semester    varchar(10)
    check (semester in ("봄", "여름", "가을", "겨울"))
);
  • 참조 무결성
    • 외래키의 값은 Null, 혹은 참조 릴레이션의 기본키 값과 동일해야 한다.
    • foreign key(다른 테이블의 주키) references 다른_테이블
    • on delete
      • 참조 테이블에서 참조하는 튜플이 삭제될 때 행동이 명시되지 않으면 삭제 연산이 허용되지 않음
      • on delete cascade
        • 삭제 연산이 현 테이블 까지 파급되어 삭제된 튜플을 참조한느 튜플까지 모두 삭제된다.
      • on delete set null
        • 참조 키 값을 null로 변경
        • 참조 키가 주키의 일부분을 경우 허용되지 않는다.
    • on update
      • 변경 연산시 행위가 정의되지 않으면 변경연산이 되지 않는다.
      • 참조 당하는 튜플의 주키가 변경된다고 가정하자.
      • on update cascade
        • 모두 변경
      • on update set null
        • 참조 키 값을 null로 변경
  • 사용자 정의 무결성
    • 속성 값들이 사용자가 정의한 제약 조건을 만족해야함을 의미
    • check, assertion, trigger를 통해 관리한다.
    • assertion의 예시
create assertion myVerifyTotalCredit check
(not exists
    (select pid
    from professor
    where ...
    )
 );
  • 트리거
    • 트리거는 데이터베이스가 무결성제약 관리를 위해 지원하는 기능이다.
    • ECA 규칙으로 Event (사건) / Condition (조건) / Action (행동) 부문으로 구서오딘다.
    • 데이터베이스 시스템에 어떤 사건이 발생하면 주어진 조건을 평가하여 조건이 만족되면 주어진 행동을 하는 규칙이다.
    • 사건은 데이터베이스에 대한 변경 연산 (insert / delete / update 연산)을 의미한다.
  • 트리거 생성
create [or replace] trigger 트리거명 동작시기 동작 on 테이블명
[referencing new | old as 테이블명]
[for each row [when 조건식]]
begin
    트리거 body;
end;
  • -
    • 동작시기
      • 트리거가 실행될 때를 지정, after 와 before가 있음
      • after : 테이블이 변경된 후에 트리거가 실행됨
      • before : 테이블이 변경되기 전에 트리거가 실행
    • 동작
      • 트리거가 발동되는 작업의 종류를 지정
      • insert, delete, update가 있다.
    • new | old
      • new : 추가되거나 수정에 참여할 튜플들의 집합을 말함
      • old : 수정되거나 삭제 전 대상이 되는 튜플들의 집합을 의미
    • for each row : 각 튜플마다 트리거를 적용
    • when : 튜플을 적용할 튜플들의 조건
Create trigger myCred after update of grade on takes
referencing new row as nrow
referencing old row as orow
for each row
when nrow.grade <> ’F’ and nrow.grade is not null
        and (orow.grade = ’F’ or orow.grade is null)
begin atomic
     Update student
    set totalCredit = totalCredit +
          (select credit
            from course
             where cID = nrow.cID)
     where sID = nrow.sID;
end;

'CS > DB' 카테고리의 다른 글

개체-관계 데이터 모델링  (0) 2021.05.01
권한  (0) 2021.05.01
View  (0) 2021.05.01
인덱스  (0) 2021.04.30
트랜잭션  (0) 2021.04.30