본문 바로가기
컴퓨터공학/전공공부

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

by hobbiz 2021. 4. 21.
반응형


관계(Relationship)의 참여 제약조건이 외래키에 미치는 영향이 무엇인지 생각해 보자.


2.문항 출제 목표
관계(Relationship)의 참여 제약조건이 외래키 값의 null 발생과
외래키 값으로 나타날 수 있는 값의 범위에 끼치는 영향을 파악할 수 있도록 한다.

 

 

관계 데이터 모델의 성공 요인

  • 간단한 테이블(릴레이션)을 사용한다.
  • 중첩된 복잡한 구조가 없어서 초보 사용자도 쉽게 이해할 수 있다.
  • 집합 위주로 데이터를 처리하므로 여러 테이블을 보여줄 수 있다.
  • 표준 데이터베이스 응용에 대해 좋은 성능을 보인다.
  • 다른 데이터 모델에 비해 이론이 잘 정립되어 있다.
  • 관계 데이터베이스는 설계와 효율적인 질의 처리 면에서 뛰어난 장점을 가진다.

 

관계 데이터 모델의 특징

  • 동일한 구조(릴레이션)의 관점에서 모든 데이터를 논리적으로 구성한다.
  • 선언적인 질의어를 통한 데이터 접근이 가능하다.
  • 응용 프로그램들은 데이터베이스 내의 레코드들의 어떠한 순서와도 무관하게 작성된다.
  • 사용자는 원하는 데이터만 명시하고, 데이터를 찾는 방식은 명시할 필요가 없다.
  • 논리적으로 연관된 데이터를 연결하기 위해서 링크나 포인터를 사용하지 않는다.

 

용어

  • 릴레이션(relation) 또는 테이블(table) : 2차원의 테이블 (스프레드 시트와 유사하다.)
  • 레코드(record) 또는 투플(tuple) : 릴레이션의 각 행
  • 애트리뷰트(attribute) : 릴레이션에서 이름을 가진 하나의 열
  • 카디날리티(cardinality) : 투플()들의 수, 자주 변경된다. 0을 가질 수 있다.
  • 차수(degree) : 애트리뷰트()들의 수, 자주 변경되지 않는다. 유효한 최소 차수는 1이다.

 

도메인(domain)

  • 한 애트리뷰트(컬럼)에 나타날 수 있는 값들의 집합
  • 각 애트리뷰트의 도메인의 값들은 각각 단일값(원자값)을 가진다.
  • 프로그래밍 언어의 데이터 타입과 유사하다.
  • 동일한 도메인이 여러 애트리뷰트에서 사용될 수 있다.
  • 복합 애트리뷰트나 다치 애트리뷰트(배열)은 허용되지 않는다.
  • 형식 : CREATE DOMAIN 컬럼명 타입

 

EMPNO

EMPNAME

TITLE

DNO

SALARY

2106

홍길동

대리

2

2,000,000

3426

이순신

과장

3

2,500,000

3011

유관순

부장

1

3,000,000

1003

안중근

대리

1

2,000,000

3427

장발장

사원

3

1,500,000

 

 

위의 릴레이션에서 EMPNAME, EMPNO, DNO 도메인을 각각 정의하면,

 

CREATE DOMAIN EMPNAME CHAR(10)

 

 

CREATE DOMAIN EMPNO INTEGER

 

 

CREATE DOMAIN DNO INTEGER

 

 

 

널값(null value)

  • 알려지지 않거나 적용할 수 없는 데이터의 경우 널값을 사용한다.
  • 널값은 숫자 도메인의 0이나 문자열 도메인의 공백 문자 또는 공백 문자열과는 다르다.
  • DBMS들마다 널값을 나타내기 위해 서로 다른 기호를 사용한다.
  • 예를 들어, 사원 릴레이션에 새로운 사원에 관한 투플을 입력하는데 신입사원의 DNO(부서번호)가 결정되지 않았을 경우 널값을 사용한다.

 

릴레이션 스키마(Relation Schema 또는 Table Schema)

  • 릴레이션의 이름과 릴레이션의 애트리뷰트들의 집합
  • 릴레이션을 위한 틀(framework), 내포(intension)라고도 한다.
  • 기본 키 애트리뷰트에는 밑줄이 표시된다.
  • 형식 : 릴레이션이름(애트리뷰트1, 애트리뷰트2, ... 애트리뷰트N)
  • ex) EMPLOYEE(EMPNO, EMPNAME, TITLE, DNO, SALARY)

 

릴레이션 인스턴스(Relation Instance)

  • 릴레이션에 어느 시점에 들어 있는 투플들의 집합
  • 시간의 흐름에 따라 계속 변한다.
  • 대부분 릴레이션에는 현재 인스턴스()만 저장된다. , 과거의 값은 저장되지 않는다.
  • 외연(extension)이라고도 한다.

 

 

* 관계 데이터베이스 스키마는 하나 이상의 릴레이션 스키마들로 이루어지고, 인스턴스는 릴레이션 인스턴스들의 모임으로 구성된다.

 

릴레이션의 특징

  • 릴레이션 자체는 투플들의 집합이다.
  • 각 릴레이션은 오직 하나의 투플 유형만 포함한다. 예를 들어, 부서 릴레이션에 사원 데이터가 올 수 없다.
  • 한 애트리뷰트 내의 값들은 동일한 타입의 투플 값이므로 모두 같은 유형이다.
  • 애트리뷰트 및 투플들의 순서는 중요하지 않다.
  • 완전히 동일한 투플이 두 개 이상 존재하지 않는다. by 집합론
  • 한 투플의 각 애트리뷰트는 단일값을 가진다. {8, 9}와 같은 다치 애트리뷰트는 허용되지 않는다.
  • 각 애트리뷰트의 이름은 한 릴레이션 내에서만 고유하다. , 다른 릴레이션 간의 컬럼 이름이 중복될 수 없다.

 

릴레이션의 키(Key)

  • 각 투플들을 고유하게 식별할 수 있는 하나 이상의 애트리뷰트들의 모임이다.
  • 수퍼 키(Super key) : 한 릴레이션 내의 특정 투플을 고유하게 식별하는 하나 이상의 애트리뷰트들의 집합이다투플들을 고유하게 식별하는데 꼭 필요하지 않은 애트리뷰트들을 포함할 수 있다.

ex) 신용카드 회사의 고객 릴레이션에서 (신용카드번호, 주소) 또는 (주민등록번호, 이름) 또는 (주민등록번호)가 수퍼키가 될 수 있다.

  • 후보 키(Candidate Key) : 각 투플을 고유하게 식별하는 최소한의 애트리뷰트들의 모임이다모든 릴레이션에는 최소한 한 개 이상의 후보 키가 있다후보 키도 두 개 이상의 애트리뷰트로 이루어질 수 있으며 이런 경우 복합 키(Composite Key)라고 부른다.

ex) (신용카드번호, 주소)는 신용카드 회사의 고객 릴레이션의 후보 키가 아니지만 (신용카드번호)는 후보 키가 된다. 주소의 경우 중복될 수 있으므로 고유 식별자라 보기 힘들다.

 

ex) (학번, 과목번호)가 후보 키인 것은 학번이나 과목번호 각각으로는 레코드를 구별하기 어려우므로 두 속성을 합쳐서 식별자 역할[복합 키]을 부여한다.

  • 기본 키(Primary Key) : 한 릴레이션에 후보 키가 두 개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정할 수 있다. 자연스러운 기본 키를 찾을 수 없는 경우 레코드 번호와 같이 인위적인 키 애트리뷰트를 릴레이션에 추가하기도 한다. 릴레이션에 하나만 존재한다.

ex) 신용카드 회사의 고객 릴레이션에서 신용카드번호와 주민등록번호가 후보 키가 될 수 있다. 이 중에서 신용카드 번호를 기본 키로 선정하는 경우

  • 대체 키(Alternate Key) : 기본 키로 선정되지 못한 후보키로, 신용카드 회사의 고객 릴레이션에서 신용카드 번호를 기본 키로 선정하면 주민등록번호는 대체 키가 된다.
  • 외래 키(Foreign Key) : 어떤 릴레이션(참조되는 릴레이션)의 기본 키를 참조하는 애트리뷰트

- 관계 데이터베이스에서 릴레이션들 간의 관계를 나타내기 위해 사용된다.

- 외래 키를 가진 릴레이션을 참조하는 릴레이션이라 부른다.

- 외래 키 애트리뷰트는 참조되는 릴레이션의 기본 키에 있는 값들만 가져야한다.

- 자신이 속한 릴레이션의 기본 키의 구성요소가 되거나 되지 않을 수 있다.

- 참조되는 릴레이션이 참조하는 릴레이션이 될 수도 있다. (자신의 기본 키를 참조할 수 있다.)

 

 

EMPLOYEE 테이블의 (DNO)가 DEPARTMENT 테이블의 (DEPTNO)를 참조하고 있다.

, DNO는 사원 테이블의 외래키가 되므로

EMPLOYEE : 참조하는 릴레이션

DEPARTMENT : 참조되는 릴레이션

 

 

자기 자신의 기본 키를 참조할 경우, 외래 키는 기본 키에 없는 값인 NULL을 가질 수 있다.

 

 

데이터 무결성(Data Integrity)

  • 데이터의 정확성이나 유효성을 의미한다.
  • 일관된 데이터베이스 상태를 정의하는 규칙들을 묵시적으로 또는 명시적으로 정의해야 한다.
  • 데이터베이스가 갱신될 때 DBMS가 자동적으로 일관성 조건을 검사하므로 응용 프로그램들은 일관성 조건을 검사할 필요가 없다.

 

도메인 제약조건(Domain Constraint)

  • 각 애트리뷰트 값이 반드시 단일값이어야 한다.
  • 애트리뷰트 값의 디폴트 값, 가능한 값들의 범위 등을 지정할 수 있다.
  • 데이터 타입을 통해 값들의 유형을 제한하고, CHECK 질의어를 통해 값들의 범위를 제한할 수 있다.

 

키 제약조건(Key Constraint)

  • 키 애트리뷰트에 중복된 값이 존재해서는 안 된다.
  • 외래키의 경우, 키 제약조건을 받지 않는다.

 

엔티티 무결성 제약조건(Entity Integrity Constraint)

  • 릴레이션의 기본키를 구성하는 어떤 애트리뷰트도 널값을 가질 수 없다.
  • 대체 키(기본 키가 되지 못한 후보 키)에는 적용되지 않는다.
  • 사용자는 릴레이션을 생성하는 데이터 정의문(SQL)에서 어떤 애트리뷰트가 릴레이션의 기본키의 구성요소인가를 DBMS에게 알려준다. -> SQL : primary key (`컬럼명`);

 

  참조 무결성 제약조건(Referential Integrity Constraint)

  • 두 릴레이션의 연관된 투플들 사이의 일관성을 유지하는데 사용된다.
  • 관계 데이터베이스가 릴레이션들로만 이루어지고, 릴레이션 사이의 관계들이 다른 릴레이션의 기본 키를 참조하는 것을 기반으로 하여 묵시적으로 표현되기 때문에 외래키가 가지는 참조 무결성 제약조건은 정!! 중요하다.
  • 릴레이션 R2의 외래 키가 릴레이션 R1의 기본 키를 참조할 때 참조 무결성 제약조건은 아래의 두 조건 중 하나가 성립되면 만족된다.

- 외래 키의 값은 R1의 어떤 투플의 기본 키 값과 같다. (Not Null)

- 외래 키가 자기 자신의 기본 키를 참조할 경우, 외래 키는 널값을 가질 수 있다.

 

 

무결성 제약조건의 유지

  • 데이터베이스에 대한 갱신 연산은 삽입 연산, 삭제 연산, 수정 연산으로 구분한다.
  • DBMS는 각각의 갱신 연산에 대하여 데이터베이스가 무결성 제약조건들을 만족하도록 필요한 조치를 취한다.
  • DBMS는 외래 키가 갱신되거나, 참조된 기본 키가 갱신되었을 때 참조 무결성 제약조건이 위배되지 않도록 해야 한다. (특히, 삭제 or 수정 연산은 관계에 영향을 미칠 수 있다.)
  • 삽입 연산
    1. 참조되는 릴레이션에 새로운 투플이 삽입되면 참조 무결성 제약조건은 위배되지 않는다.
    2. 참조하는 릴레이션(외래키를 가진)에 새로운 투플을 삽입할 때는 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 외에 참조 무결성 제약조건도 위배할 수 있다. -> 외래 키가 참조하는 기본키에 없는 값을 삽입하는 경우
  • 삭제 연산
    1. 참조하는 릴레이션(외래키를 가진)에서 투플이 삭제되면 모든 제약조건을 위배하지 않는다.
    2. 참조되는 릴레이션에서 투플이 삭제되면 대응되는 외래키의 유무에 따라 참조 무결성 제약조건을 위배하는 경우가 생기거나 생기지 않을 수 있다.
  • 수정 연산
    1. DBMS는 수정하는 애트리뷰트가 기본 키인이 외래 키인지 검사한다.
    2. 수정하려는 애트리뷰트가 기본 키도 아니고 외래 키도 아니면 수정 연산이 참조 무결성 제약조건을 위배하지 않는다.
    3. 기본 키나 외래 키를 수정하는 것은 하나의 투플을 삭제하고 새로운 투플을 그 자리에 삽입하는 것과 유사하므로, 아래에 설명한 DBMS가 제공하는 옵션들이 모두 적용된다.
  • 참조 무결성 제약조건을 만족시키기 위해 DBMS가 제공하는 옵션
    1. 제한(Restricted) : 위배를 야기한 연산은 단순히 거절한다.
    2. 연쇄(Cascade) : 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서도 해당 기본 키를 가진 투플에 대응되는 투플들을 함께 삭제한다.
    3. 널값(Nullify) : 참조되는 릴레이션에서 투플을 삭제하고, 참조하는 릴레이션에서 이 투플을 참조하는 투플들의 외래 키에 널값을 삽입한다.
    4. 디폴트(Default) : 널값을 넣는 대신에 디폴트값을 넣는다는 것을 제외하고는 널값 옵션과 유사하다.

[ 참여 제약 조건 ]

개체 집합 내에서 모든 개체가 참여를 할 수도 있지만 그렇지 않은 경우도 있습니다. 그래서 우리는 모든 개체의 참여 유무에 따라 전체 참여와 구분 참여로 이를 구분합니다. 전체참여는 관계에 개체 집합의 모든 개체가, 부분 참여는 일부의 개체만 참여하는 것입니다. 즉, 전체참여는 (최솟값, 최댓값)에서 최솟값이 1 이상으로 모두 참여한다는 것이고, 부분참여는 최솟값이 0 이상으로 참여를 하지 않는 개체가 있을 수 있다는 의미입니다. 학생이 강좌를 수강하는 관계에서 모든 강좌는 반드시 수강에 포함되어야 하지만 학생은 수강을 하지 않을 수 있으므로 아래의 그림과 같이 표현할 수 있습니다.

 

 

관계에서 각각의 개체는 어떠한 역할을 담당할 수 있기에, 그 역할을 아래와 같이 다이어그램에 표시해주기도 합니다.

 

 

순환적 관계는 하나의 개체 타입이 동일한 개체 타입과 순환적으로 관계를 가지는 형태를 의미합니다. 1진 관계에서 순환적 관계가 표현될 수 있는데, 어떤 학생은 멘토링이라는 관계에서 멘토가 될 수도 있고, 멘티가 될 수도 있습니다. 

 

 

출처:

2. 관계 데이터 모델과 제약조건 :: Move Fast (tistory.com)

[Database] 6. 데이터 모델링(Data Modeling) - MangKyu's Diary (tistory.com)

반응형

댓글