[데이터베이스 개론 5장] 관계 데이터 모델

Mh_Go·2021년 1월 6일
0

관계 데이터 모델

  • 논리적 데이터 모델 중 가장 인기 있는 모델
    하나의 개체에 관한 데이터를 릴레이션 하나에 담아 데이터베이스에 저장

관계 데이터 모델의 기본 용어

속성

  • 릴레이션의 열을 속성 또는 애트리뷰트(attribute)라고 부름
    각 속성은 서로 다른 이름을 이용해 구별

투플

  • 릴레이션의 행을 투플(tuple)이라 부름

도메인

  • 속성 하나가 가질 수 있는 모든 값의 집합을 해당 속성의 도메인(domain)이라고 함
    관계 데이터 모델에서는 속성 값으로 더는 분해할 수 없는 원자 값만 사용
    (도메인은 특정 속성이 가질 수 있는 모든 원자 값의 모임)
  • 도메인을 정의해두면 사용자가 속성 값을 입력하거나 수정할 때 데이터베이스 시스템이 적합성을 판단하여 해당 값 이외의 값은 허용하지 않음으로써 항상 올바른 값만 유지한다는 장점 존재
    프로그래밍 언어에서 데이터 타입과 변수의 관계로 이해할 수 있음
    ex) 데이터 타입을 도메인, 변수를 속성

널 값

  • 릴레이션에 있는 특정 투플의 속성 값을 모르거나, 적합한 값이 없는 경우에는 널(null)이라는 특별한 값을 사용할 수 있음
    널 값은 특정 속성에 해당되는 값이 없음을 나타냄으로 숫자 0이나 공백 문자와는 다름

차수

  • 하나의 릴레이션에서 속성의 전체 개수를 릴레이션의 차수(degree)라고 함
    모든 릴레이션은 최소 1 이상의 차수를 유지해야 함
    릴레이션의 차수는 일반적으로 자주 변하지 않는다는 정적인 특징을 지님

카디널리티

  • 하나의 릴레이션에서 투플의 전체 개수를 릴레이션의 카디널리티(cardinality)라고 함
    투플이 없는 릴레이션이 존재할 수도 있고, 새로운 투플이 삽입되거나 기존의 투플이 삭제될 수 있으므로 릴레이션의 카디널리티는 일반적으로 자주 변한다는 동적인 특징을 지님

릴레이션은 파일 관리 시스템에서의 파일, 속성은 해당 파일의 필드, 투플은 개체의 인스턴스이며 레코드에 대응하는 개념이다.

릴레이션과 데이터베이스의 구성

  • 관계 데이터 모델에서 릴레이션은 릴레이션 스키마와 릴레이션 인스턴스로 구성

릴레이션 스키마(relation schema)

  • 릴레이션의 이름과 릴레이션에 포함된 모든 속성의 이름으로 정의하는 릴레이션의 논리적 구조
    릴레이션 스키마는 데이터베이스 관리 시스템이 내부적으로 데이터 정의어를 이용해 정의
    일반적으로 릴레이션이름(속성이름1, 속성이름2, ... , 속성이름n)'과 같은 형태로 표현
    릴레이션 스키마를 보면 릴레이션의 이름이 무엇이고, 어떤 속성들로 구성되어 있는지 전체 구조를 쉽게 파악 가능

  • 릴레이션 스키마는 릴레이션 내포(relation intension)이라고도 부른다

릴레이션 인스턴스(relation instance)

  • 어느 한 시점에 릴레이션에 존재하는 투플들의 집합
    릴레이션 인스턴스에 포함된 투플은 릴레이션 스키마에서 정의한 각 속성에 대응하는 실제 값으로 구성되어 있음
    릴레이션 인스턴스를 보면 현재 릴레이션의 실제 내용을 쉽게 파악할 수 있음
    데이터베이스 관리 시스템이 내부적으로는 데이터 조작어를 이용해 릴레이션 인스턴스의 투플을 검색하거나, 새로운 투플 삽입과 기존 투플 삭제 및 수정을 진행

  • 릴레이션 인스턴스는 간단히 릴레이션이라 부르거나 릴레이션 외연(relation extension)이라고도 부른다

릴레이션 스키마 - 정적인 특징, 릴레이션 인스턴스 - 동적인 특징

데이터베이스 스키마

  • 데이터베이스를 구성하는 릴레이션들의 스키마를 모아놓은 것
    특정 데이터베이스 스키마를 설계한다는 것은 필요한 모든 릴레이션의 스키마를 모두 정의한다는 뜻

데이터베이스 인스턴스

  • 어느 한 시점에서 데이터베이스에 저장된 데이터 내용의 전체 집합을 의미
    데이터베이스를 구성하는 모든 릴레이션의 인스턴스를 모아놓은 것

릴레이션의 특징

1) 투플의 유일성 - 하나의 릴레이션에는 동일한 투플이 존재할 수 없다

  • 모든 투플에는 다른 투플과 구별되는 유일한 특성이 있어야 함 (key를 이용하여 유일성 판단)

2) 투플의 무순서 - 하나의 릴레이션에서 투플 사이의 순서는 무의미하다

  • 데이터베이스는 위치가 아닌 내용으로 검색되므로 투플의 순서는 중요하지 않음
    삽입 순서에 따라 저장되지만, 효율적인 처리를 위해 투플의 순서를 임의로 변경하기도 함

3) 속성의 무순서 - 하나의 릴레이션에서 속성 사이의 순서는 무의미하다

  • 속성 값은 릴레이션에서 위치가 아닌 속성의 이름으로 접근함

4) 속성의 원자성 - 속성 값으로 원자 값만 사용할 수 있다

  • 하나의 속성은 여러 개의 값, 즉 다중 값을 가질 수 없음
    현실에서는 존재할 수 있으나 관계 데이터 모델은 복잡한 개념을 배제하고 릴레이션을 단순한 구조로 정의하고자 하는 특징 (다중 값을 허용 안함)

키의 종류

키(key)

  • 릴레이션에 포함된 투플들을 유일하게 구별해주는 역할
    관계 데이터 모델에서 중요한 제약조건을 정의 및 투플을 처리하는 데 중요한 역할을 수행
  • 슈퍼키(super key), 후보키(candidate key), 기본키(primary key), 대체키(alternate key), 외래키(foreign key)가 존재

슈퍼키

  • 슈퍼키는 유일성(uniqueness)의 특성을 만족하는 속성 또는 속성들의 집합

    유일성은 키가 갖추어야 하는 기본 특성이며, 하나의 릴레이션에서 키로 지정된 속성 값은 투플마다 달라야 한다는 의미 > 키 값이 같은 투플은 존재할 수 없다

후보키

  • 후보키는 유일성과 최소성(minimality)을 만족하는 속성 또는 속성들의 집합

    최소성은 꼭 필요한 최소한의 속성들로만 키를 구성하는 특성이며, 하나의 속성으로 구성된 키는 최소성을 만족

슈퍼키 중에서 최소성을 만족하는 것이 후보키가 됨

후보키가 되기 위해 만족해야 하는 유일성과 최소성의 특성은 새로운 투플이 삽입되거나 기존 투플의 속성 값이 바뀌어도 유지되어야 함
현재의 릴레이션 내용, 즉 릴레이션 인스턴스만 보고 유일성과 최소성을 판단해서는 안됨
데이터베이스가 사용될 현실 세계의 환경까지 염두에 두고 속성의 본래 의미를 정확히 이해한 후 슈퍼키와 후보키를 선별해야 함

기본키

  • 데이터베이스 설계자나 관리자가 여러 후보키 중에서 기본적으로 사용할 키를 선택한 것
    후보키가 여러 개일 경우 데이터베이스 사용 환경을 고려하여 적합한 것을 기본키로 선택

  • 기본키 선택 고려 사항

    • 널 값을 가질 수 있는 속성이 포함된 후보키는 부적합
    • 값이 자주 변경될 수 있는 속성이 포함된 후보키는 부적합
    • 단순한 후보키 선택

대체키

  • 기본키로 선택되지 못한 후보키

외래키

  • 어떤 릴레이션에 소속된 속성 또는 속성 집합이 다른 릴레이션의 기본키가 되는 키
    다른 릴레이션의 기본키를 그대로 참조하는 속성의 집합
    외래키는 릴레이션들 사이의 관계를 올바르게 표현하기 위해 필요

  • 참조하는 릴레이션과 참조되는 릴레이션이 같을 수도 있음 (자기 참조)

    외래키는 기본키를 참조하지만 기본키가 아니기 때문에 널 값을 가질 수 있고, 서로 다른 투플이 같은 값을 가질 수 있음

    외래키가 되는 속성과 기본키가 되는 속성의 이름은 달라도 된다 하지만 외래키 속성의 도메인과 기본키 속성의 도메인은 반드시 같아야 한다
    도메인이 같아야 연관성 있는 투플을 찾기 위한 비교 연산이 가능
    외래키가 참조되는 릴레이션의 기본키가 아닌 다른 키를 참조할 경우
    투플을 유일하게 특정짓기 어렵기 때문에 관련 있는 투플을 검색하지 못할 수도 있음

관계 데이터 모델의 제약

관계 데이터 모델에서 정의하고 있는 기본 제약 사항은 키와 관련한 무결성 제약조건(integrity constraint)

무결성

  • 데이터에 결함이 없는 상태, 즉 데이터가 정확하고 유효하게 유지된 상태를 의미

무결성 제약조건의 주요 목적

  • 데이터베이스에 저장된 데이터의 무결성을 보장하고, 데이터베이스의 상태를 일관되게 유지하는 것
    무결성 제약조건은 데이터베이스가 어떤 상태나 시점에서도 무조건 지켜야 하는 중요한 규칙

개체 무결성 제약조건(entity inegrity constraint)

  • 기본키를 구성하는 모든 속성은 널 값을 가지면 안 된다는 규칙
    기본키를 구성하는 속성 전체나 일부가 널 값이 되면 투플의 유일성을 판단할 수 없어 기본키의 본래 목적을 상실

    개체 무결성 제약조건을 만족시키려면 새로운 투플이 삽입되는 연산과 기존 투플의 기본키 속성 값이 변경되는 연산이 발생할 때 기본키에 널 값이 포함되는 상황에서는 연산의 수행을 거부해야 함 이것은 DBMS가 자동으로 수행하기에 사용자는 새로운 릴레이션을 생성할때 기본키를 어떤 속성들로 구성할 것인지 전달만 하면 됨

참조 무결성 제약조건(referential inegrity constraint)

  • 외래키는 참조할 수 없는 값을 가질 수 없다는 규칙
    외래키가 자신이 참조하는 릴레이션의 기본키와 상관이 없는 값을 가지게 되면 두 릴레이션을 연관시킬 수 없으므로 외래키 본래의 의미가 없어짐

    외래키는 참조 가능한 값만 가져야 하지만, 널 값을 가진다고 해서 참조 무결성 제약조건을 위반한 것으로 판단해서는 안됨

  • 참조되는 릴레이션A 에서 투플a가 삭제될 경우 연관된 투플b가 참조하는 릴레이션 B에 남아 있으면

    • 해당 투플a를 삭제하는 연산을 수행하지 않음

    • 연관된 투플b를 함께 삭제

    • 투플b를 null 값이나 기본 값으로 지정

      셋 중 하나를 이용하여 참조 무결성 제약조건을 만족시켜야 함

      데이터베이스 상태가 빈번하게 변경되는 경우 참조 무결성 제약조건을 만족시키기 쉽지 않지만 이는 DBMS에서 자동으로 수행
      사용자는 어떤 속성들이 외래키이고 어떤 릴레이션의 기본키를 참조하면 되는지 전달하고, 위반하게 되는 경우에 어떻게 처리할지 설정만 하면 됨

출처 - 김연희저자의 데이터베이스 개론 2판 - 한빛 아카데미

profile
능력있는 DBA가 되고자하는 초짜 DBA

0개의 댓글