포스트

2. 관계 모델

2. 관계 모델

2. 관계 모델(23.10.12)

  • 관계 모델은 IBM 연구소의 Dr. Codd가 제안
  • 계층형 모델과 네트워크 모델의 자리를 빠르게 대체

Dr.Codd의 12법칙

  • 규칙 0. 시스템은 데이터베이스뿐만 아니라 관리 시스템으로 서도 관계 모델의 자격을 얻어야 한다.
  • 규칙 1. “정보 규칙” – 데이터베이스 내의 모든 정보는 한 가지 방법으로만 표시되어야 한다.
  • 규칙 2. “보장된 접근 규칙” – 모든 데이터는 모호함이 없이 접근되어야 한다.
  • 규칙 3. “널 값의 체계적인 처리” – DBMS는 각 필드에 대해 null을 처리할 수 있어야 한다.
  • 규칙 4. “관계형 모델에 기반한 액티브 온라인 데이터베이스 카탈로그” – 시스템은 관계형 형태의 온라인 카탈로그를 제공해야 한다.
  • 규칙 5. “종합적인 데이터 보조언어 규칙” – 시스템은 적어도 하나의 관계형 언어를 지원해야 한다.
  • 규칙 6. “뷰 갱신 규칙” – 뷰는 시스템에 의해 갱신 가능해야 한다.
  • 규칙 7. “고급 삽입, 갱신, 제거” – 시스템은 집합에 대해 한번에 삽입, 갱신, 제거를 지원해야 한다.
  • 규칙 8. “물리적 데이터 독립성” – 물리적 레벨에서 변경이 일어나더라도 그 구조에 기반한 응용 프로그램은 변경되어서는 안된다.
  • 규칙 9. “논리적 데이터 독립성” – 논리적 레벨에서 변경이 일어나더라도 그 구조에 기반한 응용 프로그램은 변경되어서는 안된다.
  • 규칙 10. “무결성 독립성” – 무결성 제약조건들은 데이터베이스 카탈로그에 저장되어야 하며 응용 프로그램들과는 별도로 규정되어야 한다.
  • 규칙 11. “분산 독립성” – 데이터베이스의 분산은 데이터베이스 사용자에게 영향을 주지 않는다.
  • 규칙 12. “무전복 규칙” – 시스템이 저급 인터페이스를 제공하더라도, 그 인터페이스는 시스템을 파괴할 수 없어야 한다.

Relation Schema

  • 관계형 모델에서 데이터베이스의 구조와 제약조건에 대한 Specification
    • Relation 이름
    • 필드(Field) 또는 열(Column) , 또는 속성(Attribute) 의 이름
    • 도메인(Domain) 의 이름
  • 개체(Entity) 와 개체의 특성을 나타내는 속성(Attribute) , 개체 간의 관계(Relation) , 이들의 제약 조건(Constraint) 을 기술한 것
  • 명세 예시

    $학생 ( 학번 : 문자열, 이름 : 문자열, 나이 : 정수 )$

Relation Instance

  • 레코드(Record) 라고도 불리는 투플(Tuple) 의 집합
  • 투플(Tuple)
    • 릴레이션 스키마에서 정의된 각 속성(필드) 로 정의되며, 하나의 데이터 묶음을 나타냅
    • 릴레이션 인스턴스에서는 각 투플을 하나의 행(row) 으로 구성
  • 릴레이션 인스턴스의 투플 수: 카디널리티(Cardinality)
  • 릴레이션 인스턴스의 속성(필드) 수: 차수(Degree 또는 Arity)
  • 릴레이션 인스턴스의 투플 순서는 중요하지 않음

Domain

  • 하나의 속성이 가질 수 있는 동일한 유형의 원자값들의 집합
  • 릴레이션 스키마는 릴레이션 인스턴스의 각 필드의 도메인을 명세(도메인 제약조건)
  • 프로그래밍 언어 관점에서 필드의 데이터 타입을 의미
  • R(fi:D1, … fn:Dn) 을 릴레이션 스키마라고 하고, 각 fi, 1 ≤ i ≤ n 에 대한 이름이 Di 인 도메인에 대한 집합을 Domi 이라고 할 때, 도메인 제약조건을 만족하는 R의 인스턴스는 다음과 같이 n개의 필드를 가진 투플의 한 집합이 됨

    { <fi: di, … fn: dn> | d1 ∈ Dom1, … dn ∈ Dom

lab

  • MySQLMySQLWorkbench 를 설치
  • Relation 생성
    • Category(CategoryNo: Integer, CategoryName: String)
    • Product(ProductNo: Integer, ModelNumber: String, ProductName: String, Price: float, CategoryNo: Integer)
  • Relation 수정
    • 필드 데이터 수정, 테이블 이름 변경
1
2
3
4
5
6
7
8
mysql> select * from Category;
+------------+--------------+
| CategoryNo | CategoryName |
+------------+--------------+
|          1 | Novel        |
|          3 | History      |
+------------+--------------+
2 rows in set (0.00 sec)

무결성 제약조건

  • 저장된 정보의 품질에 따라 데이터베이스의 품질이 결정됨
  • DBMS는 부정확한 정보가 입력되는 것을 방지하는 수단을 가지고 있어야 함
  • 무결성 제약조건(Integrity Constraint)
    • 데이터베이스 스키마에 명세 되어 있는 조건
    • 데이터베이스 인스턴스에 저장될 수 있는 데이터를 제한
  • 적법한(Legal) 인스턴스

    데이터베이스 스키마에 명세 된 무결성 제약조건들을 모두 만족하는 데이터베이스 인스턴스

  • DSBMS는 무결성 제약조건들을 집행(enforce)하여 데이터베이스를 접합하게 만듦

개체 무결성

  • 한 개체(투플)는 다른 개체들과 명확히 구분되어야 함
  • 모든 릴레이션에 속한 필드들의 최소 부분집합이 각 투플에 대해 고유 식별자가 되어야 함
  • 키 제약조건(Key Constraint)으로 개체 무결성을 유지
    • 릴레이션에 속한 필드들의 최소 부분 집합이 각 투플에 고유한 식별자가 되어야 함
    • 키 제약조건에서 투플을 식별하는 부분집합을 키(Key)라고 함
  • 키(Key)
    • 적법한 인스턴스의 서로 다른 두 투플은 한 키에 속하는 모든 필드 전체에 대해 동일한 값을 가질 수 없음
    • 키를 구성하는 필드 집합의 어떠한 부분집합도 투플에 대해 유일한 식별자가 될 수 없음
  • 수퍼 키(Super Key)

    유일성을 만족하는, 필드들의 부분 집합

  • 후보 키(Candidate Key)

    유일성과 최소성을 만족하는 수퍼키 집합의 부분 집합

  • 기본 키(Primary Key)

    특정 투플을 구별하기 위해 후보 키에서 선택된 고유한 식별자

참조 무결성

  • 한 릴레이션에 저장된 정보와 다른 릴레이션에 저장된 정보가 연결되는 경우가 대부분
  • 참조 관계에 있는 두 릴레이션의 데이터는 항상 일관된 값으로 유지되어야 함
    • 한 릴레이션의 데이터가 수정될 경우 참조 관계에 있는 데이터 역시 수정되어야 함
    • 한 릴레이션의 데이터가 삭제될 경우 참조 관계에 있는 데이터 역시 삭제되어야 함
  • 외래 키 제약조건(Foreign Key Constraint)으로 참조 무결성을 유지
    • 한 릴레이션의 필드가 다른 릴레이션의 키를 참조
    • 참조하는 릴레이션의 데이터 변경에 따른 무결성을 유지
  • 외래 키(Foreign Key)
    • 한 릴레이션의 키 중에서 다른 릴레이션의 투플을 유일하게 식별할 수 있는 키
    • 한 릴레이션의 투플에서 다른 릴레이션의 투플을 참조하기 위해 사용
  • Product 테이블의 spec

    Product(ProductNo: Integer, ModelNumber: String, ProductName: String, Price: float)

  • Category 테이블의 spec

    Category(CategoryNo: Integer, CategoryName: String)

  • Product → Category 로 참조 설정

    Product(ProductNo: Integer, ModelNumber: String, ProductName: String, Price: float, CategoryNo: Integer)

    • Category 의 데이터 무결성을 위해 릴레이션에 존재하지 않는 데이터는 product 릴레이션에 존재하지 않아야함.
    • CategoryScience 분류가 없다면 product 릴레이션에도 Science 없어야한다.
    • 이걸 위반하면 데이터 무결성의 문제가 생긴다.

객체 무결성

  • 릴레이션 스키마는 릴레이션 인스턴스의 각 필드에 저장될 수 있는 데이터의 범위인 도메인을 명세
  • 릴레이션의 각 속성(필드) 에는 범위에 지정된 일관된 데이터만 저장되어야 하며, 이를 도메인 무결성(Domain Integrity)

SQL

  • 구조적 쿼리 언어
  • 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계
  • SQL 문법의 3가지 분류
    • 데이터 정의 언어(DDL, Data Definition Language)

      데이터 정의 언어는 테이블과 인덱스 구조를 관리합니다. DDL의 가장 기본적인 요소는 CREATEALTERDROP 등입니다.

    • 데이터 조작 언어(DML, Data Manipulation Language)

      데이터 검색, 등록, 삭제, 갱신을 위해 사용되며, 가장 기본적인 요소는 SELECTINSERTUPDATEDELETE 입니다. 가장 많이 사용되는 데이터베이스 언어 요소입니다.

    • 데이터 제어 언어(DCL, Data Control Language)

      데이터베이스에서 데이터에 대한 액세스를 제어하기 위한 데이터베이스 언어 또는 데이터베이스 언어 요소이며, 기본적인 요소는 GRANTDENYREVOKE 입니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.