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을 관계형 모델로 변환하는 규칙 존재
'Computer Science > Database Design & Query Languages' 카테고리의 다른 글
[CS][데이터베이스 시스템 3판] Chapter05. SQL (1) | 2023.12.07 |
---|---|
[CS][데이터베이스 시스템 3판] Chapter04. Relational Algebra (0) | 2023.10.18 |
[CS][데이터베이스설계와질의] Chapter02. The Entity Relationaship model (0) | 2023.10.18 |
[CS][데이터베이스설계와질의] Chap05. SQL (0) | 2023.10.16 |
[CS][데이터베이스설계와질의] Chapter01. Introduction to Database Systems (1) | 2023.10.09 |