릴레이션 키
슈퍼키, 후보키, 기본키,대체키,외래키
슈퍼키: 튜플을 식별하는 하나의 애트리뷰트 또는 애트리뷰트들의 집합
Ex) 학생 릴레이션에서 (학번,주소,이름)
후보키: 튜플을 고유하게 식별하는 최소한의 애트리뷰트들의 집합 <유일성, 최소성>
Ex) 학생 릴레이션에서 (학번), 주소-이름도 식별하는 역할을 하지만 학번만큼 정확하지는 않음. 후보키는 제일 정확한 애트리뷰트만 인정하므로 그 수가 적음
+) 후보키는 두 개 이상의 복합 애트리뷰트로 이루어질 수 있음 -> (학번+주소)가 후보키
기본키: 한 릴레이션에서 후보키가 두 개 이상 있으면 설계자 또는 데이터베이스 관리자가 이들 중에서 하나를 기본키로 선정함
Ex) 학생 릴레이션에서 학번과 주민번호가 후보키가 될 수 있는데 이 중에서 학번을 기본키로 선정할 수 있음
<기본키는 절대 null값을 가질 수 없음>
대체키: 기본키가 아닌 후보키
Ex) 후보키 학번과 주민번호 중 기본키가 학번이라면 대체키는 주민번호임
외래키: 다른 릴레이션의 기본 키를 참조하는 애트리뷰트, 릴레이션들 간의 관계를 나타내기 위해서 사용됨

Query languages(질의어)
: 데이터베이스로부터 데이터를 조작하거나 검색하는 언어
- 빠르게 데이터를 처리할 수 있다. (최적화됨)
두 수학적인 질의어가 SQL이라는 언어를 생성했다.
관계 대수
- 절차적(순서가 있음)
관계 해석
- 비절차적, 선언만 하면 됨
SQL 정의문
기본 테이블의 생성

desc (릴레이션 이름): 스키마를 살펴보는 명령어

기본 테이블의 제거

옵션으로 (PURGE)를 주면 완전 삭제됨
Show tables: 만들어진 테이블들을 살펴보는 명령어

기본 테이블의 변경


SQL 데이터 조작문
데이터 검색

위의 테이블에서 18세인 학생들만 검색하게 된다.
데이터 검색 (다중 릴레이션에서 진행)


(Dave, Topology112), (Jones, Topology112), … , (Guldu, Topology112)
<이유>

Students S와 Enrolled E 릴레이션에서 확인한다고 하니 곱 연산을 통해 위의 24가지 튜플이 형성된다. 24가지 중 E.grade가 A인 것을 찾으니 6개나 나오게 된다.
->

위와 같이 수정해야 한 개의 결과가 나오게 된다.

데이터 삽입

Smith학생의 정보가 담긴 튜플을 Students릴레이션에 삽입한다.
데이터 삭제

smith이름을 가진 학생 튜플을 Students릴레이션에서 삭제한다.
<빈 테이블 만들기 (스키마는 냅둠)>

데이터 갱신

Balance가 10000불을 초과할 경우 balance*=1.06으로 account테이블을 업데이트한다.
갱신 – Case Statement

Balance가 10000불 이하일 경우 balance*=1.05으로 account테이블을 업데이트하고 그렇지 않으면 balance*=1.06으로 업데이트한다.
Entity Integrity (개체 무결성)
기본 키를 구성하는 어떤 속성도 NULL값을 가질 수 없음
Ex) 학번이 NULL인 학생은 삽입할 수 없다.
<기본 키가 두 속성을 합한 것일 때 테이블 만들기>

sid와 cid는 NULL일 수 없다.
<기본 키가 한 개이고 유일성을 가진 속성이 두 개일 때 테이블 만들기>

sid는 NULL일 수 없지만 cid와 grade는 NULL일 수 있다.
Referential Integrity (참조 무결성)
외래 키 값은 NULL이거나 참조 릴레이션의 기본 키 값과 동일해야 한다.
Enrolled의 외래키는 sid이고 Students의 기본 키는 sid임
Enrolled의 기본키는 (sid,cid)임

<위를 만족하는 Enrolled 테이블 만들기>

– Enrolled의 외래키가 이상한 값을 가진 채 삽입한다면 DBMS가 Reject한다.
– Students 튜플을 수정/삭제한다면 다음 일 중 하나가 발생한다.
1. 참조하는 Enrolled튜플도 삭제된다. (cascade: 연쇄 삭제, 수정)
2. 참조되는 Students튜플은 수정/삭제할 수 없다고 한다. (Default – No ACTION)
3. 참조하는 Enrolled튜플의 외래키(sid)를 default sid로 바꾼다. (SET DEFAULT)
<default값은 참조할 수 있는 값이어야만 한다>
4. 참조하는 Enrolled튜플의 외래키(sid)를 NULL로 만든다. (SET NULL)
<외래키는 기본키면 안 됨-개체 무결성에 위배됨, not null로 명시하고 SET NULL을 하면 안 됨>
<Students튜플을 수정/삭제할 때 조건 생성 – MySQL>

Delete와 Update 조건 생성 예시 <테이블 생성할 때 진행함>

default (no action-수정/삭제 안 되게 함)

cascade (연쇄 삭제, 수정)

SET DEFAULT
MySQL/ORACLE은 Set Default를 지원하지 않는다. (예외적으로 알아야 됨)

SET NULL

예시) update Students set sid = 53611 where sid = 53666; <set null>

참조하는 Enrolled튜플의 외래키(sid)를 NULL이 된다.