전성빈의 사리사욕

[RDBMS] 관계형 모델의 스키마와 주요 제약조건 본문

백엔드 로드맵따라가기/RDBMS

[RDBMS] 관계형 모델의 스키마와 주요 제약조건

Been2 2020. 10. 22. 01:20
728x90

Relation Database and Relation Database Schema

 

관계 데이타베이스 스키마

  • 동일한 데이타베이스에 속하는 릴레이션 스키마들의 집합 S와 무결성 제약조건 IC(intergrity constraints로 구성됨
  • 릴레이션 스키마들의 집합 S를 데이타베이스의 이름이라고 정의한다. ex) S = {R1,R2,R3,...,Rn}

데이타베이스 스키마 S의 관계 데이타베이스 상태 (혹은 인스턴스)

  • 릴레이션 R의 애트리뷰트만 있으면 스키마이다.

Schema

  • 릴레이션 R의 tuple들까지 있으면 관계 데이타베이스 상태이다.

관계 데이타베이스 상태 혹은 인스턴스

 

제약조건이란?

 

제약조건의 모든 릴레이션 인스턴스들이 만족해야 하는 조건이다.

 

주요 제약조건

  • 도메인 제약조건 : domain constraints
  • 키 제약조건 : key constraints
  • 엔티티 무결성 제약조건 : entity integrity constraints
  • 참조 무결성 제약조건 : referential integrity constraints

Domain Constraints

 

각 애트리뷰트 A의 값은 반드시 A의 도메인 dom(A)에 속하는 원자값이어야 한다.

도메인과 관련된 데이터 타입이어야 한다.

 

ex)

field가 요일(한글)이면 애트리뷰트의 값은 (월, 화, 수, 목, 금, 토, 일) 중 하나여야만 한다.

field가 알파벳(대문자)이면 애트리뷰트의 값은 (A,B,C,...,Z)중 하나여야만 한다.

 

 

Key Constraints

 

예제 테이블 :

학번 (Primary Key) 이름 전공 학년
20170001 아리랑 컴퓨터 공학과 2
20170002 서울 컴퓨터 공학과 3
20180001 부산 컴퓨터 공학과 2

수퍼키(Super Key) : 유일성 제약조건(uniqueness constraints)을 만족한 Attribute의 집합이다.

  •     각 tuple을 구별할 수 있는 값으로 그 어떤 tuple도 다른 tuple과 중복된 값을 갖지않는다

ex ) SK = {학번, 이름, (학번,이름)}

 

 

R의 key 또는 후보키(Candidate key) 

  • 최소 수퍼키로 수퍼키들 중에서 수퍼키 K를 구성하는 어느 한 애트리뷰트라도 빠지면 수퍼키가 될 수 없는 수퍼키 k를 의미한다.

ex) CK = {학번, 이름}

 

 

Primary key

  • 기본키로 여러 후보키 중에서 임의로 하나를 선택할 수 있으며 실제로 키로 작동하는 애트리뷰트이다.
//PRIMARY KEY를 선언하는 2가지 방법

<1번>
CREATE TABLE Student(
	s_id INT,
    name VARCHAR(20),
    dept VARCHAR(30),
    grade INT
);


<2번>
CREATE TABLE Student(
	s_id INT PRIMARY KEY,
    name VARCHAR(20),
    dept VARCHAR(30),
    grade INT
    PRIMARY KEY (s_id, name)
);

NULL을 허용하는지도 중요한 제약조건중 하나이다.

 

 

UNIQUE

  • PK와 의미는 유사하지만 relation당 개수의 제한이 없고 NULL값을 허용한다는 차이가 있다.
CREATE TABLE Student(
	s_id INT UNIQUE,
    name VARCHAR(20) UNIQUE,
    dept VARCHAR(30),
    grade INT
);

 

 

Entity Integrity Constraints

 

엔티티 무결정 제약조건 (Entity Integrity Constraints)

  • 어떠한 기본 키 값도 NULL 값을 가질 수 없다. -> 기본키가 각 튜플을 식별하는데 사용되기 때문이다.
  • 참고 : R의 기본키에 속하지 않는 Attr들도 NULL값을 가질 수 없도록 제약할 수 있다. (NOT NULL 명시)

 

Referential Intergrity Constraints and Foreign Key

 

참조 무결성 제약조건 (Referential Intergrity Constraints)

  • 앞의 제약조건들은 하나의 Relation에 대한 제약 조건이지만, 참조 무결성은 두 Relation에 대한 제약 조건이다.
  • 릴레이션 R에서 속성 FK의 값으로 다른 릴레이션 S의 기본 키 PK 값을 참조하는 경우에 R과 S는 참조 무결성 제약 조건을 가진다고 한다.
  • t1[FK] = t2[PK] 이면 R의 튜플 t1이 S의 튜플 t2를 참조한다고 하며, FK를 외래키(Foreign Key)라고 부른다. R을 참조한(Referenting) 릴레이션, S를 참조된 (Referenced) 릴레이션이라고 부른다.

외래키를 이용한 참조

외래키 선언하는 2가지 방법

  

CREATE TABLE Department(
	dept_name VARCHAR(30) PRIMARY KEY,
    building VARCHAR(20),
    budget INT
);

//1.
CREATE TABLE Students (
	s_id INT PRIMARY KEY,
    name VARCHAR(20),
    dept VARCHAR(30) REFERENCES Department (dept_name),
    grede INT
);

//2.
CREATE TABLE Students(
	s_id PRIMARY KEY,
    name VARCHAR(30),
    dept VARCHAR(20),
    grade INT,
    FOREIGN KEY (dept) REFERENCES Deparment (dept_name)
);

Foreign KEY는 Null값이 가능하다 -> 참조되는 튜플이 삭제 될 시 Null로 변경 가능

 


Handling Violations of Constraints

 

릴레이션에 대한 기본 갱신 연산들

  • 삽입, 삭제, 수정
  • 갱신 연산을 실행하는 경우 스키마에 정의된 Intergrity constraint를 위반하지 않아야 한다.

삽입연산 : 4가지 제약 조건을 위반할 수 있다.

  • 삽입되는 튜플 t에서 애트리뷰트의 값이 도메인에 없으면 도메인 제약조건을 위반한다.
  • t에서 기본 키의 값이 다른 튜플에서 이미 존재한다면 키 제약 조건을 위반하며, Null이면 엔티티 제약조건을 위반한다.
  • t에서 외래 키의 값이 참조되는 릴레이션의 키 값으로존재하지 않는다면 참조 제약 조건을 위반한다Handling 

Handling : 제약 조건을 위반하면 그 삽입을 거부하거나 그 위반 사실을 사용자에게 알려야 한다.

 

 

삭제 연산

  • 튜플이 삭제되는 경우 다른 릴레이션에서 참조하는 있는지 검사하여 그렇지 않는 경우에만 삭제한다.(참조 무결성

Handling : 1. 삭제를 거부한다.

               2. 삭제되는 튜플을 참조하는 튜플들까지 모두 삭제 (연쇄 삭제 : on delete cascade)

               3. 삭제되는 튜플을 참조하는 튜플에서 FK 값을 Null로 바꾸거나 다른 유효한 튜플을 참조하도록 변경

 

                   (on delete set Null)

 

수정 연산

  • 수정 연산은 기본적으로 "삭제 후 삽입" 연산으로 간주할 수 있으므로 삽입과 삭제시의 문제점이 모두 나타난다.
  • 기본 키나 외래 키가 아닌 애트리뷰트 값의 변경은 문제가 없다.

 

 

출처 : chartworld.tistory.com/16

        학교 수업자료


더 공부할 것들

The Default Policy : Reject Violating Modifications

The Cascade Policy

The Set-Null Policy

Not-Null Constraints

CHECK

Assertions

Triggers

SQL key, MUL vs PRI vs UNI 

728x90

'백엔드 로드맵따라가기 > RDBMS' 카테고리의 다른 글

[SQL] SQL 문법 정리  (1) 2020.12.17
[SQL] SQL의 기초(DDL,DML,DCL)  (0) 2020.09.01
[RDBMS] RDBMS의 이해  (0) 2020.08.29
[DataBase] 기초 : 용어와 장단점  (0) 2020.08.28