본문 바로가기

CS/데이터베이스

관계형 모델

관계형 데이터베이스의 구조

 

  • 관계형 데이터베이스 : 릴레이션의 모임
  • 릴레이션(테이블) : 관련있는 데이터의 모임
    • instructor는 교수 데이터의 모임
  • 속성(테이블의 열) : 저장할 데이터가 공통적으로 가지는 특성
    • 각 교수 데이터는 ID, 이름, 학과명, 급여의 속성을 가짐
  • 튜플(테이블의 행) : 한 개의 데이터(레코드)
    • ID가 1, 이름이 Yang, 학과가 Biology, 급여가 40000인 한 개의 교수 데이터가 있음
데이터베이스 스키마

 

  • 릴레이션 스키마 : 릴레이션의 구조 정의(논리적 설계)
  • 릴레이션 인스턴스 : 릴레이션에 저장된 실제 데이터 집합
String str = "Hello";

 

String은 해당 변수에 들어가는 값의 구조를 정의하고 Hello는 이 구조에 맞는 실제 값입니다

릴레이션 스키마는 프로그래밍 언어의 타입, 릴레이션 인스터스는 프로그래밍 언어의 변수값과 유사합니다

 

 

* 예시는 상단의 department 테이블 참고

  • 수퍼키 : 릴레이션에서 튜플을 유일하게 식별할 수 있는 하나 혹은 여러 속성들의 집합
    • 예시 : { dept_name }, { dept_name, building }, { dept_name, budget }, { dept_name, building, budget }, { budget }
  • 후보키 : 수퍼키 중 가장 적은 속성으로 유일성이 보장되는(최소성) 키
    • 예시 : { dept_name }, { budget }
  • 주 키 : 후보키 중에서 대표로 선택된 키, 데이터를 구별하기 위해 이용
    • 주 키 제약 조건
      1. 한 테이블에 반드시 하나만 존재
      2. 주 키 값은 반드시 존재(Null 불가)
      3. 주 키는 중복될 수 없음
    • 주 키는 변경 가능성이 낮은 속성을 선택
    • 예시 : { dept_name } => budget은 중복 가능성, 변경 가능성이 높으므로 dept_name 선택
  • 외래키 : 다른 테이블의 키를 참조하는 키, 서로 다른 테이블의 데이터(튜플)를 연관시키기 위해 이용
    • 외래키 제약 조건
      1. 참조 무결성 제약 조건 : 참조하는 릴레이션의 특정 속성이 참조되는 릴레이션의 특정 속성에 출현해야 함
      2. 특정 속성은 고유해야 하며 주로 주 키를 사용
    • 예시 : 주 키로 사용하는 { dept_name }
질의어

 

  • 질의어 : 사용자가 데이터베이스로부터 정보를 요청할 때 사용하는 언어
    • 명령형 질의어
      • 사용자가 검색 방법을 직접 지정
      • 사용자가 직접 상태 갱신
      • 예시 : PL/SQL
    • 함수형 질의어
      • 함수 조합을 통해 데이터 처리하는 방식
      • 기존 데이터는 유지하고 변환하여 새로운 데이터 생성(불변성)
      • 예시 : 관계 대수, LINQ in C#
    • 선언형 질의어
      • 원하는 정보만 기술하는 방식
      • DBMS가 자동 상태 갱신
      • 예시 : SQL
관계대수

 

한 개 혹은 두 개의 릴레이션을 입력으로 받아 새로운 릴레이션을 결과로 생성하는 연산들의 집합

 

Student
Student_ID Name Major Age
101 Alice CS 21
102 Bob Math 22
103 Carol CS 20
104 Dave Physics 23

 

Course
Course_ID NAME Student_ID
C1 Database 101
C2 Algebra 102
C3 OS 103
C4 Physics 104

 

  • 선택 연산(σ) : 조건을 만족하는 튜플 선택
    • 예시 : σ Major='CS' (Student)
    • Student 테이블에서 Major 속성이 'CS'인 튜플만 선택
Student_ID Name Major Age
101 Alice CS 21
103 Carol CS 20
  • 추출 연산(π) : 특정 속성만 선택
    • 예시 : π Name, Major (Student)
    • Student 테이블에서 Name, Major 속성만 선택
Name Major
Alice CS
Bob Math
Carol CS
Dave Physics
  • 카티션 곱 연산(×) : 두 릴레이션의 모든 조합 생성
    • 예시 : Student × Course
    • Student 테이블과 Course 테이블의 모든 조합
Student.Student_ID Student.Name Major Age Course_ID Course.Name Course.Student_ID
101 Alice CS 21 C1 Database 101
101 Alice CS 21 C2 Algebra 102
101 Alice CS 21 C3 OS 103
101 Alice CS 21 C4 Physics 104
    나머지 12개의 튜플 생략
  • 조인 연산(⨝) : 두 릴레이션의 공통 속성을 기준으로 결합, 선택 + 카티션 곱
    • 예시 : Student ⨝ Course
    • Student_ID를 기준으로 결합한 조합
Student.Student_ID Student.Name Major Age Course_ID Course.Name Course.Student_ID
101 Alice CS 21 C1 Database 101
102 Bob Math 22 C2 Algebra 102
103 Carol CS 20 C3 OS 103
104 Dave Physics 23 C4 Physics 104
  • 배정 연산(←) : 릴레이션 변수에 릴레이션을 배정
    • 예시 : CS_Student ← π Name, Major(σ Major='CS' (Student))
    • CS_Student의 Student 테이블에서 Major 속성이 'CS'인 튜플 중 Name, Major 속성만 선택
  • 재명명 연산(ρ) : 릴레이션 또는 속성의 이름 변경
    • 예시 : ρ S(Student)
    • Student 테이블을 S로 이름을 변경
  • 집합 연산 : 합집합 교집합 차집합
    • 집합 연산은 두 릴레이션의 속성이 동일해야 함
      • 두 릴레이션의 속성의 갯수가 같음
      • 두 릴레이션의 i번째 속성은 같음
    • 예시는 Student 테이블의 Name과 Major만 사용
      • CS_Student ← π Name, Major(σ Major='CS' (Student))
      • Math_Student ← π Name, Major(σ Major='Math' (Student))
    • 합집합 연산(∪) : 두 릴레이션의 공통된 속성을 가진 튜플을 합함(중복 제거)
      • 예시 : CS_Students ∪ Math_Students
      • Major가 CS, Math인 튜플의 합
    • 교집합 연산(∩) : 두 릴레이션에서 공통으로 존재하는 튜플 선택
      • 예시 : Student ∩ CS_Students
      • Student와 CS_Student에 공통으로 존재하는 튜플 선택
    • 차집합 연산(−) : 첫 번째 릴레이션 중 두 번째 릴레이션에 없는 튜플 선택
      • 예시 : Student - CS_Students
      • Student 릴레이션에는 있지만 CS_Student에는 없는 튜플 선택
합집합   교집합   차집합
Name Major Name Major Name Major
Alice CS Alice CS Bob Math
Bob Math Carol CS Dave Physics
Carol CS        
  • 동등 질의 : 동일하지는 않지만 동일한 결과를 내는 두 질의
    • Student ⨝ Course
    • σ Student.Student_ID = Course.Student_ID (Student × Course) 
    • 위의 두 질의는 동일한 결과를 냄