본문 바로가기

데이터베이스기초

[데이타베이스기초] 4장 관계 데이타베이스

   ** 헷갈릴만한 용어 정리

  • 릴레이션 = 테이블, 릴레이션 인스턴스의 집합
  • 애트리뷰트 = 속성, 필드, 테이블 열
  • 도메인
  • 튜플 = 레코드, 테이블 행
  • 인스턴스 = 튜플의 집합
  • 관계 데이터 모델 = 프로그래밍 시스템
  • 릴레이션 인스턴스 = 튜플들의 집합 
  • 데이터베이스 인스턴스 = 모든 릴레이션들의 인스턴스 집합
  • 투플의 수 = 카디널리티, 애트리뷰트의 수(차수) = 디그리

관계 데이타 모델(테이블 형태) -> 관계 데이타베이스

  • 관계 데이타베이스는 관계 데이타 모델에 기반으로 구현된 데이타베이스이다.
  • 1970년 IBM의 E.F.Codd에 의해 제안되었다.

1. 관계 데이타 모델의 특성

  • -수학에서의 릴레이션과 집합 이론에 기초
  • 추상적 개념인 릴레이션을 구체적으로 표현한 것이 테이블이다. 따라서 하나의 릴레이션은 여러 가지 형태의 테이블로 표현이 가능하다.
  • 집합 성질 : 같은 성질을 가진 대상들의 모임이며 이들은 구별할 수 있어야 한다. 또한 닫힌 성질을 갖고 있는데 이는 숫자가 중복되지 않고 순서가 존재하지 않다는 뜻이다.
  • 일반 사용자는 테이블 형태로 생각하지만
  • -> 통상적인 테이블의 개념과는 다른 "릴레이션"
  • -> 관계 데이타 모델의 직관적인 이해에 도움
  • -> 테이블의 열 = 필드, 아이템 -> 관계 데이타 모델의 애트리뷰트
  • -> 테이블의 행 = 레코드 -> 관계 데이타 모델의 투플
  • 데이터베이스를 구성하는 개체, 관계를 모두 릴레이션으로 표현 -> 개체 릴레이션, 관계 릴레이션이 있다.

2. 애트리뷰트와 도메인

(1) 도메인

  • 테이블 = 릴레이션 유사하다 !!
  • 하나의 애트리뷰트가 취할 수 있는 같은 타입의 모든 원자 값들의 집합
  • -> WHY? 도메인 정의할 때 CREATE DOMAIN DOMAIN명 데이타타입 !! 따라서 데이타타입을 가질 수 있는 모든 값들의 집합이 도메인에 들어가겠죠??? -> 그 중에서 애트리뷰트가 골라서 쓰는 거임
  • 데이터 타입은 애트리뷰트의 값들이 가질 수 있는 형식을 정의, 예를 들어, 정수형 데이터 타입은 정수 값들의 집합을, 문자열 데이터 타입은 문자열 값들의 집합
  • 성질이 같은 도메인의 값들끼리만 비교가 허용된다.
  • 프로그래밍 언어의 데이터 타입
  • 단순 도메인과 복합 도메인이 있다.
  • 단순 도메인 -> 단순 애트리뷰트=원자 값으로 된 도메인
  • 복합 도메인 -> 복합 애트리뷰트(복합값) 예를 들어 날짜라는 하나의 애트리뷰트에 <연, 월, 일> 세 가지의 값이 들어갈 수 있는 애트리뷰트  그렇지만 값을 하나의 단위로 취급하기 때문에 이 역시 원자값이다.
  • 범위
  • 하나의 도메인에 대해서 둘 이상의 에트리뷰트 정의 ㄱㄴ
  • 도메인은 본질적으로 개념적일 수 밖에 없어서 데이터베이스에 저장이 안 될 수도 있다.

(2) 에트리뷰트 = 속성

  • 데이터베이스에서 애트리뷰트는 테이블의 열(Column)에 해당하며, 각 애트리뷰트는 특정한 데이터 타입(Data Type) 가짐
  • 데이터 타입은 애트리뷰트의 값들이 가질 수 있는 형식을 정의, 예를 들어, 정수형 데이터 타입은 정수 값들의 집합을, 문자열 데이터 타입은 문자열 값들의 집합
  • 원자값만을 허용
  • 도메인의 역할 이름
  •  릴레이션 내에서 애트리뷰트 이름들은 모두 달라야 한다.
  • 학번, 이름, 학년, 학과 등 개체 타입
  • 프로그래밍 언어의 변수
  • 각 도메인 위에서 정의되어야 함
  • 반복그룹, 즉 집합이 될 수 없다. 정규화 릴레이션이니깐 집합 X
  • 에트리뷰트, 즉 속성은 분해가 불가능하며 NULL도 원자값으로 취급한다.
  • 릴레이션의 속성값은 중복될 수 있다. ("이름" 이란 속성을 가진 릴레이션에서 원자값으로 "홍길동"이란 이름이 여러 개일 수 있다.) 투플단위로만 중복 안 되면 되는 거니깐 !!!
  • 같은 속성들을 가진 개체들의 집합은 개체타입 / 예를 들어, 학생 개체 타입은 학번, 이름, 전공 등의 속성을 가질 수 있습니다.
  • 속성의 유일한 식별을 위해서 속성의 명칭은 유일해야 하지만 속성을 규정하는 값은 동일한 값이 있을 수 잇다.

애트리뷰트 이름과 도메인 이름이 같을 수도 있다. (역할 이름을 도메인으로 지정)

릴레이션 애트리뷰트는 해당 도메인의 이름 그대로 사용하거나 별도의 이름 사용할 수 있다.

릴레이션의 개념

  • 릴레이션 스키마 + 릴레이션 인스턴스

1. 릴레이션 스키마

  • 릴레이션 내포 또는 릴레이션 스킴
  • 릴레이션의 이름 + 애트리뷰트의 이름(+애트리뷰트 도메인)
     ex> 학생({학번, 이름, 학년, 학과})
  • 릴레이션 이름 R과 일정 수의 애트리뷰트의 집합으로 구성 -> 각 애트리뷰트는 한 도메인에 정확히 대응
  • 애트리뷰트<학번, 이름, 학년, 학과>는 도메인 INTEGER와 CHAR에 대응
  • 도메인과 애트리뷰트가 정확히 대응 !!
  • 정적 성질(시간에 따라 변경되지 않는다.)
  • 릴레이션 타입과 같은 의미이다. = 개체 타입 = 구조만 있는 껍데기
  • 한 릴레이션의 논리적 구조를 정의
  • 제약조건도 포함 !!!!!! 투플만 포함 X

2. 릴레이션 인스턴스

  • 릴레이션 외연이라고도 함
  • 어느 한 시점에 릴레이션 R에 포함되어 있는 투플들의 집합
  • 투플 인스턴스 = 릴레이션 인스턴스(각 행의 수, 속성들로 이루어진 개체) -> 개체 집합
  • 하나의 투플은 R의 스키마에 정의된 각 애트리뷰트에 대응하는 값 <V1, V2, V3, ...Vn>
  • <100,'가가가', 1, '컴공'> 투플은 R 스키마에 정의된 애트리뷰트<학번, 이름, 학년, 학과>에 대응
  • 투플 = 레코드 = 행 전체를 말하고, 각각의 값이 원자값이다.
  • 투플(레코드, 행)은 여러 개의 애트리뷰트(Attribute)로 구성되어 있으며, 각 애트리뷰트는 원자값(Atomic Value)을 가지고 있습니다.
  • 동적 성질을 가진다.
  • 삽입, 삭제, 갱신으로 시간에 따라 변한다.
  • 집합이기 때문에 데이터가 중복되지 않고 내용에 의한 참조이기 때문에 순서가 존재하지 않는다.
  • 릴레이션의 내용과 상태는 스냅샷처럼 어느 한 시점을 순간적으로 찍은 상태를 갖는다.
  • 릴레이션 값(보통 릴레이션)

릴레이션 R

  • 데이타베이스의 릴레이션은 수학의 관계(카티션 프로덕트로 연결)와 집합(부분집합)에 이론적 기초를 두고있다.

1. 수학적 정의

  • 릴레이션 R: 카티션 프로덕트의 부분집합
  • -> 모든 조합 중 일부만 저장 !!
  • 부분집합인 이유는 수학적으로 모든 가능한 조합 중 일부분이 릴레이션 되기 때문이다. 즉 모든 튜플과 도메인의 집합이다.
  • n개의 도메인의 집합 D1, D2, ,,, Dn(상이할 필요 X) 에 대한 카티션 프로덕트( D1 x D2 x D3 x.... x Dn)는 n-투플<d1, ,d2, d3, ,,,dn>의 집합이라고 정의 -> 수학적 정의로써 릴레이션 R은 하나의 집합
  • 도메인의 수 = 2개의 도메인 가지는 릴레이션과 3개의 도메인 가지는 릴레이션을 카티션 프로덕트하면? 5개의 도메인 갖는 릴레이션이 나온다!!!!
  • 투플의 수는? 도메인 1의 투플 수 * 도메인 2의 투플 수
  • 투플의 수 = 카디널리티, 애트리뷰트의 수(차수) = 디그리
  • 릴레이션의 카디널리티는 시간에 따라 값 변할 수 있지만, 차수는 변하지 않음 !!
  • 카티션 프로덕트를 기술하는 도메인의 순서가 그 결과에 영향을 준다.

2. 개념적 정의

  • 릴레이션 스키마(애트리뷰트와 도메인의 집합) + 릴레이션 인스턴스(튜플들의 집합)이다. 간단하게는 튜플, 인스턴스의 집합이라고 한다.

릴레이션의 특성(4가지)

  • 릴레이션은 외형적으로 일반 테이블과 똑같아 보이지만, 그 성질에 있어서 다르다.

1. 투플의 유일성

  • 릴레이션은 투플들의 집합
  • 한 릴레이션에 포함된 투플들 모두 상이

2. 투플의 무순서성

  • 릴레이션은 투플들의 집합
  • 릴레이션은 추상적 개념이다.
  • 테이블은 릴레이션을 외부로 기술하는 하나의 구체적 표현

3. 애트리뷰트의 무순서성

  • 릴레이션 스키마는 애트리뷰트들의 집합
  • 한 릴레이션을 구성하는 애트리뷰트는 <애트리뷰트 : 값>처럼 서로 짝으로 존재할 뿐 순서가 없다.
  • 위의 예시를 들어 설명하자면 데이터를 집어넣을 때 학번을 먼저 넣으나 이름을 먼저 넣으나 상관이 없다. (물론 SQL에서는 순서 중요함)

4. 애트리뷰트의 원자성

  • 애트리뷰트는 논리적으로 더 이상 분해되지 않는다. 즉 처리상의 단위값이다. 원자 값이다.
    - Null 값도 원자 값으로 취급한다. ① Unknown : 아직 모르는 값 ② Inapplicable : 적용 대상이 아니다.
    - 한 릴레이션에 관련된 모든 도메인이 단순 도메인인 경우에는 애트리뷰트들이 모두 단순 애트리뷰트가 되어 원자값이라는 성질에 적용된다.
    - 복합 도메인이 사용된 경우에는 복합 애트리뷰트 값은 의미가 하나의 단위로 취급하기 때문에 이 역시 문제가 되지 않는다(원자값)
  • 정규화 릴레이션 : 애트리뷰트 값으로 원자 값만 허용되는 릴레이션이다. 비정규화 릴레이션은 분해를 통해 정규화와 동등한 의미를 유지할 수 있다.
  • 비정규화 릴레이션 : 분해를 통해 정규화를 한다.
  • 관계 데이타 모델에서는 기본적으로 정규화 릴레이션만 취급

 

관계 데이타베이스 개념

1. 관계 데이타베이스=관계있는 스키마들의 집합

  • 테이블들의 집합
  • 데이타베이스를 시간에 따라 그 내용(상태)가 변할 수 있는 테이블 형태로 표현
  • 테이블은 서로 연관된 데이터를 구조화하여 저장하는데 사용됩니다. 예를 들어, 고객 정보를 담고 있는 고객 테이블, 주문 정보를 담고 있는 주문 테이블, 제품 정보를 담고 있는 제품 테이블 등으로 구성될 수 있습니다. 이러한 테이블들은 서로 관계를 맺고 있어, 데이터 간의 관계를 활용하여 데이터를 연결하고 조작할 수 있습니다.
  • 대학 관계 데이타베이스(학생, 과목, 등록 테이블이 서로 연관!!.. 스키마들의 집합)
  • 기본키, 외래키 등등으로 서로 연결시킴

2. 관계 데이타베이스 스키마

  • 관계 데이타베이스 스키마 = {릴레이션 스키마의 집합} + {무결성 제약조건}

(1) 관계 데이타 모델 <-> 프로그래밍 시스템

릴레이션 <-> 화일

투플 <-> 레코드(레코드 어커런스)

애트리뷰트 <-> 필드(필드 타입)

  • 논리적 데이타 구조 = 개념 스키마 = 사용자 관점, 물리적 데이타 구조 = 저장장치 관점 중요 1!!
  • -> 관계 데이타베이스라고 할 때 데이타가 물리적 테이블 형태로 저장된다는 것을 의미하지 않는다. 
  • -> 실제로 저장될 때 물리적인 테이블 형태 X ! 테이블은 데이터베이스에서 데이터를 논리적으로 구성하기 위한 개념이지만, 실제로 데이터베이스 시스템은 다양한 기술을 사용하여 데이터를 물리적으로 저장하고 관리
  • -> 관계 데이타베이스라고 할 때 데이타가 논리적 테이블 형태로 저장 -> 사용자 관점에서 테이블로 보니깐 O

 

(관계) 데이터베이스 키

  • 키란 각 튜플을 유일하게 식별할 수 있는 애트리뷰트 집합을 뜻한다.
  • 키가 집합인 이유는 키 하나만으로 구성할 수 없는 떄가 존재하기 때문이다.
  • 이 키를 이용해서 관계 데이타베이스 내의 테이블들을 연결시킨다.
  • 널 값에 대한 비교는 항상 거짓으로 간주한다. 널 값과 영은 구분해줘야 한다. 
  • 널 값은 "알 수 없음", "해당사항 없음" => 원자값

1.후보키 

  • 유일성과 최소성 모두를 만족시키는 릴레이션에 대한 애트리뷰트 집합
  • 유일성 : 각 투플에 대해 K({Ai, Aj, ..., Ak})의 값 (<vi, vj, ..., vk>)은 유일하다. 즉 각 튜플에 대한 키의 값은 유일하다. 키로 정한 것의 속성들이 중복되면 안 된다.
  • 최소성 : 키는 각 튜플을 유일하게 식별하는데 필요한 최소의 애트리뷰트의 수로 구별할 수 있어야 한다.
  • 슈퍼키 중에서 선정 가능핟. 릴레이션에서 1개 이상 나타날 수 있다. 오직 하나만 존재 X 

2. 기본키(Primary Key, PK) = 개체 식별자

  • 후보키 중에서 지정된 하나의 키이고 이는 DBA(데이터베이스 관리자)가 지정한다.
  • 각 튜플에 대한 키 값은 항상 유효값이어야 하기 때문에 널 값은 허용되지 않는다. 이를 개체 무결성 제약조건이라 한다.
  • NOT NULL이다. 유니크하다. 외래키로 참조한다. 검색할 때 꼭 필요한 것은 아니다.

3. 대체키

  • 후보키 중에서 기본 키를 제외한 나머지 후보키들을 말한다.

4. 외래키(Foreign Key, FK) = 널값 가능, 개체 참조, 한 테이블에 여러 개 가능

  • 릴레이션 R의 애트리뷰트 집합 FK릴레이션 S의 기본 키일때 이 FK는 R의 외래키이다.
     즉, FK의 도메인 = S의 기본 키의 도메인을 뜻한다. 
     - FK의 값은 S에 존재하는 값이거나 Null값이어야 한다.
     - R과 S가 같은 릴레이션일 수도 있다. 즉 자기자신을 참조 가능하다.
     - R이 S의 기본 키 FK를 외래키로 가지며 이를 통해 릴레이션 S를 참조할때, R을 참조 릴레이션(Referencing Relation)이라 하며, S를 피참조 릴레이션(Referenced Relation)이라 한다.
  • 관계형 데이터 모델에서 두 개의 릴레이션 사이에서 참조되는 릴레이션의 기본 키 값이 같든지 또는 널 값이어야 하는 애트리뷰트가 있는데 이것은 외래키 !!!!!!!!
  • 외래키(Foreign key)는 다른 릴레이션의 기본키(primary key)를 참조하는 속성입니다. 따라서 외래키 값은 참조되는 릴레이션의 기본키 값과 일치해야 하며, 참조 무결성 제약 조건에 의해 값 변경에 제약을 받습니다.

5. 슈퍼키

  • 유일성은 만족하지만, 최소성은 만족하지 않는 애트리뷰트의 집합 
  • 유일성 만족, 최소성 만족 x

무결성 제약 

  • 관계 데이타베이스에서 외래키와 기본키 사용해서 막 테이블들 연결하잖아. 그래서 지켜야할 조건이 있어. 그것을 명세한 거야. 기본키(개체무결성제약조건), 외래키(참조무결성제약조건) 두 개와 연관 !!!
  • 데이터베이스 상태가 항상 만족시켜야 할 제약조건

1. 데이터베이스 상태(2, 3의 무결성 제약조건을 만족시킴)

  • 어느 한 시점(스냅 샷)에 데이터베이스에 저장되어 있는 모든 데이터 값(튜플)을 의미한다.
  • 데이터베이스 상태는 동적인 성질을 갖고 있어서 시간에 따라 계속적으로 변화(삽입, 삭제, 변경 등)된다
  • 데이터베이스 인스턴스 : 데이터베이스 스키마에 포함되어 있는 모든 릴레이션들의 인스턴스 집합을 의미한다.
  • 데이터베이스 인스턴스는 데이터베이스 관리 시스템(DBMS)이 실행되어 메모리에 로드된 데이터베이스의 동작 중인 상태를 의미하고, 릴레이션 인스턴스는 관계형 데이터베이스에서 특정 테이블의 데이터를 나타냅니다. 데이터베이스 인스턴스는 릴레이션 인스턴스를 포함하고, 릴레이션 인스턴스는 데이터베이스 인스턴스에서 관리되는 데이터의 일부분입니다.
  • DBMS는 데이타베이스 상태가 변화해도 무결성 제약조건을 만족시키도록 해야 합니다!!!
  • 어느 일정한 시점의 "데이터베이스 인스턴스", 초기상태에도 무결성 제약 조건 만족해야 되며, 다른 상태로 변경되어도 만족해야 한다. !!!!!!!!!!!

2. 개체 무결성 

  • 기본 키 값은 언제 어느때고 널 값을 가질 수 없다
    ** Null Value : 정보 부재를 명시적으로 표현하는 특수한 데이터 값. ① 알려지지 않은 값 ② 해당 없음

3. 참조 무결성=부분집합 종속의 개념, 테이블 같아도 됨

  • 외래 키값은 반드시 피참조 릴레이션의 기본값이거나 Null값이어야 한다.
  • 외래키가 null이라는 것은 아직까지 참조할 튜플을 결정하지 못했다는 뜻이다. 
  • 참조 무결성에서 Null값이 가능한 이유를 예시로 들어보도록 하겠다.
  • 교수(교수번호, 교수이름, 학과번호, 직급) 학과(학과번호, 학과이름, 학과장 교수번호, 학생수) 있다고 하고, 교수 릴레이션의 기본키가 교수번호, 학과 릴레이션의 기본키가 학과번호라고 할 때 "교수" 릴레이션에 존재하는 외래키는 "학과번호"

교수 개체, 학과 개체 교수 번호와 학과장번호로 연결 !!

위의 교수 개체와 교수번호를 FK로 갖고 있는 학과 개체가 있다.

여기서 만약 컴퓨터학과의 학과장인 김뚜빼기 교수님이 퇴직을 하셨다고 가정해보자.

개체 무결성에 의하여 교수번호 100을 갖고 있는 테이블 행은 사라지게 된다.(교수 개체에서)

그렇게 되면 학과장 번호는 어떤 값을 가지게 될 것인가? 그것은 바로 Null이다. 여기서는 아직 모르는 값이 된다.

왜냐하면 다음 학과장 교수님을 뽑기전까지 컴퓨터 교수님들 중 어느 교수님이 학과장님이 되실지 모르기 때문이다.

따라서 피참조 릴레이션에서 참조하려는 기본키 값이 없으면 그냥 NULL 상태로 !!!