DB 관계 데이터베이스, 대수, 해석(3)

관계 데이터베이스의 개념과 구조, 관계대수와 관계해석의 원리를 설명합니다. 테이블 집합으로 구성된 관계 데이터베이스의 기본 요소(릴레이션, 애트리뷰트, 투플, 도메인), 다양한 키 유형, 그리고 관계대수(절차적)와 관계해석(비절차적) 언어의 연산자와 질의문 표현 방법을 체계적으로 다루고 있습니다.


관계 데이터베이스

테이블들의 집합으로 표현한것이 관계 데이터베이스(RDB)
RDBMS와 구분할 것!

관계 데이터 모델은 수학에서의 릴레이션과 집합 이론에 기초

  • 릴레이션 : 학생 테이블
  • 애트리뷰트 : 열
  • 투플 : 행
  • 도메인 : 애트리뷰트가 취할 수 있는 값들의 집합
    • 도메인으로 정의하면 보다 안전!


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

  • 릴레이션 인스턴스 : 투플들의 집합
    • 릴레이션 외연과 동의어. 동적 성질
  • 릴레이션 스키마 : 애트리뷰트의 집합(정확하게는 릴레이션(테이블) 이름 + 애트리뷰트 이름)
    • 릴레이션 내포, 스킴과 동의어. 정적 성질
  • 릴레이션의 특성
    1. 투플의 유일성
    2. 투플의 무순서성
    3. 애트리뷰트의 무순서성
    4. 애트리뷰트의 원자성


관계 데이터베이스 : 테이블들의 집합

관계 데이터베이스 스키마 = 릴레이션 스키마 + 무결성 제약조건(개체 무결성, 참조 무결성)



키(Key)

데이터베이스 키

  • 후보키(유일성, 최소성)
  • 슈퍼키(유일성)
  • 기본키(후보키 중 하나)
  • 대체키(기본키 제외 나머지 후보키)
  • 외래키
    • 외래키의 예시
    • S : 교수(교수번호, 교수이름, 학과번호, 직급)
    • R : 학과(학과번호, 학과이름, 학과장교수번호, 학생수)
    • 릴레이션 R의 애트리뷰트 집합 FK가 릴레이션 S의 기본키일 때 이 FK는 R의 외래키이다.
    • FK : 외래키, PK : 기본키



관계대수와 관계해석

연산 : 시스템 입장
데이터 언어 : 사용자 입장

관계 데이터 언어 – 정형어

  • 정형어 : 관계 대수, 관계 해석

  • 관계 대수 – 1.절차 언어 : how, what

  • 관계 해석 – 1.비절차 언어 : what, 2.투플 관계 해석, 3.도메인 관계 해석

    • 표현방법이 다를 뿐 관계 대수(what,how)나 관계 해석(what)에서의 기능들은 동일
    • 다만, 관계 해석의 경우 what만 이용한 비절차 언어이므로 사용자 입장에선 다루기 더 쉬움



관계 대수

기본연산

  • 일반 집합 연산자(합집합, 교집합, 차집합 ,카티션 프로덕트)
  • 순수 관계 연산자(실렉트, 프로젝트, 조인, 디비전)
  • 폐쇄성질 : 중첩된 수식 표현 가능


일반 집합 연산자

  • 합병가능한 릴레이션에서 합,교,차집합 연산의 피연산자들
    1. 차수동일
    2. 대응 애트리뷰트 쌍 별로 도메인 동일
  • 합집합(UNION, ∪)
  • 교집합(INTERSECT, ∩)
  • 차집합(DIFFERENCE, -)
  • 카티션 프로덕트(CARTESIAN PRODUCT, ×)


순수 관계 연산자

  • 실렉트(σ) : 선택 조건을 만족하는 릴레이션의 수평적 부분집합(특정 행 선택)
  • 프로젝트(π) : 릴레이션의 수직적 부분집합(특정 열 선택)
  • 조인(⋈)(세타 조인) : 세타(=연산기호)에 따른 조인(말 그대로 사용한 연산기호와 맞게 조인)
    • 동일 조인(=(열비교)), 자연 조인(=, 중복제거(열))
  • 디비전(÷) : R÷S={ t t∈ πD(R) ∧ t · s∈R for all s∈S }
    • D=X-Y이다. 모든 S에 대해서 R에 모든 S에 대한 t가 있어야 한다.
    • {학번,과목번호} 릴레이션을 SC라 했을때 과목번호 C413을 포함하는 학번을 구하라하면?
    • SC ÷ C413 으로 보면 되고, 실제로 C413 과목번호를 가진 학번들이 출력된다.


개명 연산 : 중간 처리 결과 릴레이션에 이름지정, 애트리뷰트 이름 변경 때 사용

기본 연산 : 다른 연산으로 대체할 수 없는 하나의 논리적 기능을 수행하는 연산(나머지 기호)

복합 연산 : 기본 연산으로 대체가능한 연산(교집합, 조인, 디비전)


관계 대수의 확장

  • 세미 조인 : S와 자연 조인이 가능한 R의 투플의 집합(즉, 자연조인에서 중복투플 제거 및 S나 R로만 표현)

  • 외부 조인(+기호붙음) : 누락 정보를 처리하기 위한 조인의 확장(예로 자연조인하고 못넣은 투플들 포함시키기)

  • 외부 합집합 : 합병 가능하지 않은 두 릴레이션의 모든 애트리뷰트를 포함하는 확장된 릴레이션

  • 집계 연산 : 형식? GAFB(E) 예시? GROUP과목번호AVG성적(등록)



관계 대수의 질의문 표현

  • 모든 학생의 ‘이름’과 ‘학과’를 검색하라.
    • π이름,학과(학생)
  • ‘과목번호’가 C413인 과목에 등록한 학생의 ‘이름’과 ‘성적’은 무엇인가?
    • π이름,성적과목번호=’C413’(학생 ⋈N등록))
    • N 은 자연조인을 의미한다.
  • ‘화일구조’ 과목을 가르치는 ‘담당교수’를 검색하라.
    • π담당교수과목이름=’화일구조’(과목))
  • 모든 과목에 수강한 학생의 ‘학번’과 ‘이름’을 검색하라
    • π학번,이름((π학번,과목번호(등록) ÷ π과목번호(과목)) ⋈N학생)
    • “모든”이 들어간 쿼리에 디비전을 주로 사용
  • ‘학번’이 600, ‘이름’이 ‘김영호’, ‘학년’이 4, ‘학과’가 ‘컴퓨터’인 학생을 삽입하라.
    • 학생∪{<600, ‘김영호’, 4, ‘컴퓨터’>}
  • ‘데이터베이스‘ 과목을 삭제하라.
    • 과목 - (σ과목이름=’데이터베이스’(과목))



관계 해석

관계 해석

  • 술어 논리학을 기반.(술어 : 참, 거짓 나타냄)

  • 관계 데이터 모델의 연산 표현 방법, 비절차적(what)


투플 관계 해석 : 원하는 릴레이션을 투플 해석식으로 정의하는 표기법

  • 정형식 – 원자식이 규칙에 따라 결합된 식

  • 투플 변수 – 자유변수, 속박변수



투플 해석식의 질의문 표현

  • 과목 C413에서 성적이 A인 학생의 학번을 모두 검색하라
    • {e.Sno|ENROL(e) ∧ e.Cno=’C413’∧ e.Grade=’A’ }
  • 과목 C413을 등록한 학생의 이름과 학과를 모두 검색하라
    • { s.Sname, s.Dept|STUDENT(s) ∧∃e(ENROL(e) ∧ s.Sno=e.Sno ∧ e.Cno=’C413’) }
  • 모든 과목에 등록한 학생의 이름을 전부 검색하라.
    • { s.Sname|STUDENT(s) ∧ (∀c)(∃e)(COURSE(c)
      ∧ENROL(e)∧ e.Sno=s.Sno ∧ e.Cno=c.Cno) }
  • 과목 ‘C413’에 등록하지 않은 학생의 이름을 전부 검색하라.
    • {s.Sname|STUDENT(s) ∧ (¬∃e)(ENROL(e) ∧ s.Sno=e.Sno ∧ e.Cno=‘C413’) }
    • ¬ 란 부정을 의미한다.


도메인 관계 해석 : 원하는 릴레이션을 도메인 해석식으로 정의하는 표기법

  • 도메인 변수 – 자유변수, 속박변수



도메인 해석식의 질의문 표현

  • 컴퓨터학과 3,4 학년(Year)의 이름(Sname)을 검색하라.
    • {xSname|(∃xYear)(∃xDept) (STUDENT(xSno, xSname, xYear, xDept)∧ xYear ≥ 3∧ xDept=’컴퓨터’ ) }
  • 과목번호(Cno) C413에서 성적(Grade)이 A인 학생의 학번(Sno)을 모두 검색하라
    • {xSno|(∃xCno)(∃xGrade) (ENROL(xSno, xCno, xGrade, xMidterm, xFinal) ∧ xCno= ‘C413’ ∧ xGrade=‘A’) }
  • 기말 성적(Final)이 90점 이상인 학생의 학번(Sno)과 이름(Sname)을 검색하라.
    • {xSno,xSname|(STUDENT(xSno,xSname,xYear,xDept) ∧ (∃xFinal)(∃xxSno) (ENROL(xxSno, xCno, xGrade, xMidterm, xFinal)∧xSno=xxSno ∧ xFinal ≥ 90) }
  • 과목번호(Cno) C324에 등록하지 않은 학생의 이름 (Sname) 을 검색하라.
    • { xSname|(∃xSno) ((STUDENT(xSname, xSno, xYear, xDept) ∧ (¬∃xxSno) (∃xCno) (ENROL(xxSno, xCno, xGrade, xMidterm, xFinal) ∧ xSno=xxSno ∧ xCno=’C324’)) }


QBE -> 중요하진 않음

  • 도메인 관계 해석 사용

  • Print, Select, Update, Delete, Insert(P. S. U. D. I.) 등등

  • 중복 자동 제거, ALL삽입시 중복 허용(P.ALL)

댓글남기기