Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

[데이터베이스] 2장. 관계 데이터 모델과 제약 조건 본문

3학년 1학기 전공/데이터베이스

[데이터베이스] 2장. 관계 데이터 모델과 제약 조건

시데브 2024. 3. 14. 19:17
경희대학교 컴퓨터공학부 이영구 교수님의 데이터베이스 수업자료를 기반으로 작성한 게시물입니다.

 

 

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

  • 관계 데이터 모델은 지금까지 제안된 모델들 중 가장 개념이 단순한 데이터 모델의 하나
  • IBM 연구소의 E.F. Codd가 1970년에 관계 데이터 모델 제안
  • 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS 시제품은 1970년대 IBM 연구소에서 개발된 System R
  • 1980년대 후반부터 여러 가지 데이터 모델들이 새로 등장했지만 관계 DBMS는 여전히 가장 널리 사용되는 DBMS

 

관계 데이터 모델이 큰 성공을 거둔 요인

  • 바탕이 되는 데이터 구조로서 간단한 테이블(릴레이션)을 사용 -> 테이블과 달리 릴레이션은 중복을 허용하지 않으며, 단일 값만을 포함한다.
  • 중첩된 복잡한 구조가 없음
  • 집합 위주로 데이터 처리
  • 타 데이터 모델에 비해, 이론이 잘 정립됨
  • 관계 데이터베이스 설계, 효율적 질의 처리 면에서 뛰어난 장점을 가짐
  • 표준 데이터베이스 응용에 대해 좋은 성능을 보임
  • 숙련되지 않은 사용자도 쉽게 이해할 수 있음

 

2.1. 관계 데이터 모델의 개념

  • 관계 데이터 모델: 동일한 구조(relation)의 관점에서 모든 데이터를 논리적으로 구성

-> 논리적으로 연관된 데이터를 연결하기 위해서 링크나 포인터를 사용하지 않음

  • 선언적인 질의어를 통한 데이터 접근을 제공

-> 사용자가 워하는 데이터(what)만 명시, 어떻게 이 데이터를 찾을 것인가(how)는 명시할 필요가 없음

-> 응용 프로그램들은 데이터베이스 내의 레코드들의 어떠한 순서와도 무관하게 작성됨

 

기존 데이터 모델 -> 개발자 실력에 따라 성능이 달라짐
관계 데이터 모델 -> 사용자가 초보자라 하더라도 좋은 성능 얻을 수 있음 
, 링크를 사용하지 않고 테이블로만 데이터 표현 -> 그렇다면 관계는 어떻게 표현하느냐? -> 외래 키 이용

 

기본적인 용어

  • relation: 2차원의 테이블(스프레드 시트와 유사)
  • record: 릴레이션의 각
  • tuple: 레코드를 좀 더 공식적으로 부르는 용어
  • attribute: relation에서 이름을 가진 하나의

 

도메인(domain)

  • Domain: 한 attribute에서 나타날 수 있는 값들의 집합
  • 각 애트리뷰트의 도메인의 값들은 원자값(더이상 논리적으로 분해될 수 없는 값) - https://m.blog.naver.com/tlrror9496/221811555864
  • 프로그래밍 언어의 데이터 타입과 유사함
  • 동일한 domain이 여러 attributes에서 사용될 수 있음
  • 복합 속성(composite attribute)나 다치 속성(multivalued attribute)은 허용되지 않음
entity: 정보가 저장될 수 있는 독립적인 존재. ex) 사람, 부서, 학생, 사원, 과목

composite attribute: 몇 개의 기본적인 simple attribute로 분해할 수 있는 속성 ex) 주소 -> 시, 구, 동, ..
multivated attribute: 하나의 엔티티에 대해서 여러 값을 가질 수 있는 속성  ex) 취미, ..

https://hyonee.tistory.com/117

 

도메인 정의와 예시

 

차수(degree)와 카디날리티(cardinality)

차수

  • 한 릴레이션에 들어 있는 attributes의 수
  • 유효한 릴레이션의 최소 차수는 1
  • 릴레이션의 차수는 자주 바뀌지 않음
  • 차수 -> 데이터베이스의 스키마

카디날리티

  • 릴레이션의 tuples 수
  • 유효한 릴레이션은 카디날리티 0을 가질 수 있음
  • 릴레이션의 카디날리티는 시간이 지남에 따라 계속해서 변함
  • 카디날리티 -> 데이터베이스의 상태

relation - table - file

tuple - row/record - record

attribute - column - field

 

널값(null value)

  • '알려지지 않음' or '적용할 수 없음'을 나타내기 위해 널값을 사용
  • ex) 사원 relation에 새로운 사원에 관한 tuple 입력하는데, 신입 사원의 DNO(부서번호)가 결정되지 않았을 수 있음
  • 널값은 숫자 도메인의 0이나 문자열 도메인의 공백 문자 or 공백 문자열과 다름
  • DBMS들마다 널값을 나타내는 다른 기호 사용

 

릴레이션 스키마(relation schema)

  • relation의 이름과 attributes의 집합
  • relation을 위한 틀(framework)

 

RelationName(attribute 1, attribute 2, ... attribute N)

 

  • 기본 키 attribute에는 밑줄 표시
  • 내포(intension)라고 함
리스트가 아니라 집합? -> 집합은 순서가 없고, 중복이 X

 

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

  • 릴레이션의 어느 시점에 들어 있는 tuples의 집합
  • 시간의 흐름에 따라 계속 변함
  • 일반적으로 relation에는 현재의 instance만 저장됨
  • 외연(extension)이라고 함

 

관계 데이터베이스(relational database) 스키마

  • 하나 이상의 릴레이션 스키마들로 이루어짐
  • 릴레이션 스키마들을 모아놓은 것

 

관계 데이터베이스 인스턴스

  • 릴레이션 인스턴스들의 모임으로 구성됨
  • 릴레이션 인스턴스들을 모아놓은 것

 

2.2. 릴레이션의 특성

릴레이션

  • tuple들의 집합

릴레이션의 특성

  • 각 relation은 오직 하나의 record type만 포함(같은 스키마?)
  • 한 attribute 내의 값들은 모두 같은 type
  • attributes의 순서는 중요하지 않음
튜플을 고유하게 만들어주는 attributes를 모아놓은 것 -> key

10 -> 원자값
{8, 9} -> 원자값 X

중복 문제 발생 -> floor라는 relation을 따로 만들어서 DEPTNO, Floor만 넣어두어 표현

  • 각 attribute의 이름은 한 릴레이션 내에서만 고유
  • tuple의 순서는 중요 X

 

2.3. 릴레이션의 키 

  • 데이터베이스에서 조건에 만족하는 튜플을 찾거나 순서대로 정렬할 때, 기준이 되는 속성을 말한다. (https://moonibot.tistory.com/61)
  • 수퍼 키(Super key), 후보 키(Candidate key), 기본 키(Primary key), 대체 키(Alternate key), 외래 키(Foreign key)

 

수퍼 키(super key)

  • 한 릴레이션 내의 특정 tuple을 고유하게 식별하는 하나의 attribute 혹은 attribute들의 집합
  • ex) 신용카드 회사의 고객 relation에서 (신용카드번호, 주소) 혹은 (주민등록번호, 이름) 혹은 (주민등록번호)
  • tuple들을 고유하게 식별하는데 꼭 필요하지 않은 attribute들을 포함할 수 있음

https://jerryjerryjerry.tistory.com/49

후보 키(candidate key)

  • 각 tuple을 고유하게 식별하는 최소한의 attribute들의 모임
  • ex) (신용카드번호, 주소)는 신용카드 회사의 고객 릴레이션의 후보 키가 아니지만 (신용카드번호)는 후보 키
  • 모든 릴레이션에는 최소한 한 개 이상의 후보 키가 있음
  • 후보 키도 두 개 이상의 attribute로 이루어질 수 있으며 이런 경우 복합 키(composite key)라고 부름

https://jerryjerryjerry.tistory.com/49

-> 학번, 이메일은 후보 키가 될 수 있음

-> 미래 언젠가 동명이인이 추가되면 이름은 더이상 고유해지지 않음 -> 후보 키가 될 수 없음

 

기본 키(primary key)

  • 한 relation에 candidate key가 두 개 이상 있으면, 설계자 혹은 데이터베이스 관리자가 이들 중에서 하나를 기본 키로 선정
  • ex) 신용카드 회사의 고객 relation에서 신용카드번호와 주민등록번호가 후보 키가 될 수 있는데, 이 중에서 신용카드번호를 기본 키로 선정
  • 자연스러운 기본 키를 찾을 수 없는 경우 -> 레코드 번호와 같이 종종 인위적인 key attribute를 relation에 추가

 

대체 키(alternate key)

  • 기본 키가 아닌 후보 키
  • ex) 위의 경우에서 신용카드번호를 기본 키로 선정했으니, 주민등록번호는 대체 키

 

외래 키(foreign key)

  • 어떤 relation의 기본 키를 참조하는 attribute
  • 관계 데이터베이스에서 relation들 가의 관계를 나타내기 위해서 사용됨
  • 외래 키 attribute는 참조되는 relation의 기본 키와 동일한 domain을 가져야 함(data type, 범위, 제한 조건 등)
  • 자신이 속한 relation의 기본 키의 구성요소가 되거나 되지 않을 수 있음

 

외래 키의 유형

-> 수강 relation에서 학번, 과목번호는 각각이 외래 키 -> 두 외래 키가 합쳐져서 기본 키가 될 수 있음

 

2.4. 무결성 제약조건

데이터 무결성(data integrity)

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

 

도메인 제약조건(domain constraint)

  • 각 attribute 값이 반드시 원자값이어야 함
  • attribute 값의 디폴트 값, 가능한 값들의 범위 등을 지정 가능
  • 데이터 형식을 통해 값들의 유형을 제한, CHECK 제약 조건을 통해 값들의 범위를 제한 가능
  • SQL2는 도메인을 명시적으로 정의하는 것을 허용하지만, 오라클은 지원 X

 

키 제약조건(key constraint)

  • key attribute에 중복된 값이 존재해서는 안 됨

PRIMARY KEY

  • PRIMARY KEY 제약 조건을 설정하면, 해당 필드는 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가진다.
  • PRIMARY KEY를 명시하면, 해당 필드가 기본 키로 설정된다.
CREATE TABLE Persons (
ID int PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);

CREATE TABLE Persons (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);

 

https://www.tcpschool.com/mysql/mysql_constraint_primaryKey

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

기본 키와 엔티티 무결성 제약조건(entity integrity constraint)

  • 기본 키가 각 tuple들을 식별하기 위해 사용되기 때문에, relation의 기본 키를 구성하는 어떤 attribute도 NULL값을 가질 수 없다는 제약조건 -> 널값을 가진 키가 2개면 둘을 구별할 수 없기 때문에, 기본 키는 널값을 가질 수 없다. 기본 키를 제외하고는 널값 가능
  • 대체 키에는 적용되지 않음
  • 사용자는 릴레이션을 생성하는 데이터 정의문에서 어떤 attribute가 relation의 기본 키의 구성요소인가를 DBMS에 알려줌

 

외래 키와 참조 무결성 제약조건(referential integrity constraint)

  • 참조 무결성 제약조건은 두 릴레이션의 연관된 tuple들 사이의 일관성을 유지하는데 사용됨
  • 관계 데이터베이스가 relation들로만 이루어지고, relation 사이의 관계들이 다른 relation의 기본 키를 참조하는것을 기반으로 하여 묵시적으로 표현되기 때문에 외래 키의 개념이 중요
  • relation R2의 외래 키가 relation R1의 기본 키를 참조할 때, 참조 무결성 제약 조건은 아래의 두 조건 중 하나가 성립되면 만족됨
  1. 외래 키의 값은 R1의 어떤 tuple의 기본 키 값과 같다. ex) 회사에 없는 부서 번호를 사원이 가지면 안 됨
  2. NULL 값을 가진다. 단, 외래 키가 자신을 포함하고 있는 relation의 기본 키를 구성하고 있지 않음 -> relation의 기본 키의 일부이면 널 값을 가질 수 없음 ex) 아직 부서배정이 되지 않은 경우 -> NULL 값 가능

-> DEPARTMENT는 참조된 릴레이션, EMPLOYEE는 참조하는 릴레이션

무결성 제약조건의 유지

  • 데이터베이스에 대한 갱신 연산삽입 연산, 삭제 연산, 수정 연산으로 구분함
  • DBMS는 각각의 갱신 연산에 대하여, 데이터베이스가 무결성 제약 조건들을 만족하도록 필요한 조치를 취함
  • ex) DBMS는 외래 키가 갱신되거나 참조된 기본 키가 갱신되었을 때, 무결성 제약조건이 위배되지 않도록 해야 함

삽입

  • 참조되는 릴레이션에 새로운 tuple 삽입 -> 참조 무결성 제약조건은 위배 X
  • DEPARTMENT에 새로 삽입되는 tuple의 기본 키 attribute의 값에 따라서는 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건 등을 위배할 수 있음 
  • 제약조건을 위배하는 삽입 연산은 DBMS가 거절함으로써 무결성 유지

삭제

  • 참조하는 relation에서 tuple이 삭제되면 도메인 제약조건, 키 제약조건, 엔티티 무결성 제약조건, 참조 무결성 제약조건 등 모든 제약조건을 위배하지 않음
  • 참조되는 릴레이션에서 tuple이 삭제되면 참조 무결성 제약조건을 위배하는 경우가 생길 수 있음
참조하는 쪽에서의 삭제는 아무런 문제 X

참조되고 있는 쪽의 relation에서 tuple이 삭제될 때 -> 부서가 하나 사라지면, 그 부서에 속한 사원들이 갈 곳이 X -> 참조 무결성 제약조건 위배

 

참조 무결성 제약조건을 만족시키기 위해서 DBMS가 제공하는 옵션

제한(restricted)

  • 위배를 야기한 연산을 단순히 거절

연쇄(cascade)

  • 참조되는 relation에서 tuple을 삭제하고, 참조하는 relation에서 이 tuple을 참조하는 tuple들도 같이 삭제.

널값(nullify)

  • 참조되는 relation에서 tuple을 삭제하고, 참조하는 relation에서 이 tuple을 참조하는 tuple들의 외래 키에 NULL값을 삽입
  • ex) 부서번호 3이 삭제되면 -> 부서번호 3을 참조하는 사원들에 널값을 삽입

디폴트값

  • 널값을 넣는 대신에 디폴트값을 넣는다는 것을 제외하고는 바로 위의 옵션과 비슷

ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
-> 외래 키 지정시에 ON DELETE, ON UPDATE 옵션 지정 
1. RESTRICT : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 변경/삭제가 취소됩니다.(제한)

2. CASCADE : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 함께 변경/삭제됩니다.

3. NO ACTION : MYSQL에서는 RESTRICT와 동일합니다.

4. SET NULL : 개체를 변경/삭제할 때 다른 개체가 변경/삭제할 개체를 참조하고 있을 경우 참조하고 있는 값은 NULL로 세팅됩니다.

5. SET DEFAULT : 개체를 변경/삭제할 때 다른 개체는 DEFAULT값으로 세팅됨

https://h5bak.tistory.com/125 [이준빈은 호박머리]

수정 

  • DBMS는 수정하는 attribute가 기본 키인지 외래 키인지 검사함
  • 수정하려는 attribute가 기본키도 아니고 외래 키도 아니면 -> 수정 연산이 참조 무결성 제약조건을 위배하지 않음
  • 제한, 연쇄, 널값, 디폴트값 규칙이 수정 연산에도 적용됨
  • 오라클에서는 수정 연산에 대해 제한적으로 참조 무결성 제약조건을 유지 -> 기본 키는 변경하면 안 된다는 철학

참고자료

  • 『데이터베이스 배움터』, 홍의경 지음, 생능출판, 2012년 08월 29일