Computer Science/Database Design & Query Languages

[CS][데이터베이스 시스템 3판] Chapter03. The relational Model

y-seo 2023. 10. 18. 04:57

 


 

 
 

Relational Database : Definitions

  • a set of relations
  • Relation : 2 part로 구성
    • Schema : relation 이름, 각 열의 name과 type 지정
    • Instance : table의 상태, 행&열, DB의 한 순간의 상태
  • relation을 행 or 튜플의 집합으로 생각할 수 있다
  • Ex

  • Oracle에는 string이라는 data type이 없다 → char이나 varchar 사용, real data type도 없어서 number 사용

 

 
 

Relational Query Languaes

  • Algebra에 기반
  • Relational model의 강점 : Data의 단순성과 강력한 query 지원
  • Query는 직관적으로 작성할 수 있으며 DBMS는 효율적인 평가를 담당
    • 핵심 : relational query에 대한 정확한 의미론
    • 최적화가 광범위하게 re-order operation 할 수 있도록 하고 answer가 변경되지 않도록 보장
  • QBE(Query By Example)은 Relational Calculus에 기반
  • SQL(Structured Query Language)는 Relational Algebra에 기반 

 

 
 

The SQL Query Language

  • 많은 곳에서 사용되어 변형이 많다 → 표준 필요
  • 표준화 시도 (Standards)
    • SQL-86 (SQL-1)
    • SQL-89 (minor revision)
    • SQL-92 (major revision, SQL-2)
    • SQL-99 (major extensionts, SQL-2, 객체지향 업데이트)
  • Ex. 18살 학생을 모두 찾아내려면
    • name과 login만 찾아내려면 → SELECT name, login

 

 
 

Creating Relations in SQL

 

  • table 만드는 방법 
  • 필드의 데이터 유형(도메인)이 지정되고 튜플이 추가되거나 수정될 때마다 DBMS에 의해 적용됨
  • column이 없는 table은 존재 불가능
  • record가 없는 table은 존재 가능

 

 

 
 

Destroying and Altering Relations

  •  Destroy
    • table 삭제
    • schema info와 tuple들 모두 삭제

  •  Alter
    • table 구조 변경
    • ADD
      • column 추가
      • 스키마는 새 필드를 추가하여 변경
      • 현재 인스턴스의 모든 튜플은 새 필드의 null 값으로 세팅 
    •  MODIFY
      • column 수정
  • CHAR(50) : 무조건 50만큼의 공간
  • VARCHAR(100) : 가변의 문자열, 동적, 100보다 클 수도, 작을 수도 있다 → 시간이 소요된다는 단점 존재

 

 
 

Adding and Deleting Tuples

  • table에 data 집어 넣기
  • single tuple 삽입 (record 넣기)

  • 어떤 조건을 만족하는 모든 tuple 삭제 (record 지우기)

  • 꼭 ' ~ ' 을 쓸 것

 

 
 

Integrity Constraints (ICs)

  • DB의 모든 instance에 대해 무조건 참이어야 하는 조건
  • Ex. domain constraints → 속성의 값이 가질 수 있는 범위 (type)
  • ICs는 schema가 정의될 때 지정된다
  • ICs는 relations들이 수정될 때 확인된다
  • DBMS는 언제라도 IC를 위반하지 않아야 한다

 

 
 

Primary Key Constraints

  • Key : Attribute(Column, Record)를 구별하기 위한 것
  • key를 n개 attribute 정의 가능
  • relation에 속한 field들의 어떤 최소 부분집합이 각 tuple에 대한 고유한 식별자라는 선언
  • 서로 다른 두 tuple은 key field에서 같은 값을 가질 수 없다
    • Insert 했을 때 같은 key가 있으면 실행 X
  • key의 어떤 subset도 허용되지 않는다
    • 구분 가능한 것만 key로 잡아야 한다
    • subset이 가능하면 key가 아니다
    • 이게 아니라면 superkey이다
  • Ex. A와 B 둘다 key인가? → A만 key여도 됨(A로도 구분 가능하고 충분함), B는 그저 덤
  • key들 중에서 하나는 primary key로 선언됨 → 나머지는 secondary key
  • Ex.sid가 Students의 key일 때 {sid, gpa}는 superkey이다
    • sid가 key이므로 이 집합도 당연히 unique
    • 하지만 이미 있는 sid 값의 record를 insert 하려고 한다면 가능하다는 것이 문제점

 

< key 종류 참고 >

  • superkey : raw를 식별할 수 있는 column 또는 column set
  • candidate key : 나중에 primary key로 선택될 수 있는 key, 최소한의 column으로 Super Key만 선정한 것
  • primary key : candidate key 중 선택한 key
  • secondary key : primary key가 안 된 나머지 candidate key들
  • foreign key : 다른 table과 relationship을 위한 key

 

 

 
 

Primary and Candidate Keys in SQL

  • candidate key : 나중에 primary key로 선택될 수 있는 보통의 key, UNIQUE라고 표현
  • 모든 key는 primary key가 될 수 있다

 

 
 

Foreign Keys, Referential Integrity

  • Relation Model에서는 꼭 필요한 개념
  • 다른 relation의 tuple을 참조하는 key
  • 다른 relation에 갔더니 유일해지는 key
  • 다른 relation의 primary key와 꼭 일치해야 한다
  • 다른 테이블에서 primary key 역할을 해야 효과적이다
  • Ex. sid는 Students를 참조하는 foreign key이다
    • Enrolled (sid, cid, grade)
    • student 테이블에서 sid (아마 pk)를 참조하려고 한다
  • Referential Integrity
    • 참조 무결성 규칙(제약)
    • FK가 있으면 PK도 존재해야 한다
    • Ex. sid 값이 꼭 students에 있어야 한다

 

 
 

Foreign Keys, Referential Integrity in SQL

  • Students relation에 있는 students만 courses에 enroll을 할 수 있다

 

 
 

Enforcing Referential Integrity

  • 위반하지 않도록 강압적 유지
  • Ex. 존재하지 않은 sid를 Enrolled tuple에 insert하려고 한다면? → 거절
  • Ex. Students의 tuple이 지워지면? → 참조하고 있는 Enrolled의 tuple도 삭제
    • 보통 참조하고 있는 Enrolled의 tuple은 삭제하는 것을 허용하지 않음
    • 참조하고 있는 Enrolled tuple의 sid를  "defualt sid" 혹은 "null 값"으로 바꿈
    • Students의 PK가 업데이트 되어도 유사함
  • NULL = unknown = inapplicable (가능한 안 써야)

 

 
 

Referential Integrity in SQL/92

 

  • SQL/92는 delte나 update 시, 다음 4가지 option에 대해 지원
    • Default는 NO ACTION : delete/update 거절
    • ON DELETE CASCADE : 참조하는 것까지 delete
    • SET NULL / DEFAULT : 참조하고 있는 tuple의 foreign key 값 세팅

 

 

 

 
 

Referential Integrity in ORACLE

 

  • Oracle은 8i 지원
    • NO ACTION
    • ON DELETE CASCADE

 

 

 

 
 

Views

  • = External Schema
  • 특정 자료만을 제한적으로 보여주기 위한 가상 테이블
  • 원하는 schema만 보고 싶음
  • 실제 record 값을 갖지는 않지만 이런 record 값을 갖도록 할 수 있는 선언
  • 만들기

  • 없애기
    • DROP VIEW

 

 
 

Logical Design : ER to Relations

  • Entities → Relations
  • Relationships → Relations
  • DB 안에 Relation이 있는 것 = Relation Model

 

 
 

Relational Model : Summary

  • 데이터를 table로 표현한 것
  • 단순하고 직관적이며 현재 가장 널리 사용
  • Integrity constraints는 DBA가 의미에 따라 지정 가능하며 위반 여부를 확인
  • 두 개의 중요한 IC (PK & FK)
  • domain constraints 존재
  • 강력하고 자연스러운 query 언어 존재
  • ER을 관계형 모델로 변환하는 규칙 존재