DB 솔루션은 개발자가 직접 작업을 컨트롤 하지 못한다.
다만 SQL 이라는 언어를 통하여 DB 솔루션과 대화를 하며 개발자가 원하는 데이터를 요청하고
응답 받을 수 있다.
이해를 쉽게 하기 위하여 도서관을 DB 솔루션이라고 가정하고
도서를 대여하기 원하는 우리를 개발자로 가정을 하고 설명을 하겠다.
그리고 이 도서관은 우리가 직접 서고로 찾아가서 책을 찾지 못하고
사서에게 자신이 원하는 책을 말하고 사서가 그 책을 서고에서 찾아서 도서를 대여해 준다.
우리는 도서관에 가서 원하는 책을 찾으려고 한다.
우리가 원하는 책을 가장 빨리 사서를 통하여 찾는 방법은 바로
도서관의 각 책에 부여하는 도서 일련번호를 바로 말하는 것이다..
도서관은 각 도서들만의 유일한 코드를 가지고 있고
도서일련번호순서대로 도서를 관리하고 있으므로
도서일련번호만 말하면 사서는 바로 그 책을 잦아서 우리에게 대여를 해줄 수 있다.
이것이 쉽게 말하면 오라클의 rowid 로 이해할 수 있다.
그 다음으로는 대분류(장르)와 소분류(세부장르)로 구별된 사항과 책의 이름을 말하는 것이다.
물론 출판사나 저자의 이름도 유용하다.
장르, 세부장르, 출판사, 저자 들은 인덱스로 이해할 수 있다.
책의 색깔이나 페이지수 등은 책의 특징이라고 할 수 있다.
그렇다면 PK는 무엇일까?
도서일련번호와는 다르게 도서관에서 분류 및 이해를 쉽게 하기 위하여
역시 각 책마다 유일하게 정의할 수 있도록 도서코드
( 예를 들어 대분류-소분류-출판사-출판사별책순서)를 부여해 놓은 것이라고 할 수 있다.
# 도서코드 |
o 대분류 |
o 소분류 |
o 도서이름 |
o 저자 |
o 출판사 |
o 표지색상 |
o 페이지수 |
o 출판일 |
o 대출횟수 |
그러면 옵티마이저는 무엇일까?
우리가 사서에게 대여를 원하는 책을 말할때
이렇게 말 할 수가 있겠다.
(당연히 책의 일련번호나 도서코드를 모르는 상태에서)
"빨간색 책인데요. 패이지수는 250페이지입니다.
도서이름은 인간관계론 입니다. 자기개발서적이구요.
아참! 저자는 데일 카네기입니다."
SELECT * FROM 도서
WHERE 표지색상='빨간색'
AND 페이지수=250
AND 도서이름='인간관계론'
AND 소분류='자기개발'
AND 저자='데일 카네기'
이 말을 듣고 만일 사서가 무식하게 도서관의 모든 책을 하나씩 보면서
- 표지색상: 빨간색
- 페이지수 : 250 페이지
- 도서이름 : 인간관계론
- 소분류 : 자기개발
- 저자 : 데일 카네기
위와 같은 순서로 책을 찾는다면 우리는 엄청난 시간을 사서가 책을 찾아오기까지 기다려야 될 것이다.
하지만 영리한 사서는 아마도 아래와 같은 순서대로 찾을 찾으려고 할것이다.
- 소분류 : 자기개발
- 저자 : 데일 카네기
- 도서이름 : 인간관계론
- 표지색상 : 빨간색
- 페이지수 : 250 페이지
보다 더 경험이 많은 사서는
- 소분류 : 자기개발
- 표지색상 : 빨간색 (빨간색 책은 몇권 안되므로)
- 도서이름 : 인간관계론 (저자보다 책이름이 더 크게 보임)
- 저자 : 데일 카네기
- 페이지수 :250 페이지
첫번째 사서는 교육시간에 배운 매뉴얼대로 찾은 것이고 (룰기반 옵티마이저)
두번째 사서는 오랜 경험으로 나름의 방법을 사용하는 찾는것 이다.(비용기반 옵티마이저)
그렇지만 결국에는 아무리 도서관 사서가 똑똑해도 우리가 도서를 대여할 때 정확하게 내가 찾고자 하는
책을 설명해줘야 된다는 것이다.
"그 책이 제목이 인간.. 머였는데 좀 두꺼웠어요. 아마 200 페이지는 넘을 거에요.
빨간색이였던건 기억나요. 저자는 외국인 이였어요."
SELECT * FROM BOOK
WHERE 도서이름 LIKE '인간%'
AND 페이지수 > 200
AND 표지색상 = 'red'
이렇게 말하면 사서도 고생 여러분도 고생이다.