** 반복해서 읽어가며 내용 보충 예정

SQL을 사용하여 의미있는 정보를 빠르게 추출하기 위해서는, 아래와 같은 조건이 충족되어야 한다. 


1. 모든 테이블에 기본키가 있는지 확인하자

모든 테이블에는 컬럼마다 한개 이상으로 구성된 기본키가 있어야 한다. 기본키는 로우마다 유일해야하며 NULL값을 가질 수 없다. 좋은 기본키의 후보자격은 아래와 같다. 

  1. 유일한 값을 가져야 한다. (중복이 우려된다면, Auto_Increment를 이용하자)
  2. 널 값을 가질 수 없다. 
  3. 안정적이 값이어야 한다. (갱신할 필요가 없다.)
  4. 간단한 형태여야 한다. (소수점보다는 정수형)

** 기본키는 가능한 1개인 것이 빠른 SQL문을 위해 좋다. 하지만 매칭테이블과 같이 때에 따라서는 복수형 기본키가 식별하는데 더 도움이 될 때가 있다. 


2. 중복으로 저장된 데이터 항목을 제거하자

데이터를 중복으로 저장하면 일관되지 않은 데이터, 비정상적인 삽입/갱신/삭제 처리, 공간 낭비 등 많은 문제점을 일으킨다. 동일한 테이블이든 다른 테이블이든 반복되는 데이터를 최소화하는 것이 가장 중요하다. 

주제별로 테이블을 분리시커 서로 매핑(조인) 시키는 방식을 사용하면, 중복되는 데이터들을 최소화 시킬 수 있다. 
ex) Customer, Employee, Product, SalesTransactions(mapping table)로 분리

3. 반복 그룹을 제거하자

컬럼은 비싸고, 로우는 싸다! 무의미하게 반복되는 컬럼들을 지양하자. 
Ex) ID, Drawing_Number, Predecessor_1, Predecessor_2, Predecessor_3.....

4. 컬럼당 하나의 특성만 저장하자

주소: 서울특별시 서초구 반포2동 신반포아파트 15-303
주소를 Table에 저장할 때, 전체주소를 한번에 저장하면 나중에 검색할 때 "Like %"를 활용하여 검색을 해야한다. 이는 매우 효율성이 떨어지는 일이다. 

이에, '도/시' '시/군/구' '동' 등을 각각의 컬럼으로 저장한다면, 더 효율적인 쿼리문을 만들 수 있을 것이다. 이렇게 분리되어 저장된 Column들을 하나로 묶어 출력할 때는 Concat문 을 사용하면 편리하다. 

5. 왜 계산데이터를 저장하면 좋지 않은지 이해하자

테이블의 로우가 변경/삽입/삭제 될때마다 값을 재계산해야하므로 무결성을 유지하기 어렵다. 시스템에 부하를 일으키는 것보다 더 큰 혜택이 있을 경우에만 사용한다. 

6. 참조 무결성을 보호하려면 외래키를 정의하자

7. 테이블 간 관계를 명확히 하자

8. 제3정규화로도 부족하다면 더 정규화하자

9. 데이터 웨어하우스에는 역정규화를 사용하자

데이터 웨어하우스 시스템의 주 목적은 정보를 빠르게 찾는 것이다. 이에 정규화를 위반하더라도 자원을 절약할 수 있다면, column을 늘리는 것도 좋다. 
(EX: 고객 이름을 많이 검색하는 Invoice테이블이 있다면, CustomerID(외래키)뿐 아니라 이름도 포함)


Effective SQL SQL 코딩의 기술존 비아시에스,더글러스 스틸,벤 클로디어
상세보기


'RDBMS > SQL 코딩의 기술' 카테고리의 다른 글

[SQL #1] 개요  (0) 2018.07.01


이 책은 '옮긴이의 말'에도 써져있지만 입문자를 위한 책이 아니다. 어느 정도 SQL에 익숙해진 사람, DB에 대한 기본(무결성, 정규화 등)을 알고 있는 사람이 개념을 정리하고 한단계 발전할 수 있도록 쓰여진 책이다.  

Effective SQL SQL 코딩의 기술
국내도서
저자 : 존 비아시에스,더글러스 스틸,벤 클로디어 / 홍형경역
출판 : 길벗 2017.11.30
상세보기


'RDBMS > SQL 코딩의 기술' 카테고리의 다른 글

[SQL #2] 데이터 모델 설계  (0) 2018.07.01

+ Recent posts