2012년 2월 15일 수요일

20 Database Design Best Practices


100% 공감이 가는 내용이 있어 포스트 합니다.
원문 링크: http://www.javacodegeeks.com/2012/02/20-database-design-best-practices.html

대충 아래와 같은 내용입니다.

  1. 테이블과 컬럼에 잘 정의된 일관된 이름을 사용한다.
  2. 테이블 이름은 단수를 사용
  3. 테이블 이름에 공백을 사용하지 않는다.
  4. 테이블 이름에 불필요한 접미어, 접두어를 사용하지 않는다.
  5. 보안을 위해 비밀번호는 암호화를 유지, 복호화는 어플리케이션안에서 필요할 때 사용 한다.
  6. 모든 테이블에 Integer ID 필드를 사용한다. 당장은 필요 없더라도 앞으로 필요할 때가 반드시 있습니다.
  7. 인덱싱은 Integer 데이터 타입을 사용합니다. varchar 컬럼 인덱싱은 성능에 문제가 있습니다.
  8. Boolean 값은 bit 필드를 사용합니다. Integer또는 varchar을 사용하면 불필요한 공간을 더 사용하게 됩니다. 그리고 반드시 컬럼 이름은 “Is”로 시작합니다.
  9. 데이터베이스 접근을 위한 권한 인증에 신경씁니다. 모든 사용자에게 관리자 권한을 주어서는 절대 안됩니다.
  10. select 문장을 사용할 때 “*” 사용을 피해야 합니다. 반드시 컬럼명을 명시해서 사용해야만 보다 좋은 성능을 보장 받을수 있습니다.
  11. ORM(Object Relational Mapping) Framewokr을 사용하는 경우, 특히 어플리케이션에서 ORM Code 충분히 크다고 생각되는 경우, ORM Framework의 성능 이슈를 잘 파악하고 이에 대해 적절한 세부 설정을 처리해야 한다.
  12. 크고 사용하지 않거나, 좀처럼 사용하지 않는 테이블들은 서로 다른 물리적 스토리지에 나누어 사용하면 쿼리의 성능이 좋아집니다.(물리적 디스크 I/O을 고려해서 잘 사용하는 테이블을 적당히 나눠야 좋다는 이야기)
  13. 크고 민감한 중요한 데이터베이스 시스템은 장애조치 클러스터링, 재해복구 시스템, 자동 백업, 복제 등 같은 보안 서비스를 사용하는게 좋습니다.
  14. 데이터 무결성위한 제약 조건 foreign key, not null 등을 사용합니다. 어플리케이션 코드에서 이것을 무시할 수 있게 하면 안됩니다.
  15. 데이터베이스 문서화 부족은 악마와 같습니다. ER 스키마와 지침을 사용하여 데이터베이스 문서를 작성하고, 또한 주석 라인을 적극적으로 사용합니다.
  16. 큰 테이블에서 자주 사용되는 쿼리에 대해 인텍스를 사용합니다. 분석 도구를 사용하여 인덱스를 정의할 컬럼를 결정하는데 도움을 받습니다. row의 범위를 검색하는 쿼리의 경우 클러스터링 된 인덱스는 일반적으로 성능이 좋습니다. 그리고 point 쿼리의 경우 클러스터링이 안된 인덱스가 성능이 좋습니다.
  17. DB 서버와 Web 서버는 반드시 다른 머신에 설치되어야 합니다. 보안, CPU 성능, 메모리 성능 등 모든 면에서 좋습니다.
  18. 이미지나 BLOB 데이터는 자주 쿼리 되는 테이블에 정의해서는 안됩니다. 성능의 문제가 있을 수 있기 때문입니다. 이런 데이터는 테이블을 분리하고 데이터를 찾을 수 있는 포인터 정보를 자주 쿼리 되는 테이블에서 가지고 있게 해야 합니다. 
  19. 정규화(Normalizatioin)는 성능을 최적화 하기 위해서 필요에 따라 사용해야 합니다. 정규화가 잘 안되어 있으면 데이터의 과도한 중복(반복)을 초래하게 되고, 정규화가 너무 잘 되어 있으면 데이블간의 Join이 과도하게 생기게 됩니다. 이 둘은 모두 성능에 나쁜 영향을 미치게 됩니다.
  20. 데이터베이스의 모델링, 디자인에 충분한 시간을 투자 합니다. 그렇지 않으면 디자인 타임에 해결될 문제가 유지보수 시점까지 간다면 그 시간은 10배, 100배, 1000배 늘어나게 됩니다.

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...