Database Relational Model
description
Transcript of Database Relational Model
DatabaseRelational Model
SPARCS’11 undead
SPARCS'11 undead 2
What is Database?• Data
• 정보를 작성하기 위해 필요한 자료• Database
• 논리적으로 연관된 하나 이상의 자료의 모음• 데이터를 잘 정리해두고 , 필요할 때 정리된 정보를 취득하기 위함
• DMBS (Database Management System)• 데이터를 효과적으로 이용할 수 있도록 정리 / 보관하기 위한 소프트웨어• 데이터의 추가 , 변경 , 삭제 , 검색 등의 기능을 집대성한 소프트웨어 패키지• MySQL, PostgreSQL, SQLite, Microsoft SQL Server, Microsoft Access, Oracle 등• 다수의 사용자 또는 프로그램의 요구를 처리하고 적절히 응답하여 데이터를 사용할 수 있게 해주는 역할
2013-04-09
SPARCS'11 undead 3
DMBS Functions• Definition ( 정의 )
• 데이터에 대한 형식 , 구조 , 제약조건들을 명세하는 기능• Construction ( 구축 )
• DBMS 가 관리하는 기억장치에 데이터를 저장하는 기능• Manipulation ( 조작 )
• 특정한 데이터를 검색하기 위한 쿼리 , 데이터베이스의 갱신 , 보고서 생성 기능 등• Sharing ( 공유 )
• 여러 사용자와 프로그램이 데이터베이스에 동시에 접근하도록 하는 기능• Protection ( 보호 )
• 하드웨어나 소프트웨어의 오동작 또는 권한이 없는 악의적인 접근으로부터 시스템을 보호• Maintenance ( 유지보수 )
• 시간이 지남에 따라 변화하는 요구사항을 반영할 수 있도록 하는 기능2013-04-09
SPARCS'11 undead 4
Database Models• Hierarchical database model• Network model• Relational model• Entity-relationship model• Enhanced entity-relationship model• Object model• Document model• Entity-attribute-value model• Star schema
a
2013-04-09
SPARCS'11 undead 5
Database Models• Hierarchical database model• Network model• Relational model• Entity-relationship model• Enhanced entity-relationship model• Object model• Document model• Entity-attribute-value model• Star schema
다 필요 없고 일단 Relational model 부터 공부합시다2013-04-09
SPARCS'11 undead 6
Relational Model• Entity
• 실체• 실세계에서 개별적으로 인식될 수 있는 것• 데이터베이스에 저장되는 데이터의 대상
• Attribute• 어떤 entity 에 대해서 관심을 가질만한 가치가 있는 속성
• Relation• 둘 이상의 entity 들 간의 관계
2013-04-09
SPARCS'11 undead 7
Relational Model
2013-04-09
SPARCS'11 undead 8
Relational Model한 번 설계해 봅시다 .
2013-04-09
SPARCS'11 undead 9
Designing KAIST Student DB
2013-04-09
Student
SPARCS'11 undead 10
Designing KAIST Student DB• 이름• 학번• 학과• 출신고교• 생년월일
2013-04-09
Student
SPARCS'11 undead 11
Designing KAIST Student DB이름 학번 학과 출신고교 생년월일
샤바칸 20111064
전산학과 해외고 921112
찰제 20110846
전산학과 일반고 931125
만렙물개 20110054
산업디자인학과 일반고 920620
커피 20120308
전산학과 KSA 940206
채종욱 20120522
전산학과 KSA 940411
마재의 20120123
전산학과 한성과고 930503
짭덕 20100135
전기 및 전자공학과 서울과고 920626
호떡 20100982
전산학과 서울과고 920926
2013-04-09
SPARCS'11 undead 12
Desgning KAIST Student DB• Key• 어떤 entity 를 고유하게 만들어주는 attribute(s)• 하나의 필드가 될 수도 있고 , 여러 필드의 조합일 수도 있습니다 .• null 이 될 수 없는 필드여야 함• Unique 해야 함
• Key attribute
2013-04-09
SPARCS'11 undead 13
Designing KAIST Student DB이름 학번 학과 출신고교 생년월일
샤바칸 20111064
전산학과 해외고 921112
찰제 20110846
전산학과 일반고 931125
만렙물개 20110054
산업디자인학과 일반고 920620
커피 20120308
전산학과 KSA 940206
채종욱 20120522
전산학과 KSA 940411
마재의 20120123
전산학과 한성과고 930503
짭덕 20100135
전기 및 전자공학과 서울과고 920626
호떡 20100982
전산학과 서울과고 920926
• Key 가 될 수 있는 필드는 ?
2013-04-09
SPARCS'11 undead 14
Designing KAIST Student DB이름 학번 학과 출신고교 생년월일
샤바칸 20111064
전산학과 해외고 921112
찰제 20110846
전산학과 일반고 931125
만렙물개 20110054
산업디자인학과 일반고 920620
커피 20120308
전산학과 KSA 940206
채종욱 20120522
전산학과 KSA 940411
마재의 20120123
전산학과 한성과고 930503
짭덕 20100135
전기 및 전자공학과 서울과고 920626
호떡 20100982
전산학과 서울과고 920926
• Key 가 될 수 있는 필드는 ?
2013-04-09
SPARCS'11 undead 15
Designing KAIST Student DB이름 학번 학과 출신고교 생년월일
샤바칸 20111064
전산학과 해외고 921112
찰제 20110846
전산학과 일반고 931125
만렙물개 20110054
산업디자인학과 일반고 920620
커피 20120308
전산학과 KSA 940206
채종욱 20120522
전산학과 KSA 940411
마재의 20120123
전산학과 한성과고 930503
짭덕 20100135
전기 및 전자공학과 서울과고 920626
호떡 20100982
전산학과 서울과고 920926
• Key 가 될 수 있는 필드는 ?
2013-04-09
SPARCS'11 undead 16
Designing KAIST Student DB
2013-04-09
Department
SPARCS'11 undead 17
Designing KAIST Student DB• 학과 이름• 학과 코드• 창립 년도• 홈페이지
2013-04-09
Department
SPARCS'11 undead 18
Designing KAIST Student DB학과 이름 학과 코드 창립년도 홈페이지전산학과 cs 1972 cs.
산업디자인학과 id 1986 id.
전기 및 전자공학과 ee 1973 ee.
수리과학과 mas 1972 mathsci.
경영과학과 msb 2009 ms.
2013-04-09
SPARCS'11 undead 19
Designing KAIST Student DB학과 이름 학과 코드 창립년도 홈페이지전산학과 cs 1972 cs.
산업디자인학과 id 1986 id.
전기 및 전자공학과 ee 1973 ee.
수리과학과 mas 1972 mathsci.
경영과학과 msb 2009 ms.
이름 학번 학과 출신고교 생년월일샤바칸 2011106
4전산학과 해외고 921112
찰제 20110846
전산학과 일반고 931125
만렙물개 20110054
산업디자인학과 일반고 920620
커피 20120308
전산학과 KSA 940206
채종욱 20120522
전산학과 KSA 940411
마재의 20120123
전산학과 한성과고 930503
짭덕 20100135
전기 및 전자공학과 서울과고 920626
호떡 20100982
전산학과 서울과고 920926
2013-04-09
Department Student
그렇다면 이 둘의 관계는 ?- 학생은 학과에 소속되어 있다 -
SPARCS'11 undead 202013-04-09
Depart-ment
Stu-dent
include
샤바칸cs 찰제
…
id
만렙물개…
…
SPARCS'11 undead 21
Depart-ment
Stu-dent
include
1 1..nDepart-ment
Depart-ment
Stu-dent
Stu-dent
2013-04-09
SPARCS'11 undead 22
Designing KAIST Student DB학과 이름 학과 코드 창립년도 홈페이지전산학과 cs 1972 cs.
산업디자인학과 id 1986 id.
전기 및 전자공학과 ee 1973 ee.
수리과학과 mas 1972 mathsci.
경영과학과 msb 2009 ms.
무학과 ??? ??? ???
이름 학번 학과 출신고교 생년월일샤바칸 2011106
4cs 해외고 921112
찰제 20110846
cs 일반고 931125
만렙물개 20110054
id 일반고 920620
커피 20120308
cs KSA 940206
채종욱 20120522
cs KSA 940411
마재의 20120123
cs 한성과고 930503
짭덕 20100135
ee 서울과고 920626
호떡 20100982
cs 서울과고 920926
김영석 20121023
무학과 해외고 0531
2013-04-09
Department Student
SPARCS'11 undead 23
Designing KAIST Student DB학과 이름 학과 코드 창립년도 홈페이지전산학과 cs 1972 cs.
산업디자인학과 id 1986 id.
전기 및 전자공학과 ee 1973 ee.
수리과학과 mas 1972 mathsci.
경영과학과 msb 2009 ms.
삭ㅋ제ㅋ
이름 학번 학과 출신고교 생년월일샤바칸 2011106
4cs 해외고 921112
찰제 20110846
cs 일반고 931125
만렙물개 20110054
id 일반고 920620
커피 20120308
cs KSA 940206
채종욱 20120522
cs KSA 940411
마재의 20120123
cs 한성과고 930503
짭덕 20100135
ee 서울과고 920626
호떡 20100982
cs 서울과고 920926
김영석 20121023
null 해외고 930531
2013-04-09
Department Student
SPARCS'11 undead 24
Depart-ment
Stu-dent
include
1 1..n
2013-04-09
SPARCS'11 undead 25
Depart-ment
Stu-dent
include
0..1 1..n
2013-04-09
SPARCS'11 undead 26
Depart-ment
Stu-dent
include
0..1 1..nDepart-ment
Depart-ment
Stu-dent
Stu-dent
2013-04-09
SPARCS'11 undead 272013-04-09
Depart-ment
Stu-dent
include
샤바칸cs 찰제
…
id
만렙물개…
…
김영석msb
SPARCS'11 undead 28
Depart-ment
Stu-dent
include
0..1 1..n
2013-04-09
SPARCS'11 undead 29
Depart-ment
Stu-dent
include
0..n 1..n
2013-04-09
SPARCS'11 undead 30
Depart-ment
Stu-dent
include
0..n 1..nDepart-ment
Depart-ment
Stu-dent
Stu-dent
2013-04-09
SPARCS'11 undead 31
Designing KAIST Student DB학과 이름 학과 코드 창립년도 홈페이지전산학과 cs 1972 cs.
산업디자인학과 id 1986 id.
전기 및 전자공학과 ee 1973 ee.
수리과학과 mas 1972 mathsci.
경영과학과 msb 2009 ms.
이름 학번 학과 출신고교 생년월일샤바칸 201110
64cs 해외고 921112
찰제 20110846
cs 일반고 931125
만렙물개 20110054
id 일반고 920620
커피 20120308
cs KSA 940206
채종욱 20120522
cs KSA 940411
마재의 20120123
cs 한성과고 930503
짭덕 20100135
ee 서울과고 920626
호떡 20100982
cs 서울과고 920926
김영석 20121023
null 해외고 930531
2013-04-09
Department Student
SPARCS'11 undead 32
Designing KAIST Student DB학과 이름 학과 코드 창립년도 홈페이지전산학과 cs 1972 cs.
산업디자인학과 id 1986 id.
전기 및 전자공학과 ee 1973 ee.
수리과학과 mas 1972 mathsci.
경영과학과 msb 2009 ms.
이름 학번 학과 복수전공 출신고교 생년월일샤바칸 201110
64cs msb 해외고 921112
찰제 20110846
cs null 일반고 931125
만렙물개 20110054
id null 일반고 920620
커피 20120308
cs null KSA 940206
채종욱 20120522
cs null KSA 940411
마재의 20120123
cs null 한성과고 930503
짭덕 20100135
ee null 서울과고 920626
호떡 20100982
cs mas 서울과고 920926
김영석 20121023
null null 해외고 930531
2013-04-09
Department Student
SPARCS'11 undead 33
Designing KAIST Student DB이름 학과 복수전공 1 복수전공 2 부전공
샤바칸 cs msb null ( 경제 )찰제 cs null null null
만렙물개 id null null null
짭덕 ee null null null
호떡 cs mas null null
김영석 null null null null
안재만 cs mas ee null
조형 id msb null cs
2013-04-09
Student
SPARCS'11 undead 34
Designing KAIST Student DB이름 학과 복수전공 1 복수전공 2 부전공
샤바칸 cs msb null ( 경제 )찰제 cs null null null
만렙물개 id null null null
짭덕 ee null null null
호떡 cs mas null null
김영석 null null null null
안재만 cs mas ee null
조형 id msb null cs
2013-04-09
Student
Scenario:어떤 신입생이 들어옵니다 .이 사람은 오로지 DB 에 트롤링을 하려는 목적으로카이스트의 모든 학부 프로그램을 복수전공과 부전공을 적절히 섞어서 신청합니다 .
SPARCS'11 undead 35
Designing KAIST Student DB이름 학과 복수전공 1 복수전공 2 복수전공 3 복수전공 4 복수전공 5 복수전공 6 복수전공 7 부전공
1부전공
2부전공
3부전공
4부전공
5부전공
6
샤바칸 cs msb null null null null null null ( 경제 ) null null null null null
찰제 cs null null null null null null null null null null null null null
만렙물개 id null null null null null null null null null null null null null
짭덕 ee null null null null null null null null null null null null null
호떡 cs mas null null null null null null null null null null null null
김영석 null null null null null null null null null null null null null null
안재만 cs mas ee null null null null null null null null null null null
조형 id msb null null null null null null cs null null null null null
헤르메온느 cs id mas bs bis nqe ie ch msb ( 경제 ) stp me ms cbe
2013-04-09
Student
어엌ㅋㅋㅋㅋㅋ 닝겐노 모래시계와 강려크데스네
SPARCS'11 undead 36
Stu-dent
Depart-ment
Department-Student
학과이름 학과코드 창립년도 홈페이지바이오및뇌공학과 bis 2001 bioeng.
생명과학과 bs 1972 bs.
전산학과 cs 1972 cs.
수리과학과 mas 1972 math-sci.
이름샤바칸찰제
만렙물개김영석안재만조형
2013-04-09
SPARCS'11 undead 37
Stu-dent
Depart-ment
Department-Student
학과이름 학과코드 창립년도 홈페이지바이오및뇌공학과 bis 2001 bioeng.
생명과학과 bs 1972 bs.
전산학과 cs 1972 cs.
수리과학과 mas 1972 math-sci.
이름샤바칸찰제
만렙물개김영석안재만조형
학과코드 이름cs 샤바칸cs 찰제id 만렙물개cs 안재만id 조형
2013-04-09
SPARCS'11 undead 38
Stu-dent
Depart-ment
Department-Student
학과이름 학과코드 창립년도 홈페이지바이오및뇌공학과 bis 2001 bioeng.
생명과학과 bs 1972 bs.
전산학과 cs 1972 cs.
수리과학과 mas 1972 math-sci.
이름샤바칸찰제
만렙물개김영석안재만조형
학과코드 이름cs 샤바칸cs 찰제id 만렙물개cs 안재만id 조형
msb 샤바칸ee 안재만
mas 안재만msb 조형cs 조형
2013-04-09
SPARCS'11 undead 39
ERD
2013-04-09
SPARCS'11 undead 40
Entity Relation Diagram
2013-04-09
SPARCS'11 undead 41
StudentDepartment in-clude
dep__id
dep_name foundationhomepage
std_name std_number
2013-04-09
SPARCS'11 undead 42
schema
2013-04-09
SPARCS'11 undead 43
StudentDepartment in-clude
dep_id char(3), primary key, unique
dep_name
varchar(20), unique, not null
founda-tion integer, not null
hom-page varchar(20)
std_id integer, primary key, unique
std_name
varchar(20), unique, not null
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 44
StudentDepartment in-clude
dep_id char(3), primary key, unique
dep_name
varchar(20), unique, not null
founda-tion integer, not null
hom-page varchar(20)
std_id integer, primary key, unique
std_name
varchar(20), unique, not null
?!
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 45
StudentDepartment in-clude
dep_id char(3), primary key, unique
dep_name
varchar(20), unique, not null
founda-tion integer, not null
hom-page varchar(20)
std_id integer, primary key, unique
std_name
varchar(20), unique, not null
?!
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 46
StudentDepartment in-clude
dep_id char(3), primary key, unique
dep_name
varchar(20), unique, not null
founda-tion integer, not null
hom-page varchar(20)
std_id integer, primary key, unique
std_name varchar(20), not null
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 47
MySQL• Structured query language / 구조화 질의어• 특정한 DB 시스템에 한정되지 않아 널리 사용됨• Functions• Query• Data definition• Manipulation
2013-04-09
SPARCS'11 undead 48
$mysql -u zzongaly -pEnter password: ********Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 14 to server version: 3.23.34aType 'help;' or '\h' for help. Type '\c' to clear the buffermysql>
$mysql [–h host] [–u user] [–p[password]] [dbname]
2013-04-09
SPARCS'11 undead 49
>mysql -u zzongaly –ppasswordWelcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 14 to server version: 3.23.34aType 'help;' or '\h' for help. Type '\c' to clear the buffermysql>
>mysql [–h host] [–u user] [–p[password]] [dbname]
2013-04-09
SPARCS'11 undead 50
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql |+--------------------+2 rows in set (0.00 sec)
mysql> show databases;
2013-04-09
SPARCS'11 undead 51
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql |+--------------------+2 rows in set (0.00 sec)
mysql> show databases;
2013-04-09
SPARCS'11 undead 52
mysql> create database zzongaly -> ;Query OK, 1 row affected (0.04 sec)
mysql> create database [dbname];
2013-04-09
SPARCS'11 undead 53
mysql> use zzongalyDatabase changed
mysql> use [dbname];
2013-04-09
SPARCS'11 undead 54
mysql> show tables;Empty set (0.00 sec)
mysql> show tables;
2013-04-09
SPARCS'11 undead 55
StudentDepartment in-clude
dep_id char(3), primary key, unique
dep_name
varchar(20), unique, not null
founda-tion integer, not null
hom-page varchar(20)
std_id integer, primary key, unique
std_name varchar(20), not null
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 56
Student
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 57
mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) );
2013-04-09
SPARCS'11 undead 58
mysql> CREATE TABLE Student( -> std_id INTEGER, -> std_name VARCHAR(20) NOT NULL, -> PRIMARY KEY(std_id) -> );
mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) );
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 59
mysql> CREATE TABLE Student( -> std_id INTEGER, -> std_name VARCHAR(20) NOT NULL, -> PRIMARY KEY(std_id), -> CHECK (std_id >= 19000000 AND std_id< 30000000) -> );
mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) );
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 60
mysql> INSERT INTO Student VALUES(20070764, ’ 정진근’ );
mysql> INSERT INTO tablename VALUES(value [,-value]);
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 61
mysql> INSERT INTO Student(std_id, std_name) -> VALUES(20070764, ’ 정진근’ );
mysql> INSERT INTO tablename (fieldname [, field-name]) VALUES (value [,value]);
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 62
mysql> SELECT * FROM Student;
mysql> SELECT * FROM tablename;
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 63
mysql> SELECT std_id FROM Student;
mysql> SELECT fieldname FROM tablename;
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 64
mysql> SELECT * FROM Student WHERE std_id > 20110000;
mysql> SELECT * FROM tablename WHERE condi-tion;
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 65
mysql> SELECT FROM Student WHERE std_id = 20110125;
mysql> DELETE FROM tablename WHERE condi-tion;
std_id integer, primary key, unique
std_name varchar(20), not null
2013-04-09
SPARCS'11 undead 66
StudentDepartment in-clude
dep_id char(3), primary key, unique
dep_name
varchar(20), unique, not null
founda-tion integer, not null
hom-page varchar(20)
std_id integer, primary key, unique
std_name varchar(20), not null
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 67
in-clude
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 68
mysql> CREATE TABLE Dep_Stu( -> dep_id char(3) NOT NULL, -> std_id INTEGER NOT NULL, -> PRIMARY KEY( ) -> );
mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) );
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 69
mysql> CREATE TABLE Dep_Stu( -> dep_id char(3) NOT NULL, -> std_id INTEGER NOT NULL, -> PRIMARY KEY(dep_id, std_id) -> );
mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) );
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 70
mysql> CREATE TABLE Dep_Stu( -> dep_id char(3) NOT NULL, -> std_id INTEGER NOT NULL, -> PRIMARY KEY(dep_id, std_id), -> FOREIGN KEY(dep_id) REFERENCES Department, -> FOREIGN KEY(std_id) REFERENCES Student -> );
mysql> CREATE TABLE tablename( fieldname fieldtype [NOT NULL], [fieldname fieldtype [NOT NULL],] UNIQUE(fieldname[, fieldname]), PRIMARY KEY(fieldname[, fieldname]) );
dep_id char(3), not nullstd_id integer, not null
2013-04-09
SPARCS'11 undead 71
Help• 궁금하면 엔간하면 Google 신께 기도를 올리면 됩니다 .
2013-04-09
SPARCS'11 undead 72
Database Tuning
2013-04-09
SPARCS'11 undead 73
Database TuningGolden rule:
Good database performance starts with good database design. No amount of fine tuning will make a poorly designed database perform as well as a well-designed database.
2013-04-09
SPARCS'11 undead 74
Database Design• Conceptual design – DBMS independent
• Database analysis and requirements• Determine end-user views, outputs, and transaction-processing requirements
• Entity relationship modeling and normalization• Define entities, attributes, and relationships. Draw DR diagrams. Normalize ta-
bles.• Data model verification
• Identify main processes, insert, update, and delete rules• Logical design – DBMS dependent
• Translate the conceptual model into definitions for tables, views, and so on.• Physical design – Hardware dependent
• Define storage structures and access paths for optimum performance
2013-04-09
SPARCS'11 undead 75
Database Design• ACID test
• Atomicity• 모든 작업들이 수행되었는지를 보장하는 능력
• Consistency• 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
• Isolation• 작업을 수행할 때 다른 작업이 끼어들지 못하도록 보장하는 것
• Durability• 성공적으로 수행된 작업은 영원히 반영되어야 함
• Serializability• Multiuser 혹은 distributed database 에서 중요시됨• 여러 가지의 작업을 동시에 실행할 때 일관성 있는 결과를 내놓아야 함
2013-04-09
SPARCS'11 undead 76
Database Tuning쿼리를 처리할 때 CPU, RAM, Secondary Storage, Network, 어플리케이션의 코드 ( 라 쓰고 똥이라 읽습니다 ) 때문에 병목현상이 일어남 !
2013-04-09
SPARCS'11 undead 77
Database Tuning쿼리를 처리할 때 CPU, RAM, Secondary Storage, Network, 어플리케이션의 코드 ( 라 쓰고 똥이라 읽습니다 ) 때문에 병목현상이 일어남 !
두 가지 접근 :• SQL performance tuning
• 서버의 자원을 최대한 적게 사용하는 SQL 쿼리를 보내는 것• DBMS performance tuning
• 존재하는 자원을 최대한 효율적으로 사용하는 것
2013-04-09
SPARCS'11 undead 78
Database Tuning• Index 를 사용한다
• Create indexes for each single attribute used in a WHERE, HAVING, ORDER BY, GROUP BY
• Do not use indexes in small tables or tables with low sparsity• Declare primary and foreign keys so the optimizer can use the indexes in join oper-
ations.• Declare indexes in join columns other than PK or FK
2013-04-09
SPARCS'11 undead 79
Database Tuning• WHERE, HAVING 등 조건문 사용에 주의를 기한다 .
• Use simple columns or literals as operands in a conditional expression• Avoid the use of conditional expressions with functions whenever possible
• Numeric field comparisons are faster than character, date, and NULL comparisons• Equality comparisons are faster than inequality comparisons• Whenever possible, transform conditional expressions to use literals
• price – 10 = 7 price = 17• P_QOH < P_MIN AND P_MIN = P_REORDER AND P_MIN > 10 P_QOH = 10 AND P_MIN = P_REORDER AND P_MIN > 10
• When using multiple conditional expressions, write the equality conditions first• If you use multiple AND conditions, write the condition most likely to be false first• When using multiple OR conditions, put the condition most likely to be true first• Whenever possible, try to avoid the use of the NOT logical operator
• NOT (P_PRICE > 10.00) P_PRICE <= 10.00• NOT(EMP_SEX = ‘M’) EMP_SEX = ‘F’
2013-04-09
SPARCS'11 undead 80
Database Tuning• Query Formulation
• Identify what columns and computations are required• Simple expressions?• Aggregate functions? (GROUP BY, subquery)
• Identify the source tables• Determine how to join the tables• Determine what selection criteria is needed
• Simple comparison• Single value to multiple values (IN)• Nested comparisons ( PRICE >= ( SELECT AVG(PRICE) FROM PRODUCT )• Grouped data selection (HAVING)
• Determine in what order to display the output (ORDER BY)2013-04-09
SPARCS'11 undead 81
Database Tuning• DBMS performance tuning• Data cache• SQL cache• Sort ache• Optimizer mode (cost-based vs. rule-based)
* cost-based optimizer: determine the best approach to execute a query* rule-based optimizer: uses preset rules and points to deter-mine the best approach to execute a query
2013-04-09