일반적으로 나는 데이터베이스를 가능한 깨끗하고 확장 가능하게 유지하려고합니다.정규화 및 성능 : (이) 스키마에서 연결 테이블을 제거하는 이점/문제점?
그러나 일부 테스트를 수행 한 후 대용량 데이터 세트를 처리 할 때 대개 가장 좋은 방법 인 반면, 문제에 대한 "더티"접근 방식보다 훨씬 느리다는 것을 깨달았습니다.
기본적으로 개체 테이블이 있다고 가정 해 보겠습니다. 이 객체들은 특정 사람들에게 속합니다. 하나의 객체는 한 명을 가질 수 있지만 다른 객체는 한 명 이상있을 수 있습니다. 처음 생각한 것은 항상 내 객체의 객체 테이블, 내 사람들의 객체 테이블, 그리고 object_to_people 링커 테이블을 만드는 것입니다.
사람이 할당 된 모든 개체를 가져 오기 위해 개체와 링커 테이블을 결합하는 경우 약 400k 레코드를 기반으로하지만 개체 당 하나의 링크 만 사용하여 최대 3 초가 소요될 수 있습니다. 네, 또한 인덱스의 e.c.t를 설정합니다. 시도하고 속도를 올릴 수 있습니다.
사람과 링커 테이블을 제거하고 개체 테이블에 열을 넣고 1/0을 사용하여 각 사람이 해당 개체에 할당되었는지 여부를 설정합니다. 두 개의 큰 테이블을 결합하지 않고도 속도가 나타납니다. 약 0.3 -> 0.7 초 (크게 다양 함).
시작하려면 두 명이 필요합니다. 그러나 내가 그것을 도울 수 있다면 나는 너무 제한적이되고 싶지 않다. 나는 캐싱을 사용할 수 있고 최종 사용자 타이밍을 향상시키지 않을 수 있다는 것을 알고 있지만 링크 테이블보다는 열을 사용하는 것이 정말 나쁜 생각으로 여겨 질 수있는 이유가 무엇입니까?
작은 그림은 스키마 관련 질문에 많은 영향을줍니다. –
표준화. 별도의 "카테고리"열을 추가 할 수있는 유일한 시간은 "카테고리"목록이 잘 이해되고 제한되어있는 경우입니다. 귀하의 경우, 사람들의 성장이 기대됩니다 - 당신이 정상화하지 않기로 결정을 지불합니다 - 나는 약속드립니다 :-) – drdwilcox
[정상화] (http://www.codinghorror.com/blog)에서 좋은 읽을 거리가 있습니다./2008/07/maybe-normalizing-isnt-normal.html) – Ibu