품목정보
출간일 | 2016년 07월 22일 |
---|---|
쪽수, 무게, 크기 | 336쪽 | 638g | 172*235*19mm |
ISBN13 | 9791158390372 |
ISBN10 | 1158390378 |
출간일 | 2016년 07월 22일 |
---|---|
쪽수, 무게, 크기 | 336쪽 | 638g | 172*235*19mm |
ISBN13 | 9791158390372 |
ISBN10 | 1158390378 |
DB를 사용하여 애플리케이션 개발을 해 본 경험이 있는 개발자를 대상으로, 관계형 모델을 이해할 수 있게 안내함으로써 좀 더 효율적으로 DB를 설계하고, 적절하게 SQL을 구사할 수 있도록 필요한 지식을 모아 둔 책이다. 이 책에서는 SQL과 관계형 모델 간의 관계부터, 술어 논리, 정규화 이론, SELECT에 대한 상세한 해설, 애플리케이션 개발에서의 데이터 구조, 리팩터링, 트랜잭션 등 다양한 주제의 이론과 실전을 병행하여 상세하게 설명한다. SQL을 다시 한 번 제대로 공부하고 싶은 사람, 관계형 모델에 대해 좀 더 깊이 있게 이해하고 싶은 사람이라면 많은 도움이 될 것이다. |
▣ 01장: SQL과 관계형 모델 1.1 SQL이란 ___관계형 모델을 모르더라도 SQL을 쓸 수 있다? ___RDB는 관계형 모델을 바르게 구현할 ___더욱 진가를 발휘한다! 1.2 관계형 모델 ___릴레이션(관계)의 정의 ___집합과 관계형 모델 ___집합이란 ___관계형 모델과 NULL ___유한집합과 무한집합 ___릴레이션의 연산 ___제한(Restrict) ___프로젝션(Projection) ___확장(Extend) ___속성명 변경(Rename) ___합집합(Union) ___교집합(Intersect) ___차집합(Difference) ___곱집합(Product) ___결합(Join) ___클로저(closure) 성질 ___관계형 모델의 데이터 형식 1.3 SQL에서 릴레이션 조작 ___SELECT의 기본형 ___INSERT(삽입) ___DELETE(삭제) ___UPDATE(갱신) 1.4 SQL에는 있고 관계형 모델에는 없는 것 ___요소의 중복 ___요소 사이의 순서 ___릴레이션의 갱신 ___트랜잭션 ___스토어드 프로시저 ___NULL 1.5 요약 ▣ 02장: 술어논리와 관계형 모델 2.1 술어논리와 관계형 모델 ___명제 ___명제논리 ___동어반복과 정리 ___명제논리와 공리계 ___명제논리의 한계와 양화논리(양한정) ___정량자와 술어논리 ___정량자와 함께 사용하는 속박변수 ___술어논리와 집합론 ___도메인 ___1차 술어논리 ___2차 술어논리 ___릴레이션의 참의 형태 ___폐쇄 세계 가정 ___모순된 DB는 쓸모없다 2.2 릴레이션의 연산과 술어논리 ___제한(Restrict) ___곱집합(Product) ___결합(Join) ___교집합(Intersect) ___합집합(Union) ___차집합(Difference) ___프로젝션(Projection) ___속성명 변경(Rename) ___확장(Extend) 2.3 요약 ▣ 03장: SQL과 관계형 모델 3.1 왜 DB 설계가 중요한가? 3.2 정규화 ___관계형 모델을 보완하는 이론 ___변칙을 방지할 수 있다 3.3 정규형 ___정규형의 종류 ___제1 정규형(1NF) ___후보키와 슈퍼키 ___함수 종속성(FD) ___제2 정규형(2NF) ___제3 정규형(3NF) ___보이스코드 정규형(BCNF) 3.4 요약 ▣ 04장: 정규화 이론(두 번째) - 결합 종속성 4.1 결합 종속성(JD) ___결합 종속성은 무손실 분해가 가능 ___함수 종속성은 결합 종속성의 일종이다 ___암시적 결합 종속성 ___키가 아닌 속성과 결합 종속성 4.2 결합 종속성에 의한 정규화(4NF~6NF) ___제4 정규형(4NF) ___제5 정규형 ___제6 정규형(6NF) 4.3 요약 ▣ 05장: 릴레이션의 직교성 5.1 릴레이션의 직교성과 중복 ___레플리카 ___같은 형태의 릴레이션 ___제목 일부만 같은 릴레이션 5.2 릴레이션 직교화를 위한 전략 ___정규화 ___속성(칼럼)의 이름 통일하기 ___응용프로그램의 정합성 5.3 중복을 해결해 얻는 이점 ___변칙을 막을 수 있다 ___필요한 데이터가 어디에 있는지 명확해진다 ___쿼리의 작성이 선언적이 된다 ___불필요한 무손실 분해는 필요 없다 ___복잡한 제약은 필요 없다 ___응용프로그램의 코드에 낭비가 없어진다 ___성능이 향상된다 5.4 요약 ▣ 06장 도메인 설계 전략 6.1 도메인 ___도메인이란 ___집합의 요소 6.2 도메인 설계 전략의 개요 ___모든 것은 자의적인 선택 ___응용프로그램의 필요성으로 생겨난다 ___데이터의 본질을 파악한다 ___속성(칼럼)의 이름 6.3 ID를 설계한다는 개념 ___현실 세계의 물체나 개념을 나타내는 수단 ___관계형 모델의 키 ___의미가 있는 ID ___ID의 결함이 미치는 영향 ___색, 길이, 무게 등의 성질을 나타내는 속성 6.4 SQL로 도메인 표현 ___적절한 데이터형 선택 ___술어를 제약으로 표현 ___도메인을 테이블로 표현 6.5 요약 ▣ 07장: NULL과의 싸움 7.1 NULL ___NULL이란 ___3치논리(3VL) ___3치 논리의 한계 ___NULL은 폐쇄 세계 가정에 반한다 ___옵티마이저에 대한 폐해 7.2 NULL의 대책 ___테이블을 정규화한다 ___잘못된 NULL 대책 ___COALESCE 함수 ___빈 문자열의 처리 ___NULL을 사용해도 좋을 때 7.3 요약 ▣ 08장: SELECT를 공략하자 8.1 SELECT는 SQL의 심장부 ___SELECT의 본질 ___SELECT의 기본 구조 8.2 SELECT의 다양한 모습 ___집계함수 ___서브쿼리 ___뷰 ___UNION ___조합은 자유 8.3 관계형이 아닌 조작 ___관계형 조작의 복습 ___정렬(sort) ___명시적으로 정의되지 않은 칼럼 ___스토어드 함수(사용자 정의 함수) ___관계형이 아닌 조작의 취급법 8.4 들여쓰기로 SELECT 문장을 읽기 쉽게 ___들여쓰기 규칙 8.5 요약 ▣ 09장: 이력 데이터와 친해지기 9.1 이력 데이터의 문제점 ___세상은 이력 데이터가 넘쳐난다 ___이력과 관계형 모델의 상성 문제 ___이력 데이터의 구체적인 예 ___이력 데이터의 어떤 것이 문제가 되는가? 9.2 이력 데이터에 대한 해결책 ___릴레이션을 나눈다 ___가장 간단한 분할 방법 ___중복행을 허용 ___대리키 ___미래의 가격을 어떻게 해야 할까? 9.3 이력데이터의 안티 패턴 ___플래그 사용 ___절차형으로 구현하자 9.4 요약 ▣ 10장: 그래프에 맞서다 10.1 그래프의 구조 ___노드, 에지 ___인접 ___차수 ___보행, 트레일, 길 ___다중 에지 ___루프 ___닫힌 보행 ___연결 ___부분 그래프 ___컷세트, 브리지 ___에지의 방향과 가중치 ___그래프를 응용한 예 10.2 그래프의 종류 ___일반 그래프 ___단순 그래프 ___연결 그래프/비 연결 그래프 ___완전 그래프 ___정규 그래프 ___평면 그래프 ___유향 그래프/무향 그래프 ___가중 그래프 ___트리(나무) 10.3 SQL과 그래프의 상성 문제 ___그래프에 대한 쿼리 ___무향 그래프를 표현할 수 있는가? ___유향 그래프를 이용한 표현 ___릴레이션 관점에서 모델을 이해하자 ___그래프에 대한 쿼리 ___절차형에 의한 해법 ___그래프 DB ___그 외의 문제 10.4 트리 ___트리는 그래프의 일종 ___인접 리스트 모델 ___경로 열거 모델 ___중첩 집합 모델 ___클로저 테이블 ___트리와 SQL에 관한 고찰 10.5 요약 ▣ 11장: 인덱스 설계 전략 11.1 인덱스의 동작 ___RDB의 인덱스 ___인덱스의 왼쪽과 검색 범위 ___보조 인덱스의 갱신 11.2 인덱스의 종류 ___해시 인덱스 ___전문 검색 인덱스 ___R트리 인덱스 ___함수 인덱스 ___비트맵 인덱스 11.3 파티셔닝 ___파티셔닝이란 ___파티셔닝이 적합한 경우 ___파티셔닝과 고유성 제약 ___파티셔닝에 관한 일반적인 오해 11.4 관계형 모델과 인덱스 ___인덱스는 관계형 모델의 일부가 아니다 ___정규화와 인덱스 11.5 지령 : 최적의 인덱스를 찾아라! ___필요한 인덱스 ___인덱스의 엑세스 특성 ___인덱스가 사용되는 구문 ___최적의 인덱스를 찾기 위한 전략 11.6 요약 ▣ 12장: 웹 응용 프로그램을 위한 데이터 구조 12.1 캐시라는 개념 ___장점/단점 ___DB 응용 프로그램에서의 캐시 ___캐시는 어디까지나 캐시 ___캐시로 사용하기 위한 요건 ___캐시 해야 할 데이터의 종류 12.2 캐시의 구축 방법 ___NoSQL을 캐시로 사용 ___테이블을 캐시로 사용 ___집계 테이블 ___조인(JOIN)된 데이터 ___태그 12.3 스케일 아웃 ___리플리케이션(복제) ___샤딩 12.4 요약 ▣ 13장: 리팩터링 최적의 해결책 13.1 리팩터링 ___DB 리팩터링은 어려운 작업 ___다양한 응용 프로그램에 대한 DB 환경 ___왜 리팩터링이 필요한가? ___리팩터링의 절차 ___스키마의 이행 기간 ___반복적인 리팩터링 13.2 리팩터링의 종류 ___인덱스의 추가, 삭제 ___칼럼 이름 변경 ___NOT NULL 제약의 도입 ___기본키의 정의 변경 ___무손실 분해 ___테이블의 수직 분할과 통합 13.3 리팩터링을 위한 모범 사례 ___정규화와 직교성 ___칼럼이 아닌 테이블을 추가 ___SELECT *을 사용하지 않는다 ___응용 프로그램을 소결합으로 13.4 요약 ▣ 14장: 트랜잭션의 본질 14.1 트랜잭션 ___트랜잭션의 기능 ___트랜잭션의 키, 스케줄 ___「데이터의 정확성」의 정의 ___스케줄러의 성능 14.2 트랜잭션의 특징 ___ACID란? ___다양한 비정상 상태 ___갱신 분실 ___스케줄과 잠금 ___교착 상태(Dead Lock) ___트랜잭션 격리 수준 ___MVCC ___크래시 복구 14.3 트랜잭션과 데이터 모델의 융합 ___관계형 모델과 ACID의 「C」 ___관계형 모델과 이상 현상 ___정규화와 직교성 ___제약 14.4 요약 |
간단히 CRUD를 할 줄 아는 사람들은 많을 것이다. 하지만 좀 더 근본적으로 그 속내와 철학을 알고 바르게 사용 하는 사람들은 얼마 없을 것 같다. RDB를 조금 더 RDB 답게 사용하고자 하는 사람들에게 추천할 만한 책이다.
목차
기존의 SQL 설명서 같은 책들과 확연하게 구분되는 점이 있다. 바로 SQL과 관계형 모델을 철저하게 분리하여 설명하는 것이다. 제목이 제목이니만큼 관계형 모델에 초점을 맞추어 설명을 한다. 1,2장을 읽는 동안 이렇게까지 해야하나 싶을 정도로 집합론과 논리학에 대한 부분을 많이 설명하고 있다. 하지만 1,2장의 설명이 3장 이후의 내용들을 이해하는데 매우 중요한 역할을 한다는 것을 느끼게 되었다. 그만큼 관계형 데이터베이스는 집합론과 논리학에 기반하여 만들어진 데이터베이스이다. "SQL 작성해봐서 아는데 그다지 상관 없어 보이는데?"라고 하는 사람들도 있을 수 있다. 당연하다. 왜냐하면 관계형 데이터베이스 != SQL이기 때문이다. 아래와 같은 점들은 대응이 된다.
관계형 모델 | SQL |
릴레이션 | 테이블 |
튜플 | 행 |
속성 | 칼럼 |
하지만 관계형 모델에는 NULL이라는 것이 없다는 것과 중복이 발생할 수 없다. 왜냐하면 릴레이션을 튜플의 집합으로 보기 때문이다. 자세한 건 책을 참고하자.
릴레이션의 직교성(릴레이션들 간에 중복이 없음) 부분도 인상 깊었다. 정규화에 대한 내용이나 인덱스, 트랜잭션에 관한 부분들을 읽을 때는 학부 3학년 Database 수업이 새록새록 떠올랐다. 그 때 수업을 영어로 안듣고 한글수업으로 들었다면 지금 잘 기억하고 있었을까? 트랜잭션 부분은 구글링해봐도 속시원히 설명이 된 것을 못봤는데 잘 정리되어 있어서 정말 좋았다. 저자에게 물어보고 트랜잭션 부분을 블로그에 정리할 수 있으면 해봐야겠다.