Download presentation
Presentation is loading. Please wait.
Published byYuliana Irawan Modified 5년 전
1
GB ridge 웹 모바일및 빅데이터 응용과정 3주차: 데이터베이스 프로그래밍 [경기도형 대학생 취업브리지 사업]
가천대학교 브릿지 사업단
2
3주차: 데이터베이스 프로그래밍 이번 강좌에서는… RDBMS의 기초를 이해하고, 스키마 및 테이블설계 방법을 다루며, SQL문의 구문이해와 다양한 활용방법 들을 학습하고, 자바프로그램 이나 웹 프로그램에서의 JDBC 연동한 응용프로그램 구현방법 등을 다룬다 목차 01. RDBMS 기초이해 02. 스키마 및 테이블설계 03. SQL 이해 및 활용 04. JDBC 응용프로그래밍
3
릴레이션(relation) : 행과 열로 구성된 테이블
01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 릴레이션(relation) : 행과 열로 구성된 테이블 도서 4, DataBase, 세빛, 25000 도서 3, Python, 한빛, 15000 도서 2, JAVA, 한빛, 20000 도서 1, C++, 두빛, 10000 도서번호 ={1, 2, 3, 4} 도서이름 ={C++, JAVA, Python, DataBase} 출판사 ={두빛, 한빛, 세빛} 가격 = {10000, 20000, 15000, 25000} 도서번호 도서이름 출판사 가격 1 C++ 두빛 10000 2 JAVA 한빛 20000 3 Python 15000 4 DataBase 세빛 25000 첫 번째 행(1, C++, 두빛, 10000)의 경우 네 개의 집합에서 각각 원소 한 개씩 선택하여 만들어진것으로 이 원소들이 관계(relationship)를 맺고 있음.
4
주문(도서번호, 고객번호, 판매가격, 주문일자)
01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 관계(relationship) 릴레이션 내에서 생성되는 관계 : 릴레이션 내 데이터들의 관계 릴레이션 간에 생성되는 관계 : 릴레이션 간의 관계 주문(도서번호, 고객번호, 판매가격, 주문일자) 도서(도서번호, 도서이름, 출판사, 가격) 고객(고객번호, 이름, 주민번호, 주소, 핸드폰) 그림 x. 릴레이션 간의 관계
5
릴레이션 스키마와 인스턴스 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 도서 속성(애트리뷰트),
3주차: 데이터베이스 프로그래밍 릴레이션 스키마와 인스턴스 속성(애트리뷰트), 열(column) 이라고도 함(차수=4) 도서 스키마(내포) Schema 도서번호 도서이름 출판사 가격 1 C++ 두빛 10000 2 JAVA 한빛 20000 3 Python 15000 4 DataBase 세빛 25000 5 RDBMS 네빛 30000 투플(tuple), 행(row) 이라고도 함 (카디널리티=5) 인스턴스(외연) Instance 그림 x. 도서 릴레이션
6
릴레이션 스키마와 인스턴스 스키마의 요소 스키마의 표현 인스턴스 요소 01. RDBMS 기초이해
3주차: 데이터베이스 프로그래밍 릴레이션 스키마와 인스턴스 스키마의 요소 - 속성(attribute) : 릴레이션 스키마의 열 - 도메인(domain) : 속성이 가질 수 있는 값의 집합 - 차수(degree) : 속성의 개수 릴레이션 용어 같은 의미 통용 용어 파일 시스템 용어 릴레이션(relation) 테이블(table) 파일(file) 스키마(schema) 내포(intension) 헤더(header) 인스턴스(instance) 외연(extension) 데이터(data) 투플(tuple) 행(row) 레코드(record) 속성(attribute) 열(column) 필드(field) 스키마의 표현 - 릴레이션 이름(속성1 : 도메인1, 속성2 : 도메인2, 속성3 : 도메인3 …) EX) 도서(도서번호, 도서이름, 출판사, 가격) 인스턴스 요소 - 투플(tuple) : 릴레이션의 행 - 카디날리티(cardinality) : 투플의 수 → 투플의 속성의 개수는 릴레이션 스키마 차수와 동일, 릴레이션 내 모든 투플들은 서로 중복되지 않아야 함
7
릴레이션의 특징 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 속성은 단일 값을 가짐(속성의 원자 값)
3주차: 데이터베이스 프로그래밍 릴레이션의 특징 속성은 단일 값을 가짐(속성의 원자 값) - 각 속성의 값은 도메인에 정의된 값만을 가지며 그 값은 모두 단일 값이어야 함 속성은 서로 다른 이름을 가짐 - 속성은 한 릴레이션에서 서로 다른 이름을 가져야만 함 한 속성의 값은 모두 같은 도메인 값을 가짐 - 한 속성에 속한 열은 모두 그 속성에서 정의한 도메인 값만 가질 수 있음 속성의 순서는 상관없음(속성의 무순서) - 속성의 순서가 달라도 릴레이션 스키마는 변하지 않음 릴레이션 내의 중복 투플 존재 불가(튜플의 유일성) - 하나의 릴레이션 인스턴스 내에서는 서로 중복된 값을 가질 수 없음. 즉 모든 투플은 서로 값이 달라야 함 투플의 순서는 상관없음(튜플의 무순서) 투플의 순서가 달라도 같은 릴레이션임 관계 데이터 모델의 투플은 실제적인 값을 가지며, 이 값은 시간이 지남에 따라 데이터의 삭제, 수정, 삽입에 따라 순서가 바뀔 수 있음
8
관계데이터 모델과 키 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 관계데이터 모델과 키 관계 데이터 모델은 데이터를 2차원 테이블 형태인 릴레이션으로 표현함 - 관계데이터 제약조건(constraints)과 관계연산을 위한 관계대수(relational algebra)를 정의함 릴레이션의 기본키와 외래키 릴레이션의 키 - 속성 하나 혹은 몇 개의 조합으로 튜플을 유일하게 구별할 수 있는 키 후보키/기본키/대체키 - 속성들의 집합 A(={A1, A2, …,An})로 구성된 릴레이션 R에서 - 릴레이션 R의 한 속성집합 K(={Ai, Aj,…,An})가 속성집합 A의 부분집합(K⊆A) 이면서 유일성과 최소성을 만족하면 K를 릴레이션 R의 후보키라 함 - 후보키가 하나만 존재할 때는 바로 후보키가 기본키가 됨 - 후보키가 여러 개 존재할 때 하나를 선택하여 기본키로 지정하면 나머지 후보키를 대체키라 함 ※ 기본키로 지정된 속성들은 언제 어느 때고 널(NULL)이 될 수 없음 외래키 - 릴레이션 R1에 속한 한 속성들의 집합을 FK라 할때, 이 FK가 어떤 릴레이션 R2의 기본키가 된다면, 이 FK를 릴레이션 R1의 외래키(Foreign Key)라 하고, FK가 릴레이션 R2를 참조한다고 함
9
슈퍼키 관계데이터 키의 포함관계 기본키 대체키 후보키(투플을 식별할 수 있는 속성의 최소 집합) 01. RDBMS 기초이해
3주차: 데이터베이스 프로그래밍 관계데이터 키의 포함관계 슈퍼키 릴레이션 내 투플을 식별할 수 있는 속성의 집합 기본키 후보키 중 선정된 키 대체키 기본키로 선정되지 않은 후보키 후보키(투플을 식별할 수 있는 속성의 최소 집합)
10
관계데이터 모델의 무결성 제약조건 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 관계데이터 모델의 무결성 제약조건 데이터 무결성(integrity, 無缺性) : 데이터베이스에 저장된 데이터의 일관성과 정확성을 지키는 것 - 개체무결성: 기본키는 릴레이션 내에서 튜플을 유일하게 식별할 수 있는 속성의 집합으로 이루어져야 함 - 참조무결성: 릴레이션을 참조하는 외래키 값은 참조할 대상의 기본키 값을 같던지 아니면 참조할 대상을 갖지 않는 널(NULL) 값이어야 함 도메인 무결성 제약조건 : - 도메인 제약(domain constraint)이라고도 하며, 릴레이션 내의 투플들이 각 속성의 도메인에 지정된 값만을 가져야 함. - SQL 문에서 데이터 형식(type), 널(null/not null), 기본 값(default), 체크(check) 등을 사용하여 지정할 수 있음 개체 무결성 제약조건 : - 기본키 제약(primary key constraint)이라고도 함. - 릴레이션은 기본키를 지정하고 그에 따른 무결성 원칙 - 즉, 기본키는 NULL 값을 가져서는 안 되며 릴레이션 내에 오직 하나의 값만 존재해야 함 참조 무결성 제약조건: - 외래키 제약(foreign key constraint)이라고도 함 - 릴레이션 간의 참조 관계를 선언하는 제약조건임으로 자식 릴레이션의 외래키는 부모 릴레이션의 기본키와 도메인이 동일해야 함 - 자식 릴레이션의 값이 변경될 때 부모 릴레이션의 제약을 받게 됨
11
데이터의 논리적 표현(추가내용) 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 데이터의 논리적 표현(추가내용) 수강 릴레이션 학번 이름 학년 학과 수강과목 학점 담당교수 담당교수 소속 100 한길동 3 컴정과 데이터베이스 한나라 웹프로그래밍 두나라 전통과 200 두길동 1 전자과 300 세길동 2 JAVA 세나라 400 네길동 수강 릴레이션은 학번 애트리뷰트 만을 가지고는 튜플을 유일하게 구별할 수 없음 튜플을 유일하게 구별하면서 최소성을 만족하는 애트리뷰트들의 조합으로 “학번과 수강과목”을 선택한다면 기본키로써 사용이 가능할 것 삭제이상: 하나의 튜플을 삭제함으로써 유지되어야하는 정보까지도 삭제되어 정보의 손실을 가져옴(예, JAVA과목 폐강에 “세나라”가 “전통과”라는 정보, “네길동”이 “전자과”라는 정보도 사라짐 삽입이상: “네나라” 교수가 “UNIX”과목을 개설한다면 기본키의 무결성 제약조건에 위배되어 삽입 불가, 하나의 튜플을 삽입함에 있어서 원하지 않는 데이터를 함께 삽입하지 않으면 데이터의 삽입을 할 수 없는 현상 갱신이상: 어떤 하나의 사실을 갱신함에 있어서 중복된 튜플중에 일부 튜플의 애트리뷰트 만을 갱신하면 정보의 모순이 일어나는 현상 , 만약 “한나라”교수가 담당하는 “데이터베이스” 과목을 “네나라”로 변경한다면 데이터베이스를 수강하는 100,200,300 학변을 갖는 3개의 튜플에 대하여 담당교수 “한나라"를 “네나라"로 바꿔어 줘야 함. 만야 하나라도 갱신이 이루어지지 않으면 데이터베이스를 강의하지 않는 교수의 이름이 존재하게 됨 이상현상이 존재하는 릴레이션으로부터 분해과정을 통하여 이상현상을 제거하는 과정을 정규화라고 함
12
관계데이터베이스의 정규화 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 연산유형에 따른 이상현상: 정규화:
3주차: 데이터베이스 프로그래밍 관계데이터베이스의 정규화 연산유형에 따른 이상현상: - 삭제이상: 릴레이션 내에 존재하는 불필요한 데이터를 삭제하려 할 때 사용자의 의도와는 관계없이 꼭 필요한 정보도 함께 삭제되는 현상 - 삽입이상: 데이터베이스에 어떤 내용을 삽입하고자 할 때 개체의 무결성 조건에 위배됨으로 인해 불요불급하게 불필요하면서도 원하지 않는 데이터도 함께 삽입해야만 하고 그렇지 않을 경우 삽입조차 되지 않는 현상 - 갱신이상: 어떤 하나의 사실을 갱신함에 있어 중복된 튜플 중에 일부 튜플의 속성 값 만을 갱신하면 정보의 모순성이 일어나는 현상 정규화: - 이상현상의 발생원인은 여러 가지 사실들을 같은 릴레이션에 함께 표현하기 때문 임, 즉, 데이터의 중복이 원인 - 이상현상을 제거하기 위해서는 릴레이션 상에 존재하는 중복된 데이터를 없애야 함 - 이를 위해서는 릴레이션을 구성하는 속성들간의 중복성을 분석하고 하나의 릴레이션에 하나의 종속성만 존재하도록 릴레이션을 분해함 - 이상현상이 존재하는 릴레이션으로부터 분해과정을 통하여 이상현상을 제거함으로써 기본 릴레이션을 만들어가는 과정 ※ 즉, 하나의 릴레이션에 하나의 종속성이 존재하도록 릴레이션을 분해하는 과정이 정규화 임
13
관계데이터베이스의 정규화 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 정규화 수행 원칙:
3주차: 데이터베이스 프로그래밍 관계데이터베이스의 정규화 정규화 수행 원칙: - 정보의 무손실 표현: 하나의 스키마에서 다른 스키마로 변화 시에는 정보의 손실이 있어서는 안됨, 즉 변환전 스키마의 모든 정보가 변환후의 스키마에도 모두 포함되어 있어야 함 - 데이터 중복성의 감소: 스키마 변환 후에는 변환 전 보다 데이터의 중복성이 감소되어 여러 이상현상을 제거 할 수 있어야 함 - 분리의 원칙 유지: 복수 개의 중복성이 존재하는 릴레이션에 대하여 각 독립된 릴레이션 단위로 분리하여 독립된 관계성을 갖도록 함 ※ 함수적 종속(Functional Dependency)과 완전한 함수종속 - 어떤 릴레이션 R의 애트리뷰트들로 구성한 부분집합을 A, B라 할 때, 애트리뷰트 A의 값 각각에 대하여 애트리뷰트 B의 값이 시간에 관계없이 오직 하나만 연관되어 있다면 B는 A에 함수적 종속이라고 함 - R.A -> R.B로 표기하고, A는 B를 함수적으로 결정한다고 하며, A를 결정자, B를 종속자라고 함 - R.B가 복합 애트리뷰트 R.A에 함수종속이면서 R.A의 진부분집합에는 함수종속이 아닐 때 R.B는 R.A에 완전한 함수종속 이라고 함
14
기본정규형 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 제 1정규형(1NF: First Normal Form)
3주차: 데이터베이스 프로그래밍 기본정규형 제 1정규형(1NF: First Normal Form) - 어떤 릴레이션 R을 구성하는 모든 속성의 값이 원자값 만을 가질 때, 릴레이션 R은 제 1정규형이 됨 예) 학생수강(학번, 학과, 과목번호, 지도교수, 학년, 성적), 기본키: {학번, 과목번호} 라 할 때 . 학생의 과목성적은 학번과 과목번호의 조합으로 된 복합 애트리뷰트를 기본 키로 하여 식별 가능 . 그러나 학번을 알면 학과, 학년, 지도교수를 알 수 있고, 지도교수를 알면 학과를 알 수 있는데, 이것은 많은 중복이 포함되어 있다는 사실 . 중복이 포함되어 있는 원인에 의하여 삽입이상, 삭제이상, 갱신이상 발생 각자 확인 요망 학생수강 학번 (sno) 학과 (dept) 과목번호 (code) 지도교수 (professor) 학년 (year) 성적 (degree) 100 컴정과 A100 한나라 3 A B100 B 200 전자과 두나라 2 300 전기과 세나라 C ① {학번, 과목번호} → 성적 ② {학번, 과목번호} → 학년 ① 성적은 {학번, 과목번호}에 완전한 함수적 종속 ② 학년은 {학번, 과목번호}에 부분 함수적 종속
15
기본정규형 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 제 2정규형(2NF: Second Normal Form)
3주차: 데이터베이스 프로그래밍 기본정규형 제 2정규형(2NF: Second Normal Form) - 어떤 릴레이션 R이 1NF이고, 기본키에 속하지 않은 모든 애트리뷰트가 기본키에 완전한 함수종속 이면, 릴레이션 R은 제 2정규형이 됨 예) ① 학생지도(학번, 학과, 지도교수, 학년), 기본키: {학번} ② 수강성적(학번, 과목번호, 성적), 기본키: {학번, 과목번호} 로 분해 가능 . 프로젝션에 의해 분해된 두 개의 릴레이션이 조인연산에 의하여 정보의 손실 없이 원래의 릴레이션으로 환원 가능 . 학생수강 릴레이션은 학생지도와 수강성적 릴레이션의 조인 결과가 되고, 학생지도와 수강성적 릴레이션은 학생수강 릴레이션을 프로젝션 연산으로 무손실 분해한 결과 임 . 수강성적은 더 이상 분해할 수 없으나, 학생지도 릴레이션은 학번을 알면 학과, 지도교수를 알 수 있고, 지도교수를 알면 학과를 알 수 있는 상태로 아직도 상호 함수종속관계가 존재함 . 학번을 알면 지도교수를 알고, 지도교수를 알면 학과를 알 수 있음. 즉, 학과는 학번에 완전한 함수종속이면서, 지도교수를 통해 이행적 함수 종속이 됨 . 릴레이션에 이행적 함수 종속이 존재하면 2NF에 이상현상이 발생하게 됨, 각 유형별 이상현상 발생 학생지도 릴레이션에서 각자 확인 요망 ※ 이행적 함수종속 - R.A -> R.B -> R.C이면 R.A-> R.C가 성립함. 이때 C는 A에 대하여 이행적 함수 종속관계 에 있다고 함
16
학생지도 릴레이션 이상현상 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 학생지도 릴레이션 이상현상 . 학번을 알면 지도교수를 알고, 지도교수를 알면 학과를 알 수 있음. 즉, 학과는 학번에 완전한 함수종속이면서, 지도교수를 통해 이행적 함수 종속이 됨 . 릴레이션에 이행적 함수 종속이 존재하면 2NF에 이상현상이 발생하게 됨, 각 유형별 이상현상 발생 학생지도 릴레이션에서 각자 확인 요망 삽입이상 – 무결성 제약조건 위반 학생지도(학번, 학과, 지도교수, 학년) 기본키 : {학번} 학번 (sno) 학과 (dept) 지도교수 (professor) 학년 (year) 100 컴정과 한나라 3 200 전자과 두나라 2 300 전기과 세나라 학번 (sno) 학과 (dept) 지도교수 (professor) 학년 (year) null 통신과 오나라 삭제이상: 학생지도 릴레이션에서 학생(학번:100)에 대한 지도교수(한나라) 관계를 취소하기 위하여 해당 튜플을 삭제한다면 지도교수에 대한 소속 학과 정보가 사라져 버리는 결과를 초래하게 됨-> “한나라”교수가 “컴정과"라는 정보가 사라짐 갱신이상: 지도교수 “한나라”의 학과가 “컴정과”에서 “통신과”로 바뀌었다면 지도교수 한나라 를 애트리뷰트의 값으로 가지고 있던 모든 튜플의 학과 값을 통신과로 바꾸어 주어야 함. 만 일 일부만 변경이 되고 나머지는 변경이 안되었을 경우는 데이터의 불일치로 모순이 발생
17
기본정규형 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 제 3정규형(3NF: Third Normal Form)
3주차: 데이터베이스 프로그래밍 기본정규형 제 3정규형(3NF: Third Normal Form) - 릴레이션 R이 2NF이고, 기본키에 속하지 않는 모든 애트리뷰트가 기본키에 대하여 이행적 함수종속이 아닐 때의 R - 분해 전 릴레이션: R(A, ,B, C) * 조건: R.A->R.B, R.B->R.C일 때 R.A->R.C이면 이행적 함수종속 존재 - 분해 후 릴레이션: R1(A, B), R2(B, C) , R1과 R2는 3NF 임 ※ 2NF 이지만 3NF가 아닌 릴레이션에 대하여 프로젝션 분해한 결과 릴레이션 3NF는 2NF가 가지고 있던 정보의 무손실을 보장하지만, 역으로 3NF를 자연조인하여 2NF로 만드는 것은 가능하지만 항상 정보의 무손실을 기대할 수는 없음 각자 삽입이상 제거, 삭제이상 제거, 갱신이상 제거 확인요망
18
기본정규형 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 제 3정규형(3NF: Third Normal Form)
3주차: 데이터베이스 프로그래밍 기본정규형 제 3정규형(3NF: Third Normal Form) - 분해 후 릴레이션: R1(A, B), R2(B, C) , R1과 R2는 3NF 임 학생지도교수 지도교수 소속 。 지도교수소속(지도교수, 학과) PK(Primary Key): {지도교수} 。 학생지도교수(학번, 지도교수) PK(Primary Key): {학번} FK(Foreign Key): {지도교수} Reference Relation : 지도교수소속 학번 (sno) 지도교수 (professor) 100 한나라 200 두나라 300 세나라 400 지도교수 (professor) 학과 (dept) 한나라 통신과 두나라 전자과 세나라 전기과 삽입이상 제거: 지도교수소속 릴레이션에서는 지도 학생이 결정되지 않아도 <오나라, 컴정과>를 삽입 가능 삭제이상 제거: 학생지도교수 릴레이션에서 (200,두나라)라는 튜플을 삭제한다고 하더라도 지도교수소속 릴레 이션에 교수 “두나라”가 “전자과”에 소속되어 있다는 사실이 남아 있음 갱신이상: 지도교수소속 릴레이션의 하나의 튜플 만을 (한나라, 컴정과)를 (한나라, 통신과)로 갱신하면 됨
19
기본정규형 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 기본정규형 보이스/코드 정규형(Boyce/Codd Normal Form: BCNF) - 릴레이션 R이 ①복수의 후보키를 가지고 있고, ②후보키들이 복합 애트리뷰트들로 구성되어 있으며, ③후보키의 애트리뷰트들이 서로 중첩되어 있다면, 3NF로도 이상현상을 제거할 수 없음 - 릴레이션 R의 모든 결정자가 후보키라면 이 R은 BCNF 에 속함 - BCNF에 속하는 릴레이션은 모두 3NF에 속하지만 3NF에 속한 릴레이션이 모두 BCNF에 속하는 것은 아님 예) 학생수강과목(학번, 과목번호, 담당교수) , 기본키 ={학번, 과목번호} 이라 할 때, 학생수강 릴레이션이 유지할 제약조건 . 각 교수는 한과목만 담당, . 한 학생은 각 과목에 대하여 오직 한 명의 교수로부터 강의를 수강, . 한 과목은 여러 교수가 담당 가능 학번 과목번호 교수 학생수강과목 릴레이션은 기본키가 아닌 다른 애트리뷰트가 기본키에 대하여 완전함수종속이고, 이행종속관계도 없으므로 3NF, 그러나 후보키가 아닌 교수가 제약조건에 의하여 과목을 결정할 수 있는 결정자로 존재하므로 BCNF는 아님
20
정규화 테이블 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 학생수강과목: 1NF 학생지도: 2NF 학번
3주차: 데이터베이스 프로그래밍 정규화 테이블 학생수강과목: 1NF 학생지도: 2NF 학번 (sno) 이름 (name) 학과 (dept) 과목번호 (code) 지도교수 (professor) 학년 (year) 성적 (degree) 100 홍길동 컴정과 A100 한나라 3 A B100 B 200 박길동 전자과 두나라 2 300 전기과 세나라 C 학번 (sno) 이름 (name) 학과 (dept) 지도교수번호 (pno) 교수이름 (pname) 학년 (year) 100 홍길동 컴정과 p100 한나라 3 200 박길동 전자과 p200 두나라 2 300 전기과 p300 세나라 수강성적: 3NF/BCNF 학생: 3NF/BCNF 교수: 3NF/BCNF 학번 (sno) 과목번호 (code) 성적 (degree) 100 A100 A B100 B 200 300 C 학번 (sno) 이름 (name) 학년 (year) 지도교수코드 (pcode) 100 홍길동 3 p100 200 박길동 2 p200 300 p300 교수코드 (pcode) 교수이름 (pname) 학과 (dept) p100 한나라 컴정과 p200 두나라 전자과 p300 세나라 전기과
21
데이터베이스 설계시 고려사항 요구조건 분석방법 02. 스키마 및 테이블 설계 3주차: 데이터베이스 프로그래밍 무결성과 일관성
3주차: 데이터베이스 프로그래밍 데이터베이스 설계시 고려사항 무결성과 일관성 - 데이터베이스가 데이터에 대한 값과 시스템에 대한 제약조건을 만족하며, 연산작업(삽입, 갱신, 삭제)이 수행된 후에도 제약조건을 항상 만족해야 함 회복과 보안 정책 및 효율성 데이터베이스의 생명주기 - 요구조건 분석단계, 설계단계, 구현단계, 운영단계, 감시 및 개선단계 요구조건 분석방법 정보와 처리요구조건의 수집 - 사용자, 응용분야 결정, 필요한 데이터의 종류와 용도, 데이터처리형태 및 데이터의 흐름, 제약조건과 요구조건 수집 요구조건 명세서 작성 - 관련된 데이터요소, 트랜젝션과 이와 관련된 데이터 요소 및 처리 특성, 작업과 데이터와의 관계, 데이터요소 사이에서의 제약조건, 값의 유일성 및 함수의 종속성 등에 대하여 DFD(Data Flow Diagram) 등을 활용하여 작성 요구조건 명세의 검토 요구조건 명세서에 대하여 데이터베이스 시스템의 주요 사용자 그룹을 참석시켜 면밀한 검토 진행, 미비점 보완 후 확인작업을 거쳐서 최종 요구조건 명세서 확정
22
데이터베이스 설계 단계 02. 스키마 및 테이블 설계 3주차: 데이터베이스 프로그래밍 요구조건 분석단계: 요구조건 분석단계
3주차: 데이터베이스 프로그래밍 데이터베이스 설계 단계 요구조건 분석단계 데이터 및 처리 요구조건 개념적 설계단계 DBMS와 독립적인 개념스키마 설계 트랜잭션 모델링 논리적 설계단계 목표 DBMS에 부합하는 개념스키마 설계 트랜잭션 인터페이스 설계 물리적 설계단계 목표 DBMS에 부합하는 물리적 구조 설계 트랜잭션 세부 설계 구현단계 목표 DBMS의 DDL로 스키마 작성 트랜잭션(응용프로그래밍) 작성 요구조건 분석단계: - 데이터베이스 사용자는 누구인지, 사용자가 원하는 데이터베이스의 용도 파악 - 요구조건 명세서 작성
23
데이터베이스 설계 단계 02. 스키마 및 테이블 설계 3주차: 데이터베이스 프로그래밍 개념적 설계단계:
3주차: 데이터베이스 프로그래밍 데이터베이스 설계 단계 요구조건 분석단계 데이터 및 처리 요구조건 개념적 설계단계 DBMS와 독립적인 개념스키마 설계 트랜잭션 모델링 논리적 설계단계 목표 DBMS에 부합하는 개념스키마 설계 트랜잭션 인터페이스 설계 물리적 설계단계 목표 DBMS에 부합하는 물리적 구조 설계 트랜잭션 세부 설계 구현단계 목표 DBMS의 DDL로 스키마 작성 트랜잭션(응용프로그래밍) 작성 개념적 설계단계: - 개념스키마 모델링은 요구조건 명세서에 나타난 결과를 DBMS에 독립적이면서 고차원적인 E-R Diagram과 같은 개념적 데이터 모델로 기술하는 과정(뷰통합방법, 애트리브트 합성방법 있음) 뷰통합방법: - 요구조건분석단계에서 분석된 응용과 사용자 그룹을 기초로 각 부분별 뷰를 식별하고 모델링 함 ① 개체식별 ② 개체에 대한 키 애트리뷰트 결정 ③ 개체들간의 관계성 식별 ④ 개체를 기술하는 애트리뷰트 첨가 - 완성된 뷰를 통합하여 하나의 전체적 스키마 작성, 통합할 때 아래 개념을 이용 ① 동일성 통합- 같은요소나 동의어를 통합 ② 집단화- 요소적 성질의 개체원소들을 그룹핑 ③ 일반화 – 개체들의 공통성질을 기초로 분류 확대 애트리뷰트 합성방법: - 작업과 데이터와의 관계에 기초 함 ① 애트리뷰트를 식별하고 분류 ② 애트리뷰트에 대한 후보키 여부를 식별 ③ 개체을 정의: 기본키와 대체키, 개체의 성질을 기술하는 애트리뷰트들로 구성 ④ 관계성을 정의: 개체간 관계, 개체와 애트리뷰트 간 관계, 애트리뷰트 들간 관계 ⑤ E-R 다이어그램 등으로 전체 개념스키마를 그래프 형태로 표현, 정보구조 생성 ⑥ 정보구조의 분석과 확인작업을 실시 함
24
데이터베이스 설계 단계 02. 스키마 및 테이블 설계 3주차: 데이터베이스 프로그래밍 트랜잭션 모델링:
3주차: 데이터베이스 프로그래밍 데이터베이스 설계 단계 요구조건 분석단계 데이터 및 처리 요구조건 개념적 설계단계 DBMS와 독립적인 개념스키마 설계 트랜잭션 모델링 논리적 설계단계 목표 DBMS에 부합하는 개념스키마 설계 트랜잭션 인터페이스 설계 물리적 설계단계 목표 DBMS에 부합하는 물리적 구조 설계 트랜잭션 세부 설계 구현단계 목표 DBMS의 DDL로 스키마 작성 트랜잭션(응용프로그래밍) 작성 트랜잭션 모델링: - 요구조건 분석 결과 나타난 사용자의 응용들을 검토하여 구현해야 할 응용프그램을 고차원적 명세로 정의하는 것 - 응용의 구현에 필요한 정보들이 데이터베이스 스키마에 전부 포함 되도록 하기 위해 트랜잭션들을 식별하고 긴ㅇ적 특성을 설계초기 단계에서 결정하고 명세 적어도 트랜잭션의 입력데이터, 출력데이터, 내부적 제어의 흐름을 명세 트랜잭션 유형 ① 검색트랜잭션 ② 갱신트랜잭션 ③ 검색과 갱신 혼합 트랜잭션
25
데이터베이스 설계 단계 02. 스키마 및 테이블 설계 3주차: 데이터베이스 프로그래밍 논리적 설계 단계:
3주차: 데이터베이스 프로그래밍 데이터베이스 설계 단계 요구조건 분석단계 데이터 및 처리 요구조건 개념적 설계단계 DBMS와 독립적인 개념스키마 설계 트랜잭션 모델링 논리적 설계단계 목표 DBMS에 부합하는 개념스키마 설계 트랜잭션 인터페이스 설계 물리적 설계단계 목표 DBMS에 부합하는 물리적 구조 설계 트랜잭션 세부 설계 구현단계 목표 DBMS의 DDL로 스키마 작성 트랜잭션(응용프로그래밍) 작성 논리적 설계 단계: - 개념설계를 가지고 만들어진 정보구조를 목표 DBMS가 처리할 수 있는 개념 스키마 생성 - 이 생성된 스키마는 요구조건 명세 만족 및 무결성, 일관성, 제약조건도 만족 - 다음 단계를 거쳐 수행 ① 논리적 데이터 모델로 변환: 개념스키마를 DBMS에 맞는 논리적 데이터베이스 구조로 사상(데이터 모델에만 적합하게 모델 대 모델에 대한 사상 고려) ② 트랜잭션 인터페이스 설계: 데이테베이스를 이용하는 응용프로그램의 인터페이스 설계(완전한 트랜잭션 아닌 전체적 골격 결정, 각 트랜잭션에 대한 데이터 접근방법과 인터페이스 기술) ③ 개념 스키마의 평가 및 정제: 정량적 정보(데이터 크기, 처리 빈도수, 처리작업량)와 평가기준(접근속도 및 횟수, 전송량, 데이터베이스 크기 등)에 의해 평가 목표 DBMS가 제공하는 제공하는 인덱스 기법이나 해싱기법 등을 수용할 수 있는 표현으로 개선
26
관계 데이터 모델로의 변환 02. 스키마 및 테이블 설계 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 관계 데이터 모델로의 변환 지도 수강 강의 학생 교수 과목 학번 이름 학년 주소 성적 번호 전공 학과 시간 장소 학점 n m 1 학번 | 이름 | 학년 | 주소 학생 교수번호 | 교수이름 | 전공 | 학과 교수 과목번호 | 과목이름 | 학번 과목 교수번호 | 과목번호 | 시간 | 장소 강의 교수번호 | 학번 지도 학번 | 과목번호 | 성적 등록 <학사 데이터베이스를 위한 E-R Diagram> 관계데이터 모델에서는 데이터와 데이터 간의 관계를 모두 기본적으로 릴레이션, 즉 테이블로 표현 개념적 설계 결과로부터 생성된 E-R Diagram을 관계데이터 모델로 변환하는 방법
27
데이터베이스 설계 단계 02. 스키마 및 테이블 설계 3주차: 데이터베이스 프로그래밍 물리적 설계 단계:
3주차: 데이터베이스 프로그래밍 데이터베이스 설계 단계 요구조건 분석단계 데이터 및 처리 요구조건 개념적 설계단계 DBMS와 독립적인 개념스키마 설계 트랜잭션 모델링 논리적 설계단계 목표 DBMS에 부합하는 개념스키마 설계 트랜잭션 인터페이스 설계 물리적 설계단계 목표 DBMS에 부합하는 물리적 구조 설계 트랜잭션 세부 설계 구현단계 목표 DBMS의 DDL로 스키마 작성 트랜잭션(응용프로그래밍) 작성 물리적 설계 단계: - 논리적 데이터베이스 구조인 논리적 스키마로부터 효율적이고 구현 가능한 물리적 데이터베이스로 설계하는 단계 - 데이터베이스의 물리적 구조는 데이터베이스의 성능과 밀접한 관계 있음 - 저장 레코드의 양식이나 저장 위치, 레코드 집중화 및 접근경로의 설계 등을 포함 데이터베이스 구현단계: - 목표 DBMS의 DDL로 기술한 명령문을 컴파일하고 실행시켜 데이터베이스 스키마와 공백 데이터베이스 파일을 생성 - 이 단계에서 데이터베이스에 데이터 적재 가능 - 이 시점에서 응용프로그래머는 데이터베이스의 트랜잭션을 구현 - 이를 위해 트랜잭션의 개념적 명세서를 검토하고 DML문 삽입된 프로그램 작성
28
정규화 테이블 생성 01. RDBMS 기초이해 3주차: 데이터베이스 프로그래밍 학생수강과목: 1NF 학생지도: 2NF 학번
3주차: 데이터베이스 프로그래밍 정규화 테이블 생성 학생수강과목: 1NF 학생지도: 2NF 학번 (s_no) 이름 (s_name) 학과 (dept) 학수번호 (h_code) 지도교수번호 (p_no) 학년 (year) 성적 (degree) 100 홍길동 컴공과 A100 p100 3 A B100 B 200 박길동 전자과 p200 2 300 전기과 p300 C 학번 (s_no) 이름 (s_name) 학과 (dept) 지도교수번호 (p_no) 교수이름 (p_name) 학년 (year) 100 홍길동 컴공과 p100 한나라 3 200 박길동 전자과 p200 두나라 2 300 전기과 p300 세나라 학생: 3NF/BCNF 교수: 3NF/BCNF 학번 (s_no) 이름 (s_name) 학년 (year) 지도교수번호 (p_no) 100 홍길동 3 p100 200 박길동 2 p200 300 p300 교수코드 (p_code) 교수이름 (p_name) 학과 (dept) p100 한나라 컴공과 p200 두나라 전자과 p300 세나라 전기과 수강성적: 3NF/BCNF 학번 (s_no) 학수번호 (h_code) 성적 (degree) 100 1100 A 2100 B 200 300 C 개설교과 3NF/BCNF 교과목: 3NF/BCNF 강의실: 3NF/BCNF 학수번호 (h_code) 개설교수 (p_no) 과목 코드 (c_code) 강의실번호 (c_room) 1100 p100 c101 C-1 2100 p200 c102 C-2 과목코드 (c_code) 과목명 (c_name) c101 JAVA c102 C++ c103 Data Base 강의실번호 (c_room) 위치 (location) C-1 IT대 5층 501호 C-2 IT대 5층 502호 C-3 IT대 5층 503호
29
SQL 테이블 생성과 제거 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 SQL SQL은 크게 DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language)로 나누어지는데, DDL은 관계형 데이터베이스와 테이블의 생성과 제거와 같은 기능을 다루는 SQL이고, DML은 레코드의 삽입, 조회, 삭제 및 수정 등과 같은 기능을 다루는 SQL이며, DCL은 사용자 권한과 보안과 같은 기능을 다루게 됨. 본 강좌에서는 테이블과 테이블 내에 존재하는 레코드를 다루는 범주에서 SQL의 다양한 사용법을 다름 테이블 생성과 제거 CREATE TABLE 테이블_이름( {열이름 데이터타입 [NOT NULL] [DEFAULT 값],} [PRIMARY KEY(열이름_리스트),] {[UNIQUE (열이름_리스트),]} {[FOREIGN KEY(열이름_리스트) REFERENCES 기본테이블[()] [ON DELETE 옵션] [ON UPDATE 옵션]]}, [CHECK(조건식)]); CREATE TABLE 학생( 학번 INTEGER NOT NULL, 성명 VARCHAR(15) NOT NULL, 지도교수코드 CHAR(4), 전화번호 VARCHAR(15), 주소 VARCHAR(50), PRIMARY KEY(학번), FOREIGN KEY(지도교수코드) REFERENCES 교수, CHECK(학번>=1000 AND 학번<=9999)); DROP TABLE 테이블_이름; DROP TABLE 학생;
30
SQL 데이터 조작문 SELECT 문 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 SQL 데이터 조작문 데이터 조작문(DML)에는 SELECT(검색), INSERT(삽입), DELETE(삭제), UPDATE(수정)가 있음 SELECT 문 SELECT [ALL | DISTINCT] attribute_list ➊ FROM table_list ➋ [WHERE condition] ➌ [GROUP BY attribute_list ➍ [HAVING condition]] ➎ [ORDER BY attribute_list[ASC | DESC]]; ➏ ➊ 검색할 테이블에 대한 ATTRIBUTE 즉, 필드(데이터항목)에 대한 이름들을 기술하고 모든 필드를 검색할 경우에는 *(와일드 카드)를 기술. 또한 통계처리를 위한 집단 함수인 MAX(), MIN(), AVG(), SUM(), COUNT(), COUNT(*)등을 기술할 수도 있음. ➋ 데이터를 검색할 테이블을 기술하며, 관계를 맺는 두 개 이상의 테이블로부터 조인 검색을 하는 경우에는 해당 테이블을 모두 기술. ➌ 조건을 지정, 기술하지 않으면 무조건적인 검색이 되어 모든 튜플에 대한 검색 결과를 가져오게 됨 ➍ GROUP 단위로 질의를 실행 위해 기술, 기술된 애트리뷰트(필드)가 있다면 애트리뷰트의 값이 동일한 튜플(행)들을 모아서 먼저 GROUPING을 수행하고, GROUPING된 결과로부터 한 개의 튜플(레코드)씩 질의 결과를 생성 ➎ GROUP BY 절에 대한 조건을 기술, GROUPING을 할 때 조건을 부여 함 ➏ 질의된 결과에 대하여 특정 애트리뷰트(필드)를 중심으로 정렬한 결과를 얻기 위하여 기술
31
조건검색(WHERE 절) 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 조건검색(WHERE 절) WHERE 절 이후에 관계(비교) 연산자와 논리 연산자를 조합하여 기술 BETWEEN 검색: SELECT * FROM STUDENT WHERE NUMBER BETWEEN 100 AND 200 집합원소 검색: SELECT * FROM STUDENT WHERE NUMBER IN (100, 200, 300); 패턴매칭 검색(LIKE): SELECT * FROM STUDENT WHERE NAME LIKE "ABC...N"; 순서를 명세한 검색(ORDER BY): SELECT PROFESSOR_ID, STUDENT_ID, NAME, PHONE_NUM FROM STUDENT WHERE STUDENT_ID >=5000 ORDER BY PROFESSOR_ID ASC, STUDENT_ID DESC; 그룹질의(GROUP BY)를 이용한 검색: SELECT PROFESSOR_ID, AVG(GRADE) AS 평균성적 FROM STUDENT GROUP BY PROFESSOR_ID; 그룹 탐색 조건절(HAVING)을 이용한 검색: SELECT ROFESSOR_ID, AVG(GRADE) AS 평균성적 FROM STUDENT GROUP BY PROFESSOR_ID HAVING COUNT(*) >= 10; . 좌 기준 매칭 : WHERE NAME LIKE "ABC%“ . 우 기준 매칭 : WHERE NAME LIKE "%ABC“ . 좌우기준 매칭 : WHERE NAME LIKE "AB%CD%“ . 포함기준 매칭 : WHERE NAME LIKE "%ABC%"
32
조인질의 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍 두 개 이상의 테이블로부터 데이터를 검색하는 질의
3주차: 데이터베이스 프로그래밍 조인질의 두 개 이상의 테이블로부터 데이터를 검색하는 질의 두 개의 테이블로부터 조인질의가 가능 하려면 공통된 도메인을 갖는 애트리뷰트가 존재해야 함 두 테이블의 공통된 애트리뷰트 간에 관계가 설정되어 있어야 함 조건질의 예 1 SELECT STUDENT.ID, STUDENT.NAME, PROFESSOR.NAME, PROFESSOR.PHONE_NUM FROM STUDENT, PROFESSOR WHERE STUDENT.PROFESSOR_ID = PROFESSOR.ID; 조건질의 예 2 SELECT STUDENT.NAME, PROFESSOR.NAME FROM STUDENT, PROFESSOR WHERE STUDENT.ID = 12345 AND STUDENT.PROFESSOR_ID = PROFESSOR.ID;
33
부속질의 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 부속질의 SELECT 문에 포함된 SELECT 문을 부속질의라고 하며, WHERE 절이나 HAVING 절에 나타 남 부속질의가 WHERE절에 나타나면 질의 결과에 포함된 개별적인 행들을 선택하고, 부속질의가 HAVING절에 나타나면 질의 결과에 나타나는 행의 그룹들을 선택하게 됨 부속질의 예 1 : 비교검사를 갖는 부속질의 탐색조건 SELECT 열_리스트 FROM 메인_테이블 WHERE 검사_값 비교연산자 (부속질의); SELECT * FROM STUDENT WHERE PROFESSOR_ID = (SELECT ID FROM PROFESSOR WHERE NAME = ‘한기태’); 부속질의 예 2: 집합원소 검사 SELECT 열_리스트 FROM 메인_테이블 WHERE 검사_값 [NOT] IN (부속질의); SELECT * FROM STUDENT WHERE PROFESSOR_ID [NOT] IN (SELECT ID FROM PROFESSOR WHERE DEPARTMENT=“컴퓨터공학과”);
34
부속질의 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍 부속질의 예 3 : 존재 검사
3주차: 데이터베이스 프로그래밍 부속질의 부속질의 예 3 : 존재 검사 SELECT 열_리스트 FROM 메인_테이블 WHERE [NOT] EXITS (부속질의); SELECT * FROM STUDENT WHERE PROFESSOR_ID [NOT] EXITS (SELECT * FROM PROFESSOR WHERE STUDENT.PROFESSOR_ID = PROFESSOR_ID AND DEPARTMENT = “컴퓨터공학과”); 부속질의 예 4: 한정비교 검사 SELECT 열_리스트 FROM 메인_테이블 WHERE 검사_값 비교연산자 [ANY | ALL] (부속질의); SELECT DEPARTMENT, NAME FROM PROFESSOR A WHERE AGE <= ANY (SELECT AGE FROM STUDENT B WHERE A.ID = B.PROFESSOR_ID); SELECT DEPARTMENT, NAME FROM PROFESSOR A WHERE AGE > ALL (SELECT AGE FROM STUDENT B WHERE A.ID = B.PROFESSOR_ID);
35
HAVING 절 부속질의 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 HAVING 절 부속질의 WHERE 절의 부속질의가 테이블의 행들을 선택하는 조건검사를 위하여 사용되었다면, HAVING 절의 부속질의는 GROUP BY 절의 조건검사를 위하여 사용 됨 HAVING 절 부속질의 예 SELECT 열_리스트 FROM 메인_테이블 GROUP BY 열_리스트 HAVING 검사_값 부속질의 탐색조건 (부속질의); SELECT DEPARTMENT, AVG(GRADE) FROM STUDENT GROUP BY DEPARTMENT HAVING AVG(GRADE) > (SELECT AVG(GRADE) FROM STUDENT);
36
UPDATE(갱신) 문 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 UPDATE(갱신) 문 테이블에서 기존 튜플(레코드)을 하나씩 조사하면서 WHERE 절의 탐색조건을 만족하는 모든 레코드들에 대하여 SET절에 기술된 대로 애트리뷰트(필드)의 값을 변경 기본형식 UPDATE 테이블_이름 SET 애트리뷰트(필드)_이름 = 연산식[,...] [WHERE 탐색조건]; 갱신문 예 1 UPDATE STUDENT SET PHONE_NUM = “ ” WHERE ID = 9000; 갱신문 예 2 UPDATE STUDENT SET DEPARTMENT = “컴공과” WHERE PROFESSOR_ID = (SELECT ID FROM PROFESSOR WHERE NAME = “한나라”);
37
INSERT(삽입)문 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 INSERT(삽입)문 새로운 현실 세계의 데이터를 데이터베이스 테이블에 삽입할 때는 튜플(행) 형태로 삽입 단일 행을 직접 삽입하는 방법 INSERT INTO 테이블[(애트리뷰트_리스트)] VALUES(애트리뷰트에 대응되는 값_리스트); 단일 행 삽입 예 INSERT INTO STUDENT(ID, NAME, DEPARTMENT, PROFESSOR_ID) VALUES(111, '한국남', '컴공과', 'A100'); 다중 행을 삽입하는 방법 INSERT INTO 테이블[(애트리뷰트_리스트)] SELECT문; 다중 행을 삽입 예 INSERT INTO 대학원 SELECT * FROM 학부 WHERE 학과 = ‘컴공과’ AND 학년 = 4;
38
DELETE(삭제)문 03. SQL 이해 및 활용 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 DELETE(삭제)문 현실 세계로부터 제거된 데이터가 있다면 데이터베이스에도 현실 세계를 정확하게 반영해야 할 것임. 튜플 삭제 기본형식 DELETE FROM 테이블_이름 [WHERE 탐색조건]; 단일 행을 삭제 예 DELETE FROM STUDENT WHERE ID = 111; 다중 행 삭제 예 DELETE FROM STUDENT; //테이블 전체 튜플(행) 삭제 부속질의를 이용한 삭제 예 DELETE FROM STUDENT WHERE PROFESSOR_ID IN (SELECT ID FROM PROFESSOR WHERE SUBJECT = "DATABASE');
39
JDBC 란? 04. JDBC 응용 프로그래밍 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 JDBC 란? 자바를 이용하여 데이터베이스에 접근하기 위한 각종 SQL 문을 수행할 수 있도록 제공 하는 API 모든 DBMS에서 공통적으로 사용할 수 있도록 인터페이스와 클래스로 되어 있고 각 DBMS의 Vender들이 구현해 놓았음 DBMS의 Vender에서 제공되는 구현 클래스를 JDBC 드라이버라고 함 SQL 문 JDBC 인터페이스 드라이버 관계형 테이블 DBMS Application
40
JDBC를 이용한 데이터베이스 연결방법 04. JDBC 응용 프로그래밍 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 JDBC를 이용한 데이터베이스 연결방법 1 단계 : SQL을 사용하기 위한 클래스를 import 함 import java.sql.*; 2 단계 : 드라이버를 로딩 함 Class.forName(“DBMS 드라이버 클래스 이름”); 3 단계 : 연결객체인 Connection 객체를 생성 Connection con = DriverManager.getConnection(⋯ ;) 4 단계 : SQL 문장을 사용하기 위한 문장객체인 Statement(PreparedStatement) 객체 생성 Statement stmt = con.createStatement(); 5 단계 : SQL의 결과를 얻기 위한 결과집합 객체인 ResultSet 객체를 생성 String SQL = “select * from dept”; ResultSet rs = stmt.executeQuery(SQL); rs.next(), .., rs.getString(1) 등으로 결과 얻음 6 단계 : 모든 객체를 닫음(close). if(rs !=null) rs.close(); if(pstmt != null) pstmt.close(); if(con != null) con.close();
41
1단계 : JDBC API import 2단계 : 드라이버 로딩 04. JDBC 응용 프로그래밍
3주차: 데이터베이스 프로그래밍 1단계 : JDBC API import JDBC에서 사용하는 클래스와 인터페이스를 지정하는 단계 import java.sql.*; public class JDBC_Exam{ . } 2단계 : 드라이버 로딩 Class.forName() 메서드 사용 - dbms 드라이버 클래스의 객체를 만들어 런타임시 메모리로 로딩시켜 주며, DriverManager 클래스의 static 멤버변수로 저장 try{ Class.forName(“oracle.jdbc.driver.OracleDriver”) } catch(ClassNotFundException ce){ ce.printStackTrace(); }
42
3단계 : 연결(Connection) 04. JDBC 응용 프로그래밍 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 3단계 : 연결(Connection) 연결 객체를 생성하기 위하여는 DriverManager 클래스의 ststic 메서드인 getConnection() 메서드 이용 Try{ Connection con = “scott”, “tiger”); } catch(SQLException se){ se.printStackTrace(); } DriverManager의 주요 메서드 ① getConnection(String url, String user, String password) url user=“scott”, password=“tiger” Connection 객체의 주요 메서드 ① createStatement() - SQL문을 전송할 수 있는 Statement 객체를 생성 ② prepareStatement(String sql) - SQL문을 전송할 수 있는 PreparedStatement 객체를 생성
43
4단계 : 문장(Statement) 04. JDBC 응용 프로그래밍 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 4단계 : 문장(Statement) DBMS와 연결된 상태에서 SQL문을 전송하기 위한 Statement 객체를 생성 Try{ Statement stmt = con.createStatement(); String SQL = “select * from dept”; ResultSet rs = stmt.executeQuery(SQL); } catch{SQLException se}{ se.printStackTrace(); } ➊ executeQuery() - SQL문으로 select문을 전송할 때 사용 (반환: ResultSet 객체) ➋ executeUpdate() - select문을 제외한 insert, update, delete, create 문 등에서 사용(반환: 정수 값) ➌ execute() - select문 혹은 select 이외의 문에서 모두 사용 가능, 사용자로부터 sql문을 입력으로 받는 등 현재 시점에서 어떤 sql문인지 모를 때 사용(반환: boolean이며 true이면 ResultSet객체이고, false이면 갱신된 행의 개수가 있다는 것임) Statement stmt = con.createStatement(); StringBuffer sb = new StringBuffer(); Sb.append(“update univ set id = ”); boolean isResult = stmt.execute(sb.toString()); if(isResult){ ResultSet rs = stmt.getResultSet(); while(rs.next()){ System.out.println(“id : “+rs.getString(id)); } }else{ int rowCount = stmt.getUpdateCount(); System.out.println(“rowCount ; “+rowCount);
44
5단계 : 결과집합(ResultSet) 04. JDBC 응용 프로그래밍 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 5단계 : 결과집합(ResultSet) SQL문에 대한 결과를 처리할 수 있는 추상화한 인터페이스로 executeQuery() 메서드를 실행한 결과를 반환 받기 위한 것 ResultSet의 주요 메서드 boolean absolute(int row) boolean first() boolean last() boolean next() boolean previous() void close() byte getByte(int columnIndex) byte getByte(String columnName) int getInt(int columnIndex) int getInt(String columnName) String getString(int columnIndex) String getString(String columnName)
45
JDBC 예제 04. JDBC 응용 프로그래밍 3주차: 데이터베이스 프로그래밍 java.sql.*;
3주차: 데이터베이스 프로그래밍 JDBC 예제 java.sql.*; public class JDBC_Exam { static{ try{ Class.forName("com.mysql.jdbc.Driver"); } catch(ClassNotFoundException ce){ ce.printStackTrace(); } public static void main(String[] args) { String dbURL = "jdbc:mysql://localhost:3306/univdb"; Connection con = DriverManager.getConnection(dbURL,"root", ""); Statement stmt = con.createStatement(); StringBuffer sb = new StringBuffer(); sb.setLength(0); sb.append("select * from student"); ResultSet rs = stmt.executeQuery(sb.toString()); while(rs.next()){ System.out.println("id : " + rs.getString(1) +", "+"name : " + rs.getString("name")); } catch(SQLException se){ System.out.println("Connect Error!"); se.printStackTrace();
46
PreparedStatement 04. JDBC 응용 프로그래밍 3주차: 데이터베이스 프로그래밍
3주차: 데이터베이스 프로그래밍 PreparedStatement SQL문을 작성 할 때 컬럼 값을 지정하지 않고 변수로 처리하는 경우에 PreparedStatement 객체 사용 import java.sql.*; public class PreparedStatement_Exam { static{ try{ Class.forName("com.mysql.jdbc.Driver"); } catch(ClassNotFoundException ce){ ce.printStackTrace(); } public static void main(String[] args) { Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; String dbURL = "jdbc:mysql://localhost:3306/univdb"; con = DriverManager.getConnection(dbURL,"root", ""); String SQL = "select * from student where id =? and name = ?"; pstmt = con.prepareStatement(SQL); pstmt.setString(1, " "); pstmt.setString(2, "김길동"); rs = pstmt.executeQuery(); while(rs.next()){ System.out.println("번호 : " + rs.getString(1) +", "); System.out.println("성명 : " + rs.getString("name")); System.out.println("학과 : " + rs.getString(3)); } catch(SQLException se){ se.printStackTrace(); } finally{ if(rs !=null) rs.close(); if(pstmt != null) pstmt.close(); if(con != null) con.close();
Similar presentations