[책 공부] SQL 첫걸음
책 소개

처음에 데이터베이스를 공부하고 싶다면 이 책을 추천합니다. 단순한 개념만 나열해 놓은 것이 아닌 실제 실무에서의 활용도 같이 설명하고 중요한 개념도 있기 때문에 좋았습니다.
SQL명령의 종류
- DML(Data Manipulation Language): 데이터를 추가하거나 삭제, 갱신 등 데이터를 조작할 때 사용
- DDL(Data Definition Language): 데이터베이스의 스키마를 조작할 때 사용
- DCL(Data Control Language): 트랜잭션을 제어하는 명령과 접근권한을 제어하는 명령을 사용
데이터베이스 종류
- 계층형 데이터베이스: 폴더와 파일 등의 계층 구조로 데이터를 저장하는 방식의 데이터베이스로 역사가 오래된 DBMS다. (ex. 하드디스크, DVD 파일시스템)
- 관계형 데이터베이스: ‘관계 대수(relational algebra)’라는 것에 착안하여 고안한 데이터베이스로, 행과 열을 가지는 표 형식 데이터를 저장하는 형태의 데이터베이스다.
- 객체지향 데이터베이스: 객체 그대로를 데이터베이스의 데이터로 저장하는 것
- XML 데이터베이스: XML 형식으로 기록된 데이터를 저장하는 데이터베이스.
- Key-Value Store(KVS): 키와 그에 대응하는 값을 저장하는 데이터베이스 (ex. Redis)
LIMIT과 OFFSET
- LIMIT: 결과 개수 제한
- OFFSET: 건너뛰기
- LIMIT 3, OFFSET 0 -> 1페이지
- LIMIT 3, OFFSET 3 -> 2페이지
- LIMIT 3, OFFSET 6 -> 3페이지
페이징을 구현할 때 필요한 것이 LIMIT과 OFFSET이다.
Default
- Default는 명시적으로 값을 지정하지 않았을 경우 사용하는 초기값. 즉, 암묵적으로 데이터가 저장된다.
물리삭제와 논리삭제
- 물리삭제: SQL의 DELETE 명령을 사용해 직접 데이터를 삭제하는 방식
- 논리삭제: 테이블에 ‘삭제플래그’를 두어 실제 행을 삭제하는 대신 ‘삭제플래그’의 값을 유효하게 갱신하는 방식
SNS와 같은 개인정보를 다루는 시스템에서는 사용자가 탈퇴한 경우, 개인정보 유출을 미연에 방지하기 위해 물리삭제가 안전할 것이다.
하지만 쇼핑 사이트의 경우 사용자가 주문을 취소할 경우에도 데이터를 삭제하게 되는데, 이 때는 논리삭제 방법이 안전하다. 그래야 취소한 주문이 무엇인지 확인할 수 있다.
즉, 물리삭제와 논리삭제는 용도에 맞게 선택해야 한다.
인덱스
인덱스는 테이블에 붙여진 색인이라 할 수 있다.
- 인덱스 역할: 검색속도 향상
검색에 사용하는 알고리즘
- 풀 테이블 스캔(Full Table Scan): 인덱스가 지정되지 않은 테이블을 검색할 때, 풀 테이블 스캔을 하는데 모든 값을 처음부터 차례대로 찾아가는 방식
- 이진 탐색(Binary Search): 정렬이 된 상태에서 가운데 값을 지정한 후 그 지정한 값 기준으로 원하는 데이터를 찾아나간다. 가운데 값은 1/2씩 좁혀가므로, 검색속도가 빠르다고 할 수 있다. 그리고 이 방식의 구조를 보면 트리처럼 생겨서 이진 트리이다.
인덱스의 트레이드 오프
- 검색시 Where절에 인덱스를 적절히 사용하면 성능 향상
- 하지만 모든 컬럼에 인덱스를 추가하게 되면 용량이 부족해질 뿐만 아니라 데이터의 추가, 삭제, 수정시 성능이 급격히 떨어짐
- 실행계획(EXPLAIN)을 통한 최적화 필요.
정규화의 목적
정규화에서는 중복하거나 반복되는 부분을 찾아내서 테이블을 분할하고 기본킬를 사용하는 것을 기본 개념을 삼는다. 우리는 테이블을 설계할 때 이미 정규화를 지키고 있다. 모든 데이터를 한 테이블에 저장하지 않고, 중복되는 부분들은 모두 분리해서 관리한다.
트랜잭션
트랜잭션은 하나의 작업 단위로써, 자동커밋을 꺼야하고 트랜잭션이 종료되면 커밋을 사용한다. 롤백하게 되면 변경한 내용이 적용되지 않는다.
Comments