Relational database

Relational database

Tag
Database
Computer Science Engineering

관계 데이터 모델

  • 관계 데이타 모델의 특성
    • 수학에서의 집합(set)과 릴레이션(relation) 이론에 기초
    • 일반 사용자 입장에서는 테이블(table) 형태로 생각
      • 모든 데이터를 테이블 형태로 저장 및 관리
      • 테이블의 열(column) = 필드(field)
        • ≒ 관계 데이타 모델의 애트리뷰트(attribute)
      • 테이블의 행(row) = 레코드(record) ≒ 관계 데이타 모델의 투플(tuple)
 
학생(student) 테이블: 릴레이션
학생(student) 테이블: 릴레이션

애트리뷰트와 도메인

  • 테이블(table) ≒ 릴레이션(relation)
  • 애트리뷰트(attribute)
    • 릴레이션의 속성
    • 한 릴레이션 내에서 애트리뷰트 이름들은 모두 달라야 함
    • 도메인의 역할(role) 이름
  • 도메인(domain)
    • 각 애트리뷰트가 취할 수 있는 값(value)들의 집합
    • 각 애트리뷰트의 타입에 이름을 부여한 것임
    • 모든 DBMS가 도메인을 명시적으로 지원하지는 않음.
    • PostgreSQL, Informix 등
 

릴레이션의 개념

  • STUDENT 릴레이션의 정의
create domain DSNO INTEGER; create domain NAME CHAR(10); create domain DYEAR INTEGER; create domain DEPT CHAR(6); create table STUDENT (Sno DSNO, Sname NAME, Year DYEAR, Dept DEPT);
  • 도메인 명세가 생략된 STUDENT 릴레이션 정의
Create Table STUDENT (Sno INTEGER, Sname VARCHAR(30), Year INTEGER, Dept CHAR(6));
 

STUDENT 릴레이션 예

notion image
 

릴레이션 스키마 (relation schema)

  • 릴레이션 스키마 = 애트리뷰트의 집합( a set of attributes )
    • R(A1, A2, ... , An), Ai ⇔ Di
    • R({A1, A2, ... , An})
  • 릴레이션 내포 (relation intension), 릴레이션 스킴 (relation scheme) 이라고도 함.
  • 정적인성질
    • 시간에 무관
      • 시간에 따라 변경되지 않음
      •  

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

  • 릴레이션 R의 인스턴스
    • 어느 한 시점에 릴레이션 R이 포함하고 있는 투플들의 집합(a set of tuples)
      • {<V1,V2,...,Vn>|Vi ∈Di }
    • 릴레이션의 내용, 상태, snapshot
  • 투플: <attr1=V1, attr2=V2, ··· , attrn=Vn>
  • 릴레이션 외연 (relation extension)이라고도 함
  • 동적성질
    • 삽입, 삭제, 갱신으로 시간에 따라 변함
    • 릴레이션 값(보통 릴레이션)
    •  

릴레이션(Relation) R

  • 개념적 정의:
    • 릴레이션 스키마 + 릴레이션 인스턴스 수
  • 수학적 정의:
    • 릴레이션 R의 애트리뷰트 도메인들의 카티션 프로덕트(곱집합, Cartesian product)의 부분집합
    • R⊆D1 ×D2 ×...×Dn,단Di : i번째애트리뷰트의도메인
    • 즉 n-투플, <d1, d2, ... , dn>의 집합
      • di ∈Di, i=1,2,...,n
      •  

차수와 카디날리티

  • 릴레이션의 차수(degree): 릴레이션의 애트리뷰트 갯수
  • 릴레이션의 카디날리티(cardinality): 릴레이션의 투플
  • 두개의 릴레이션을 곱집합할 때
    • 차수는 양쪽 릴레이션 차수의 합
    • 카디날리티는 양쪽 릴레이션 카디날리티의 곱
    •  

릴레이션의 특성 - 테이블과의 차이점

1) 투플의 유일성 (uniqueness of tuples) 릴레이션 = 투플들의 "집합(set)"
2) 투플의 무순서성 (no ordering of tuples) 릴레이션 : 추상적 개념 = 투플들의 집합(set) 테이블 : 구체적 개념
3) 애트리뷰트의 무순서성 (no ordering of attributes) 릴레이션 스키마 → 애트리뷰트들의 "집합" 투플 : <attribute: value>쌍의 집합
4) 애트리뷰트의 원자성(atomicity)
  • 애트리뷰트 값은 단일값을 가져야 함. 복수의 값을 가지면 안됨
  • 정규화 릴레이션 (normalized relation)
    • 애트리뷰트 값으로 원자값만 허용되는 릴레이션
    • 비정규화 릴레이션은 분해(decomposition)를 통해 정규화
  • 널 값(null value)도 원자 값으로 취급
    • unknown,inapplicable
    •  

개체간의 카디날리티 관계 유형

  • 1:1 관계
    • 예) 개인: 면허증, 자동차: 자동차 등록증, 국가: 수도
  • 1:N 관계
    • 예) 부모: 자녀, 강좌: 강의, 회사: 직원, 유튜버: 유튜브 동영상
  • M:N 관계
    • 예) 학생 : 과목, 배우: 영화, 상품: 주문, 프로젝트: 팀원
    •  

관계 데이터베이스 개념

  • 관계 데이타베이스(relational database)
    • 테이블들의 집합
    • 데이타베이스를 시간에 따라 그 내용(상태)이 변할 수 있는 테이블 형태로 표현
  • 관계 데이타베이스 스키마(relational database schema)
    • = {릴레이션 스키마} + {무결성 제약조건}
  • 관계데이타모델 ⇔ 프로그래밍시스템과의비교
    • 릴레이션 ⇔ 화일
    • 투플 ⇔ 레코드
    • 애트리뷰트 ⇔ 필드
    •  

관계 데이터베이스는 집합 이론에 기초

  • database: a set of relations
  • relation instance: a set of tuples
  • relation schema: a set of attributes
 

릴레이션의 키(key)

  • 키(key)
    • 릴레이션 안에서 각 투플을 유일하게 식별할 수 있는 애트리뷰트 집합(set of attributes)
  • 후보 키(candidate key)
    • 릴레이션 R(A1, A2, ..., An)에 대한 애트리뷰트 부분집합, K({Ai,Aj ,...,Ak})이 다음 두 성질을 만족
      • 유일성(uniqueness)
        • 각 투플에 대해 K({Ai , Aj , ... , Ak})의 값(< vi , vj , ... , vk >) 은 유일
      • 최소성(minimality)
        • K는 각 투플을 유일하게 식별하는데 필요한 애트리뷰트만 포함
  • 슈퍼 키(super key)
    • 유일성(uniqueness)은 만족하지만 최소성(minimality)은 만족하지 않는 애트리뷰트의 집합
  • 기본 키(primary key)
    • 후보 키(candidate key) 중에서 지정된 하나의 키
      • 데이타베이스 설계자가 지정
    • 각 투플에 대한 기본 키 값은 항상 유효한 값이어야 함
      • null 값이 허용되지 않음
  • 대체 키(alternate key)
    • 후보 키 중에서 기본 키를 제외한 나머지 후보 키
    •  

외래 키 (Foreign key)

  • 외래 키(foreign key)
    • 릴레이션 R의 애트리뷰트 (집합) FK가 릴레이션 S의 기본 키를 가리킬때, 이 FK는 R의 외래키이다.
    • (R의 FK의 도메인)=(S의 기본 키의 도메인)
    • 예: (등록테이블의 SNO)는 (학생테이블의 SNO)를 가리키는 외래키
    • FK의 값은 S의 기본키에 존재하는 값이거나 null
    • R과 S가 같은 릴레이션일 수도 있음
    • R을 참조 릴레이션(referencing relation), S를 피참조 릴레이션 (referenced relation)이라 함
      • 릴레이션 R은 FK를 통해 릴레이션 S를 참조
  • 관계형 데이터 모델에서는 기본키와 외래키에 의해서 개체(entity) 간의 관계(relationship)을 유지함
  • 기본키-외래키 개념은 관계형 데이터베이스의 핵심 아이디어
 

관계 유형과 외래키

  • 1:1 관계
    • 예) 개인: 면허증, 자동차: 자동차 등록증, 국가: 수도
    • 릴레이션 설계: 한쪽은 기본키, 한쪽은 외래키로 연결
  • 1:N 관계
    • 예) 부모: 자녀, 강좌: 강의, 회사: 직원, 유튜버: 유튜브 동영상
    • 릴레이션 설계: 1쪽에 기본키, N쪽에 외래키
  • M:N 관계
    • 예) 학생 : 과목, 배우: 영화, 상품: 주문, 프로젝트: 팀원
    • 릴레이션 설계: 새로운 관계 테이블을 만들고, 양쪽의 기본키를 외래키로 배치
    •  

관계형 데이터베이스의 무결성 제약(Integrity Constraints)

  1. 개체 무결성(entity integrity)
      • 기본 키 값은 언제 어느 때고 null 값을 가질 수 없고, 중복 값을 가질 수 없음.
      • NOTE: null 값
        • 정보 부재를 명시적으로 표현하는 특수한 데이타 값
          • 알려지지 않은 값(unknown value)
          • 해당 없음(inapplicable)
  1. 참조 무결성(referential integrity)
      • 외래 키 값은 반드시 피참조 릴레이션의 기본 키 값으로 존재하는 값이거나 null이어야 함.
  1. 도메인 무결성(domain integrity)
      • 애트리뷰트의 값이 해당 도메인에 속한 값이어야 한다는 규정.
이러한 무결성 제약조건은 데이타베이스 상태(database state)가 항상 만족시켜야 될 제약조건임
  • 데이타베이스 상태 (database state)
  • 어느 한 시점에 데이타베이스에 저장되어 있는 모든 데이타 값
  • 어느 한 시점의 릴레이션 인스턴스의 집합
  • 데이타베이스 상태는 계속적으로 변화함
    • 삽입, 삭제, 변경 연산
DBMS는 데이타베이스 상태의 변화에도 항상 무결성 제약을 만족시키도록 해야 함
 

Student Relation

CREATE TABLE `student` ( `sno` int NOT NULL, `sname` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, `year` int NOT NULL DEFAULT '1', `dept` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `email` varchar(30) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `enter_date` datetime DEFAULT CURRENT_TIMESTAMP, `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`sno`), CONSTRAINT `year_const` CHECK (((`year` >= 1) and (`year` <= 4))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 

Course Relation

CREATE TABLE `course` ( `cno` char(4) COLLATE utf8mb4_unicode_ci NOT NULL, `cname` varchar(10) COLLATE utf8mb4_unicode_ci NOT NULL, `credit` int DEFAULT NULL, `dept` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `prname` varchar(10) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `enter_date` datetime DEFAULT CURRENT_TIMESTAMP, `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`cno`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 

Enrol Relation

CREATE TABLE `ENROL` ( `SNO` int NOT NULL, `CNO` char(4) COLLATE utf8mb4_unicode_ci NOT NULL, `GRADE` char(1) COLLATE utf8mb4_unicode_ci DEFAULT NULL, `MIDTERM` int DEFAULT NULL, `FINAL` int DEFAULT NULL, `ENTER_DATE` datetime DEFAULT CURRENT_TIMESTAMP, `UPDATE_DATE` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`SNO`,`CNO`), KEY `CNO` (`CNO`), CONSTRAINT `enrol_ibfk_1` FOREIGN KEY (`SNO`) REFERENCES `STUDENT` (`sno`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `enrol_ibfk_2` FOREIGN KEY (`CNO`) REFERENCES `COURSE` (`cno`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `enrol_chk_1` CHECK (((`GRADE` >= _utf8mb4'A') and (`GRADE` <= _ utf8mb4'F'))) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;