2장 관계데이터모델과 제약조건2

Song Chae Won·2023년 3월 18일
0

DATABASE_STUDY

목록 보기
3/19
post-thumbnail

2023-03-17 데이터베이스 수업

2장 관계데이터모델과 제약조건2

무결성 제약조건

데이터 모델: 구조적 정보(스키마), 연산자(SQL의 연산), 무결성 제약조건

데이터 무결성

  • 데이터의 정확성 또는 유효성, 일관성, 변경되거나 손상되지 않고 완전성과 일관성을 갖도록 하는 것
  • 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적으로 또는 명시적으로 정의함, DBMS가 자동적으로 일관성 조건을 검사(Insert나 Delete가 될 때), DBMS가 보안문제 해결을 위해 보안정책을 가져감.
  • 사용권한이 있는데 들어와서 잘못된 처리를 할 때, 데이터베이스의 무결성이 깨짐 ➡️ DBMS가 체크하여 무결성 제약조건을 가지고 문제가 생기지 않도록 자동으로 일관성 조건을 검사함.

도메인 제약조건

  • 데이터 타입: 애트리뷰트의 타입 지정
  • 각 애트리뷰트 값이 반드시 원자값이어야함.
    EX) EMPLOYEE라는 테이블을 만들었을 때, 릴레이션을 정의할 때 도메인 제약조건을 걸어준다.

키 제약조건

  • 키 애트리뷰트에 중복된 값 존재해서는 안됨
  • primary key라고 기본키라고 지정을 해주면 절대 중복된 값이 들어갈 수 없음
    EX) 주민번호의 경우엔 UNIQUE라고 제약조건을 주면서 중복된 값이 존재할 수 없게 만든다.

기본 키와 엔티티 무결성 제약조건

  • 기본 키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없음
  • 고유하게 식별해주는 것이 기본 키인데 널값이 들어가면 식별 불가
  • NOT NULL해주지 않아도, PRIMARY KEY(EMPNO)에 해주면 EMPNO에 NULL이 들어갈 수 없음.

외래 키와 참조 무결성 제약조건

  • 두 릴레이션의 연관된 투플들 사이의 일관성 유지하는데 사용되는 조건

  • 외래키는 릴레이션 사이의 관계들이 다른 릴레이션의 기본 키를 참조하는 것을 기반으로 하여 묵시적으로 표현됨
    EX) 과목 릴레이션에서 과목번호(외래키)가 기본 키, 학생 릴레이션에서 학번(외래키)이 기본 키, 학번과 과목번호는 외래키이면서 동시에 기본키
    학생 - "수강하다" - 과목 : 엔티티와 관계를 모두 릴레이션으로 나타냄
    ➡️ 수강이라는 릴레이션은 학생과 과목 사이의 묵시적 관계 표현, 기본 키는 학번 + 과목번호

  • 릴레이션R2의 외래 키가 릴레이션 R1의 기본키를 참조할 때,
    1) 외래 키의 값은 R1의 어떤 투플의 기본 키 값과 같다
    2) 외래 키가 자신을 포함하고 있는 릴레이션의 기본 키를 구성하고 있지 않으면 NULL값을 가진다.
    EX) DNO가 기본 키가 아닐 땐 NULL 값을 가져도 된다!
    새로운 EMPLOYEE가 들어올 때, 부서가 정해져 있지 않아서 DNO가 NULL이면 괜찮으나,
    DEPARTMENT에 있던 DEPTNO가 아닌 7의 값이 들어오면 성립 X

제약조건과 적용 SQL

  • 갱신(INSERT/DELETE)이 이뤄질 때, 정의된 제약조건이 잘 이뤄지고 있는지 정의하는 것 => DBMS

무결성 제약조건의 유지

  • 데이터베이스의 갱신연산: 삽입, 삭제, 수정
    (조회는 문제가 되지 않음, 갱신되는 것이 아니라 그냥 보는 것이므로)
  • DBMS는 갱신 연산에 대해 무결성 제약조건들을 만족하도록 조치를 취함
  • 외래 키, 참조된 기본키가 갱신될 때 유의!
    EX) 릴레이션 간의 연관에서 참조하는 릴레이션 유의!
    DNO가 외래키이고 DEPTNO를 참조하면, DNO는 참조하는 릴레이션이고 DEPARTMENT는 참조된 릴레이션(관계성 유의)
삽입연산
  • 참조되는 릴레이션에 새로운 투플 삽입시, 참조 무결성 제약조건 위배 X (DBMS는 신경 안써도 됨!)
  • 기본 키 애틀뷰트의 값에 따라서 도메인, 키, 엔티티 무결성 제약 조건 위배는 신경 써야함
  • 참조하는 릴레이션에 새로운 투플 삽입할 때는, 참조 무결성 제약조건도 위배할 수 있음! => DBMS가 연산을 거절함.
삭제연산
  • 참조하는 릴레이션에 투플 삭제되면 도메인, 키, 엔티티, 참조 무결성 제약조건 등 모든 제약조건을 위배X
  • 참조되는 릴레이션에 투플 삭제되면 참조 무결성 제약조건을 위배하는 경우가 생기거나 생기지 않을 수 있음
    EX) 팀 목록에서 투플을 삭제하려할 때, 참조하는 릴레이션에서 이미 존재하는 데이터가 있으면 DBMS에서 참조 무결성 제약조건 위배를 근거로 거절함.

참조 무결성 제약조건을 만족시키기 위해 DBMS가 제공하는 옵션

제한

  • 위배를 야기한 연산을 거절

연쇄

  • 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플도 연쇄적으로 함께 삭제
    EX) ON DELETE CASCADE => CASCADE 방식으로 연쇄 삭제 요청 처리하는 옵션 추가

널 값(nullify)

  • 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래 키에 NULL값을 삽입
    (다만, 여기서 기본키(NULL값 들어올 수 없음) 이거나 NOT NULL인 예외상황에서는 이 옵션 불가능함!!)

디폴트 값

  • 위의 옵션에서 널값을 넣는 대신에 디폴트 값을 넣는다
    EX) DNO NUMBER DEFAULT 1 (부서 번호에 투플 삭제하고 디폴트값을 1을 넣는다)
  • 디폴트값 설정을 안해놓으면 거절당함

수정

  • 삽입과 삭제는 투플 단위로 들어가나, 수정의 경우엔 한 애트리뷰트 값을 수정
  • 수정하는 애트리뷰트가 기본 키인지 외래 키인지 검사 ➡️ 둘다 아니면 참조 무결성 제약조건을 위배 X
  • 기본 키 이거나 외래 키이면 삭제 후 삽입하는 것과 유사하므로 삽입 및 삭제에서 설명한 제한, 연쇄, 널값, 디폴트값 규칙이 수정 연산에서도 적용됨

EX) 참조된 릴레이션에서 DEPTNO 3 투플을 삭제하고 새로운 넘버를 삽입하려하면,
4가지 옵션 ➡️ (1) 거절 / (2) 연쇄 / (3) 널값 옵션이 주어져 있으면, NULL로 수정 / (4) DEFAULT 값 옵션이 주어져 있으면, 기본 값을 수정
(주로, 수정에 대해서는 거절하는 DBMS가 대부분이긴 하다!)

무결성 제약조건 연습문제

  • ppt 참조해서 복습해라!
profile
@chhaewxn

0개의 댓글