SQL AntiPatterns

SQL 안티패턴은 경험 없는 사람들이 SQL을 사용하면서 흔하게 저지르는 실수를 설명한다.

1

관계형데이터베이스를 설계를 해야 하는 초보자, 데이터베이스에 관심이 많은 개발자에게 추천한다. 이 책의 경우 쿼리 최적화와 같이 근접 기술보다는 관계형 데이터베이스 설계, 데이터베이스의 원리등에 대해서 집중적으로 설명하고 있기 때문에 쿼리문을 능숙하게 사용하는 초심자에게 권하고 싶다.

2

안티패턴으로 소개되는 항목을 읽다보니 남의 일이 아니라는 느낌이 온다.


“전문가란 아주 좁은 분야에서 할 수 있는 실수를 모두 해본 사람이다 - 닐스 보어”

[…] 이 SQL문 하나를 지원하려면 완전히 제대로 동작하는 관계형 데이터베이스 관리 시스템과 쿼리 엔진을 개발해야 한다는 것을 깨달았다.

어떤 테이블이 FK로 두 테이블을 참조할 때 이를 교차 테이블이라 한다. 교차 테이블은 참조되는 두 테이블 사이의 다대다 관계를 구현한다. 즉 각 제품은 교차 테이블을 통해 여러 개의 계정과 연관되며, 마찬가지로 각 계정은 여러 개의 제품과 연관된다.

칼럼에 FK를 선언하면 많은 데이터베이스가 내부적으로 해당 칼럼에 대한 인덱스를 생성한다.

FK 제약조건이 약간의 오버헤드가 있는 것은 사실이다. 그러나 다른 대안과 비교했을 때, FK가 훨씬 효율적이라고 입증되었다.

[…] 그러나 데이터베이스 설계가 단순하다고 해서 사용하기 어려운 것을 보상해주지는 않는다.

테이블이 매우 커졌을 때, 테이블을 직접 분리하는 것보다 성능을 향상시키는 더 좋은 방법이 있다. 여기에는 수평 분할, 수직 분할, 종속 테이블을 사용하는 방법이 포함된다.

고정 소수점 수에는 FLOAT나 이와 비슷한 타입을 사용하지 말고, NUMERIC 또는 DECIMAL 타입을 사용해야 한다.

인덱스는 표준이 아니다. […] 각 데이터베이스 제품은 인덱스를 다르게 구현한다.

데이터베이스를 분석해 좋은 인덱스를 선정하기 위한 체크리스트를 기억하기 쉽게 나타내기 위해 MENTOR(Measure, Explain, Nominate, Test, Optimize, Rebuild)를 사용할 것이다.

애플리케이션 코드에 의존하기보다는 데이터베이스가 제약조건을 균일하게 강제하도록 하는 것이 더 좋은 방법이다.

패스워드의 소금 친 해시 값을 저장한다.

Written on July 27, 2017