4 분 소요

INTRO 🙌

저번 시간에는 ER Diagram 설계 방법에 대해 알아보았다.

이번 시간에는 관계 모델에 대하여 알아보자.


Relational Model(관계 모델) 🧿

  • 가장 널리 사용되는 모델
  • Object-oriented 모델(i.e., UniSQL, Oracle, etc.)의 경쟁 모델

Relational Database(관계 데이터베이스): A set of relations

Relation

image

Relation은 Row 집합 혹은 Tuple 집합이다.

Instance와 Schema로 구성된다.

Instance

Row(= Cardinality, Tuple)과 Column(= Degree, Attribute)으로 이루어진 테이블이다.

[Instance(Cardinality=3, Degree=5)]

image

Schema

Relation의 이름, 각 Column 타입(= Domain) 및 이름을 정의한다.

Domain

  • Each attribute has a type
  • Must be atomic type
    • i.e., Integer, String, Real, …

non-atomic

image

Relational Query Languages(관계 질의 언어)

  • 관계 모델의 가장 큰 장점은 데이터에 관한 간단하면서 강력한 Query를 제공한다는 것이다.
  • Query는 직관적으로 작성 가능하다.
  • DBMS는 효율적인 평가를 담당한다.
  • 최적화를 통해 광범위한 재배치 이후, 질의 응답(결과)은 여전히 변하지 않는다.

SQL Query Language(SQL 질의 언어)

  • Devloped by IBM in the 1970s
  • 많은 기업에서 사용하기 때문에 표준이 필요하고, 현재 표준은 SQL-99이다.

Querying Relation(릴레이션 질의)

[18살 학생들 검색]

image

상기 테이블에서 18살 학생들의 이름 및 로그인 정보만을 검색하기를 원할 경우:

    SELECT S.name, S.login

Querying Multiple Relation(여러개의 릴레이션 질의)

image

    SELECT S.name, E.cid

    FROM Students S, Enrolled E

    WHERE S.sid=E.sid AND E.grade="A"

[Output]

image

Creating Relation(릴레이션 생성)

    CREATE TABLE Students(
        sid: CHAR(20),
        name: CHAR(20),
        login: CHAR(10),
        age: INTEGER,
        gpa: REAL)
    )

Destroying Relation(릴레이션 삭제)

    DROP TABLE Students

Students Relation 삭제시, Schema 정보 및 Tuple이 모두 삭제된다.

Altering Relation(릴레이션 수정)

    ALTER TABLE Students

    ADD COLUMN firstYear:integer

새로운 field인 firstYear에 대하여 현재 인스턴스 안의 튜플들은 NULL값을 갖는다.

Adding Tuple(튜플 추가)

    INSERT INTO Students(sid, name, login, age, gpa)

    VALUES(53688, 'Smith', 'smith@ee', 18, 3.2)

Deleting Tuple(튜플 삭제)

    DELETE

    FROM Students S

    WHERE S.name= 'Smith'

무결성 제약조건(Integrity Constraints) 🤞

  • 데이터베이스 안의 어떠한 Instance에 대해서도 참이어야 하는 조건
  • 무결성 제약조건은 Schema가 정의될때 명시됨
  • Relation의 적합한 Instance는 모든 무결성 제약조건을 만족한다
  • Instance만 봐서는 무결성 제약조건이 참인지 거짓인지 추론 불가능
  • Key(키)와 Foreign Key(외래 키)의 무결성 제약조건이 가장 일반적임

Key(키)

Tuple을 유일하게 식별할 수 있는 Attribute 집합이다.

Composite Key

  • 복합 키(Composite Key)는 두 개 이상의 컬럼을 Key로 지정하는 것을 말한다.
  • PK(Primary Key, 기본키)는 한 테이블에 한 개만 존재할 수 있다.
  • 하지만 꼭 한 테이블에 한 컬럼만 기본키로 지정할 수 있는 것은 아니다.

Candidate Key(후보 키)

  • 후보키는 릴레이션을 구성하는 속성들 중에서 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분집합, 즉 기본키로 사용할 수 있는 속성들을 말한다.
  • 하나의 릴레이션내에서는 중복된 튜플들이 있을 수 없으므로 모든 릴레이션에는 반드시 하나 이상의 후보키가 존재한다.
  • 후보키는 릴레이션에 있는 모든 튜플에 대해서 유일성과 최소성을 만족시켜야 한다.

유일성: 하나의 키값으로 하나의 튜플만을 유일하게 식별 가능

최소성: 모든 레코드들을 유일하게 식별하는데 꼭 필요한 속성만으로 구성

Primary Key(기본 키)

  • 기본키는 후보키 중에서 선택한 주키(Main Key)이다.
  • 한 릴레이션에서 특정 튜플을 유일하게 구별할 수 있는 속성이다.
  • Null값을 가질 수 없다.
  • 기본키로 정의된 속성에는 동일한 값이 중복되어 저장될 수 없다.

Alternate Key(대체 키, 보조 키)

  • 후보키가 둘 이상일 때 기본키를 제외한 나머지 후보키들을 말한다.

Super Key(슈퍼 키)

  • 1개의 Candidate Key와 추가적인 다른 Attribute들로 이루어진 Attribute의 집합
  • 슈퍼키는 릴레이션을 구성하는 모든 튜플에 대해 유일성을 만족시키지만, 최소성은 만족시키지 못한다.

직관

아래 예시를 통하여 슈퍼 키에 대해 직관적으로 이해해보자.

학번 + 주민번호를 사용하여 슈퍼키를 만들면 다른 튜플(= 행)들과 구분할 수 있는 유일성은 만족한다.

하지만, 학번이나 주민번호 둘 중 어느 하나만 가지고도 다른 튜플들을 구분할 수 있으므로 최소성은 만족시키지 못한다.

다르게 말하면, 최소성을 만족하기 위해 필요한 최소한의 속성은 하나일 수도 있다; 학번 혹은 주민번호.

Foreign Key(외래 키)

한 부모 테이블의 필드(attribute)로부터 다른 자식 테이블의 행(row)을 식별할 수 있는 키

두 개의 테이블(부모 ~ 자식)을 연결해주는 연결 다리 역할이다.

자식 테이블: 외래키가 포함된 테이블, 참조하는 테이블

부모 테이블: 외래키 값을 제공하는 테이블, 참조되는 테이블

규칙

    CREATE TABLE `parent` (
        `id1` INT(11) NOT NULL,
        `id2` INT(11) NOT NULL,
        `id3` INT(11) NOT NULL,
        `uk1` INT(11) NOT NULL,
        `uk2` INT(11) NOT NULL,
        `uk3` INT(11) NOT NULL,
        PRIMARY KEY (`id1`, `id2`, `id3`),
        UNIQUE KEY (`uk1`, `uk2`, `uk3`)
    );
  • 외래키 값은 NULL이거나 부모 테이블의 기본키, 고유키 값과 동일 (참조 무결성 제약조건)
  • 부모 테이블의 기본키, 고유키를 외래키로 지정 가능
  • 부모 테이블의 기본키가 여러개의 컬럼으로 이루어져 있다면 부모가 가진 기본키, 고유키 컬럼을 원하는 개수만큼 묶어서 외래키로 지정 가능
  • 외래키로 지정할 두 테이블의 필드는 같은 데이터 타입이다

직관

아래 예시를 통해, 외래 키에 대해 직관적으로 이해해보자.

[사용자 정보 테이블 (부모 테이블)]

image

[사용자 주문 내역 테이블 (자식 테이블)]

image

우리는 서로 다른 두 테이블, 사용자 정보 테이블과 주문 테이블을 하나로 묶어서 관리하고 싶다.

누가 어떤 주문을 만들었는지 모르기 때문에, 사용자 주문 테이블에 user_id 속성을 추가해서 부모 테이블과 연결 고리를 만들어주자.

image

이때, 자식 테이블에 생성된 user_id가 바로 외래 키이다.

Referential Integrity(참조 무결성)

Relation은 참조할 수 없는 Foreign Key 값을 가질 수 없다.

Default

행의 delete(삭제)나 update(변경)을 거부

CASCADE

삭제하거나 변경하는 행을 참조하는 다른 Relation의 내용도 삭제하거나 변경한다.

SET NULL / SET DEFAULT

삭제하거나 변경하는 행을 참조하는 다른 Relation의 내용 또한 NULL로 설정 / 미리 설정해놓은 DEFAULT 값으로 설정

View(뷰)

  • Relation의 일종(한 개 이상의 기본 테이블이나 다른 뷰를 이용)으로, Tuple의 집합보다는 Definition(정의)를 저장
  • 뷰는 가상 테이블이라서 디스크에 저장 공간이 할당되지 않는다
  • 기존에 생성된 테이블 또는 다른 뷰에서 접근할 수 있는 전체 데이터 중에서 일부만 접근(= 필요한 정보)할 수 있도록 제한하기 위한 기법

Creating Views

            CREATE  VIEW  YoungActiveStudents (name, grade)

            AS SELECT   S.name, E.grade

            FROM Students S, Enrolled E

            WHERE S.sid = E.sid and S.age<21

Deropping Views

DROP VIEW 명령어를 사용하여 삭제할 수 있음

            DROP VIEW YoungActiveStudents

Summary of Relational Model(관계 모델)

  • Relational Model(관계 모델)은 데이터 표를 표현한다
  • Relational Model(관계 모델)은 단순하고 직관적이며 현재 가장 널리 사용됨
  • Integrity Constaint(무결성 제약조건)
    • 어플리케이션 의미론을 기반으로 하여 DBA에 의해 명시될 수 있음
    • DBMS는 Integrity Constaint(무결성 제약조건)을 위반하는지 확인함
    • Primary Key(기본 키), Foreign Key(외래키) 제약조건이 가장 중요함
  • 강력하고 자연스러운 Query Language(질의 언어)가 존재함

다음 시간에는 ER(Entity-Relationship)을 Relational Model로 변환하는 규칙에 대해 알아보자.


Reference

Relational Model

Database Management Systems by Raghu Ramakrishnan and Johannes Gehrke

댓글남기기