관계형 데이타 모델 관계형 데이타베이스 관계 대수 제 2장 관계형 데이타베이스 관계형 데이타 모델 관계형 데이타베이스 관계 대수
2.1 관계형 데이타 모델 데이타모델 물리적 혹은 추상적으로 존재하는 현실세계를 단순화되고 정형화된 형태로 표현하는 하나의 방식 또는 규범 정형화: 정해진 형식을 사용함 예) 수학식, 표, 회로도, flow chart와 같이 표현 형식이 정해진 방법을 사용함 단순화 (=추상화)과정을 어떻게 할 것인가? 자전거의 추상화 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.1 릴레이션의 개념(1) 관계형 데이타 모델(relational data model) 표(테이블)형식을 이용하여 데이타들을 정의하고 설명한 모델. 즉, “표”라는 정형화 방법을 사용. 실세계의 데이타를 누구나 직관적으로 이해할 수 있는 형태로 기술할 수 있는 간단한 방식을 제공. 이름 전화번호 주소 생일 홍길동 880-1234 서울 3월 15일 허재녕 880-9105 8월 23일 이몽룡 887-5362 12월 14일 무엇을 위해 사용하는 가에 따라 여러 방법으로 추상화 할 수 있다. Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.1 릴레이션의 개념(2) (맨 나중에 설명) 릴레이션(relation or relation instance) 수학적으로, 두 개 이상의 집합으로부터 각 집합을 구성하는 원소들의 순서쌍에 대한 집합을 의미 이름 = {홍길동, 김광식, 박철수, 최용만} 주소 = {서울, 대전, 대구, 부산} ⇒ 순서쌍 : {<홍길동, 서울>, <김광식, 대전>, <박철수, 서울>, <최용만, 부산>} 이름 주소 홍길동 서울 김광식 대전 박철순 대구 최용만 부산 Relation = Table tuple = row attribute = column Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.1 릴레이션의 개념(3) 속성(attribute: column) 튜플(tuple: row) 릴레이션을 구성하는 각 열 각 값의 의미 부여 Ex) 주소록 릴레이션을 구성하는 속성 이름, 전화번호, 주소, 생일 튜플(tuple: row) 릴레이션의 각 행 하나의 현실을 표현 Ex) 주소록 릴레이션의 한 튜플 <홍길동, 880-1234, 서울, 3월 15일> Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.1 릴레이션의 개념(4) 도메인(domain) 널(null) 각 속성에 입력 가능한 값들의 데이터 형과 범위, 즉 각 속성이 가질 수 있는 모든 값들의 집합 원자값(atomic value, 더 이상 분리되지 않는 값)이어야 함 예) 주소록의 도메인 이름: 개인 이름들로 구성된 문자열 집합 전화번호: “ddd-dddd”의 형식으로 구성된 문자열의 집합 (d는 0부터9까지의 숫자) 주소: 도시를 나타내는 문자열의 집합 생일: “dd월dd일”로 구성된 문자열의 집합 널(null) 특정 속성에 대한 값을 알지 못하거나 아직 정해지지 않아 입력하지 못한 경우의 속성의 값 0이나 공백 문자 (space)와는 다름 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.1 릴레이션의 개념(5) 속성값이 잘못됨 Copyright 2002 by S.-g. Lee and J.-y. Chang
릴레이션 스키마(relation schema, 스키마) 2.1.2 릴레이션 스키마와 릴레이션 인스턴스 릴레이션 스키마(relation schema, 스키마) 릴레이션의 정의에 따라 만들어진 데이타 구조 R(A1, A2, …, An) R : 릴레이션의 이름 A1, A2, …, An : 속성들의 이름 예) 신입생은 학번,…등의 속성으로 구성된다. 스키마: 신입생(학번, 주민등록번호, 이름, 주소, 학과명) R = 신입생: 릴레이션의 이름 A1 = 학번: 속성의 이름 차수 = 5 차수(degree) 릴레이션 스키마에 정의된 속성의 수 차수 = 1 : 단항 릴레이션(unary relation) 차수 = 2 : 이항 릴레이션(binary relation) 차수 = n : n 항 릴레이션(n-ary relation) Copyright 2002 by S.-g. Lee and J.-y. Chang
릴레이션 인스턴스(relation instance, 인스턴스) 릴레이션 스키마에 현실 세계의 데이타를 튜플로 저장한 형태, 릴레이션인스턴스 = 릴레이션 기수(cardinality) 릴레이션 인스턴스의 튜플의 수 학번 주민등록번호 이름 주소 학과명 02302-001 790424-1825409 김광식 서울 전산과 02302-002 790305-1730021 김정현 02302-004 781021-2308302 김현정 대전 02302-005 790902-2704012 대구 02302-006 790715-1524390 박광수 광주 02301-001 771011-1809003 김형석 부산 수학과 02301-002 790825-1506390 박철수 02301-004 백태성 예)신입생 릴레이션의 인스턴스 Copyright 2002 by S.-g. Lee and J.-y. Chang
정리 신입생(학번, 주민등록번호, 이름, 주소, 학과명) 릴레이션이름 속성 튜플 예)신입생 릴레이션의 인스턴스 신입생 학번 02302-001 790424-1825409 김광식 서울 전산과 02302-002 790305-1730021 김정현 02302-004 781021-2308302 김현정 대전 02302-005 790902-2704012 대구 02302-006 790715-1524390 박광수 광주 02301-001 771011-1809003 김형석 부산 수학과 02301-002 790825-1506390 박철수 02301-004 백태성 튜플 예)신입생 릴레이션의 인스턴스 Copyright 2002 by S.-g. Lee and J.-y. Chang
Definition 릴레이션 스키마 = 스키마 릴레이션 인스탄스 = 인스턴스 =릴레이션 = 표 릴레이션 이름 = 표이름 속성 도메인 튜플 차수 원자값 기수 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.3 릴레이션의 특성 (매우 중요!!!) 중복된 튜플이 존재하지 않음 튜플간의 순서는 의미가 없음 릴레이션 인스턴스는 튜플들의 집합임 튜플간의 순서는 의미가 없음 튜플 내에서 속성의 순서는 의미가 없음 릴레이션 스키마는 속성들의 집합으로 표현됨 모든 속성은 원자값을 가짐 Note 속성은 중복되도 된다. Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.4 키 키는 왜 필요한가? 튜플간의 순서가 의미가 없으므로 튜플을 구분하기 위해서는 각 튜플의 값을 이용함 키(key) 속성들의 일부로 각 튜플들을 유일하게 식별해낼 수 있는 식별자(identifier) 예를 들어 신입생 릴레이션의 학번 또는 주민등록번호 속성은 각 튜플간에 유일하므로 키가 될 수 있음 그러나 학과명은 키가 될 수 없음 관계형 데이타 모델에서 특정 튜플을 구별하거나 탐색하기 위한 유일한 방법 Copyright 2002 by S.-g. Lee and J.-y. Chang
수퍼 키, 후보 키, 기본 키 수퍼 키(super key) 후보 키(candidate key) 기본 키(primary key) 아무런 제약 조건 없이 튜플들을 식별할 수 있는 속성의 집합 (주민등록번호) (학번, 주민등록번호) (학번, 주소) (이름, 주소) 등 후보 키(candidate key) 최소한의 속성만으로 구성된 키 (학번) (주민등록번호)(이름, 주소)(전화번호) 기본 키(primary key) 후보 키 중에서 식별자로 정의한 하나의 키 (학번) Copyright 2002 by S.-g. Lee and J.-y. Chang
외래키(foreign key) 다음 스라이드의 예를 먼저 다른 릴레이션의 기본 키를 참조하는 속성집합 두 릴레이션 스키마 R1, R2에 대해, R1의 어떤 속성집합 FK가 다음 두 조건을 만족하면, FK는 R2 의 기본키인 PK를 참조하는 R1의 외래키임 FK의 속성들은 릴레이션 스키마 R2 의 기본 키 PK와 동일한 도메인을 가짐 R1의 각 튜플의 FK값은 R2 의 특정 튜플의 PK값과 일치하거나 널이 됨 여기서 R1 튜플의 FK값이 널이 된다는 것은 알지 못하거나 아직 결정되지 않았다는 것을 의미함 이때, R1 : 참조하는 릴레이션(referencing relation) R2 : 참조되는 릴레이션(referenced relation) Copyright 2002 by S.-g. Lee and J.-y. Chang
외래키의 예(1) 학생 (학번, 주민등록번호, 이름, 주소, 전화번호, 학년, 학과번호) 학과 (학과번호, 학과명, 과사무실, 과사무실 전화번호) 학생 릴레이션에서 학과번호 303은 삽입할 수 없음!!! Copyright 2002 by S.-g. Lee and J.-y. Chang
외래키의 예(2) 자기 자신의 릴레이션을 참조하는 경우 교수 (교수번호, 주민등록번호, 이름, 학과, 학과장번호) 누구인지 모르거나 아직 결정되지 않았음을 의미 Copyright 2002 by S.-g. Lee and J.-y. Chang
기본키가 널이 될 수 있나? 기본 키는 식별자의 기능을 하므로 널이 될 수 없음 예를 들어 두개의 튜플값이 모두 널이면 구분이 불가능함 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.1.5 관계형 데이타베이스 관계형 데이타베이스 관계형 데이타 모델에 기반하여 하나 이상의 릴레이션으로 실세계를 표현한 데이타베이스 실세계를 관계형 데이타 모델이라는 추상적인 도구를 이용하여 표현한 것이지, 릴레이션들을 컴퓨터의 기억 장치에 어떠한 방법으로 저장할 것인가에 대한 물리적인 구조까지 정의한 것은 아님 관계형 데이타베이스가 하나 이상의 릴레이션으로 구성되어 있을 때 데이타베이스 스키마(database schema) : 각각의 릴레이션 스키마의 집합 데이타베이스 인스턴스(database instance) : 릴레이션 스키마들에 대한 릴레이션 인스턴스의 집합 Copyright 2002 by S.-g. Lee and J.-y. Chang
<예제 데이타베이스 (1)> 학사 데이타베이스 스키마 Copyright 2002 by S.-g. Lee and J.-y. Chang
<예제 데이타베이스 (2)> 학생 학과 Copyright 2002 by S.-g. Lee and J.-y. Chang
<예제 데이타베이스 (3)> 교수 교과목 강좌 Copyright 2002 by S.-g. Lee and J.-y. Chang
<예제 데이타베이스 (4)> 수강 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2 관계 대수 (Relational Algebra) 질의어(query language) 검색, 추가, 삭제, 삽입 등의 데이타 조작을 위한 연산들을 표현하기 위한 언어 절차적 언어(procedural language) 사용자가 원하는 결과를 얻기 위해 수행되어야 할 일련의 절차를 명시해야 하는 언어 예: C, C++와 같은 대부분의 프로그래밍 언어 비절차적 언어(non-procedural language) 수행 절차는 기술하지 않고 사용자가 원하는 결과만을 형식적으로 명시하는 언어 실질적 수행절차는 시스템 내부적으로 결정해야 함 Copyright 2002 by S.-g. Lee and J.-y. Chang
관계형 데이타베이스에서의 대표적 질의어 관계 대수(relational algebra) 절차적 언어 수학에서의 수식구조와 거의 유사 피연산자(operand) : 릴레이션 연산자(operator) 단항 연산자(unary operator) 이항 연산자(binary operator) 관계 해석(relational calculus) 비절차적 언어 이 책에서는 다루지 않음 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.1 기본 연산 (1) 선택(select) 하나의 릴레이션에서 주어진 조건을 만족하는 튜플들을 검색하는 기능 형식 조건식(릴레이션) 조건식 비교연산자(<, >, <=, >=, <>)와 부울 연산자(Ú, Ù, NOT)의 조합 예) 학생 릴레이션에서 주소가 “서울”인 튜플을 선택 주소 = “서울”(학생) 예) 1985년 이후에 임용된 부교수들의 튜플을 검색 임용년도 >= 1985 ∧ 직위 = “부교수”(교수) Copyright 2002 by S.-g. Lee and J.-y. Chang
Greek Alphabets 선택 select: s -> s 추출 project: p -> p 재명명 rename: r -> r a b c d e f g h I j k l m n o p q r s t u v w x y z Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.1 기본 연산 (2) 추출(project) 릴레이션에서 사용자가 원하는 속성만을 결과로 출력하는 연산 형식 속성리스트(릴레이션) 예) 학생 릴레이션에서 학번과 전화번호만을 추출 학번, 전화번호(학생) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.1 기본 연산 (3) 예) 학생 릴레이션에서 학과번호를 추출 학과번호 (학생) 중복은 제거하여 출력해야 함 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.1 기본 연산 (4) 연산자들의 조합 관계 대수 연산자들은 상호 중첩하여 사용 가능 예) 선택 연산은 교환법칙이 성립 조건식1(조건식2(릴레이션)) = 조건식2(조건식1(릴레이션)) 예) 1985년 이후에 임용된 부교수들의 튜플을 검색 임용년도 >= 1985(직위 = “부교수”(교수)) = 임용년도 >= 1985∧직위 = “부교수” (교수) = 직위 = “부교수”(임용년도 >= 1985(교수)) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.1 기본 연산 (5) 예) 중첩된 추출 연산 일반적으로 선택과 추출 연산의 조합으로 표현 이름, 주소 ( 이름, 주소, 전화번호 (교수)) = 이름, 주소 (교수) 이름, 주소, 전환번호 ( 이름, 주소 (교수)) <- 잘못된 연산 일반적으로 선택과 추출 연산의 조합으로 표현 예) 1985년 이후에 임용된 부교수들의 이름, 주소와 전화번호를 찾는 질의 : 이름, 주소, 전화번호( 임용년도 >= 1985 ∧ 직위 = “부교수” (교수)) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.1 기본 연산 (6) 재명명 특정 릴레이션에 이름을 부여하거나 변경하는 역할 형식 R2(R1) R2(A1, A2, …, An)(R1) 예)1985년 이후에 임용된 부교수들의 이름, 주소와 전화번호 해당교수.이름, 해당교수.주소, 해당교수.전화번호(해당교수(임용년도 >= 1985 ∧ 직위 = “부교수”(교수))) 예)강의실이 56-101인 강좌의 교수번호와 수강인원 해당강좌(교수번호, 인원)(교수번호, 수강인원(강의실 = “56-101”(강좌))) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.2 집합 연산 (1) 집합연산 수학적 집합 이론에서 정의된 연산 합집합(union) 차집합(minus) 카티션곱(Cartesian product) 교집합(intersection) → 차집합으로 정의할 수 있음 호환 가능한 릴레이션들(compatible relations) 합집합, 차집합, 교집합 연산에서 두 피연산자의 차수와 속성 이름들이 동일해야 하며, 같은 이름의 속성들이라 하더라도 도메인이 일치해야 함 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.2 집합 연산 (2) 합집합(∪) 예) 현재 재학중인 학생 또는 재직중인 교수들의 이름과 주소를 찾는 질의 (이름, 주소(학생)) ∪ (이름, 주소(교수)) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.2 집합 연산 (3) 차집합(-) 예) 교과목 정보에는 존재하지만 개설된 강좌에는 없는 교과목번호를 찾는 질의 (교과목번호(교과목)) - (교과목번호(강좌)) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.2 집합 연산 (4) 카티션곱(X) 두 개의 릴레이션에서 각각의 튜플들을 합쳐 하나의 튜플로 구성하면서 가능한 모든 튜플들의 조합으로 릴레이션을 만드는 연산 릴레이션 R1 릴레이션 R2 R1 X R2 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.2 집합 연산 (5) 카티션곱은 하나 이상의 릴레이션으로 부터 검색이 필요한 경우 유용함. 예) 전산과에 소속된 교수들의 이름과 전화번호, 그리고 소속학과의 학과 사무실을 찾는 질의 교수.이름, 교수.전화번호, 학과.사무실(교수.학과번호 = 학과.학과번호 ∧ 학과.학과명 = “전산과”(학과 X 교수)) ※교환법칙, 결합법칙 합집합, 교집합, 카티션곱에서 성립 차집합에서는 성립하지 않음 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (1) 교집합(∩) 두 릴레이션에 공통적으로 포함된 튜플들을 찾는 연산 예) 교수와 학생 중 공통된 주소를 찾는 질의 : (주소(학생)) ∩ (주소(교수)) R ∩ S = R – ( R – S ) = S – ( S – R ) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (2) 조인 두 릴레이션으로 부터 특정 조건을 만족하는 튜플들을 하나의 튜플로 결합하는 연산 형식 R1조건식R2 = 조건식(R1 X R2) 조건식: 조인조건(join condition) 조인에 나타나는 조건 동등조인(equijoin) : 속성 간의 동등비교 연산(=) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (3) 예)학생과 학생이 소속된 학과에 관한 정보를 추출 학생학생.학과번호 = 학과.학과번호학과 예) 전산과에 소속된 교수의 이름과 전화번호를 출력 교수.이름, 교수.전화번호(학과.학과명 = “전산과” (교수교수.학과번호 = 학과.학과번호학과) ) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (4) 자연조인(natural join) 일반적으로 같은 의미의 두 속성에 대한 동등 조인 중 하나의 속성을 제거하여 단순히 표현한 연산 형식 R1R2 = R1∪R2(R1.A1=R2.A1 ∧ R1.A2=R2.A2 ∧ … ∧ R1.An=R2.An(R1 X R2)) 공통되는 속성이 없으면 카티션 곱과 같음 교환법칙과 결합법칙이 성립 예) 학생학과 공통속성에 대해서 동일한 값을 갖는 튜플 쌍이 존재하지 않음 결과는 빈 릴레이션 Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (5) 예) 미적분학이 개설된 연도와 학기를 출력 연도, 학기(교과목명 = “미적분학”(교과목강좌)) 이 질의는 다음의 두 질의와 동일한 결과를 출력 연도, 학기 (교과목명 = “미적분학” (교과목 교과목.교과목번호=강좌.교과목번호강좌)) 연도, 학기 (교과목.교과목번호=강좌.교과목번호 Ù 교과목명 = “미적분학” (교과목 X 강좌)) 자연조인은 카티션곱이나 조인에 비해 단순한 표현 수단을 제공 그러나 모든 카티션곱이나 조인을 자연조인으로 표현할 수는 없음(예:그림 2-22는 자연조인으로 표현이 불가능함) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (6) 나누기(division) 예) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (7) 나누기 정의 예) 수강인원 40명인 강좌를 모두 수강한 학생을 출력 R S = R-S(R) - R-S((R-S(R) X S) - R-S, S(R)) 예) 수강인원 40명인 강좌를 모두 수강한 학생을 출력 수강인원 40인 강좌찾기 교과목번호, 연도, 학기(수강인원 = 40(강좌)) 수강 릴레이션으로 위의 질의 결과에 대해 나누기 수강 (교과목번호, 연도, 학기(수강인원 = 40(강좌))) 여기서 학번만을 추출 : 학번(수강 (교과목번호, 연도, 학기(수강인원 = 40(강좌)))) Copyright 2002 by S.-g. Lee and J.-y. Chang
2.2.3 추가 연산 (8) 지정(assignment) 복잡한 질의를 여러 개의 질의로 분리하거나 중간 결과에 이름을 부여 최종 질의를 결과에 이름을 부여 예) 3학년 학생을 선택하여 결과에 “3학년”이란 이름을 부여 3학년 ← 학년= 3 (학생) 예) 수강인원 40명인 강좌를 모두 수강한 학생 temp1 ← 교과목번호, 연도, 학기(수강인원 = 40(강좌)) temp2 ← 수강 temp1 학번(temp2) Copyright 2002 by S.-g. Lee and J.-y. Chang
질의 예(1) Copyright 2002 by S.-g. Lee and J.-y. Chang
질의 예(2) Copyright 2002 by S.-g. Lee and J.-y. Chang