2013-08-23 2 views
0

매우 비슷한 속성을 가진 엔티티를 저장하는 가장 좋은 방법을 결정하려고합니다. 주요 차이점은 각 엔티티가 다른 엔티티를 참조한다는 것입니다. 나는로 설정하여 데이터베이스를가는 :데이터베이스 스키마 - 하나의 큰 테이블 또는 여러 테이블을 만드시겠습니까?

entity_a (1-1,000 Records) [Data rarely changes] 
id|created|updated|entity_b_id|category_id|name|entity_b_id|entity_c_id|entity_d_id 

entity_b (10,000-1,000,000 Records) [Data changes constantly] 
id|created|updated|entity_b_id|category_id|name|entity_c_id|entity_e_id|entity_f_id 

entity_c (10,000-10,000,000 Records) [Data changes constantly] 
id|created|updated|entity_b_id|category_id|name|entity_a_id|entity_f_id 

entity_d (0-1,000 Records) [Data rarely changes] 
id|created|updated|entity_b_id|category_id|name 

entity_e (1-100 Records) [Data rarely changes] 
id|created|updated|entity_b_id|category_id|name|entity_a_id|entity_b_id 

entity_f (0-50,000 Records) [Data frequently changes] 
id|created|updated|entity_b_id|category_id|name|entity_c 

entity_g (10-100 Records) [Data rarely changes] 
id|created|updated|entity_b_id|category_id|name 

entity_h (10-1,000 Records) [Data rarely changes] 
id|created|updated|entity_b_id|category_id|name|entity_e_id 

entity_i (1-10 Records) [Data rarely changes] 
id|created|updated|entity_b_id|category_id|name 

하지만 그것을 하나 개의 큰 테이블을 쉽게 관리 할 수있을 것이라고 제안 된 것 :

ent (20,000-11,000,000 Records) 
id|created|updated|ent_id(b)|category_id|name|ent_id(a)|ent_id(b)|ent_id(c)|ent_id(d)|ent_id(e)|ent_id(f) 

이 두 번째 방법 우려가 테이블의 크기는 ID는 int (11)이고이 ID의 여섯 개의 열이 주로 0으로 설정됩니다.

그러나 많은 사용자가 레코드를 매우 자주 액세스하므로 내 관심사는 액세스 속도입니다. 일단. 나는 CodeIgniter를 사용하고 있으며 가능한 한 많은 데이터베이스 부하를 걸 수있는 캐싱 기능을 사용하기를 희망하지만 일부 데이터가 초 단위로 변경됨에 따라 제한 될 것입니다.

모든 도움을 주시면 감사하겠습니다.

+0

는 엔티티 사이의 관계의 본질은 얼마나 많은 열 또는 행 각이 있거나 빈도가 액세스되는 것보다 더 중요하다. 엔티티가 어떻게 관련되어 있는지 보여 줄 수 있습니까? 또한 정규화에 익숙한 지 알려주십시오. –

+0

첫째, 제 데이터베이스 어휘가 기술적이지는 않습니다. 엔터티는 첫 번째 예제에서 왼쪽 조인으로 연결되며 엔터티를 연결하도록 선택됩니다. 그러나 하나의 엔티티에 대한 변경이 링크 되어도 다른 엔티티에는 영향을 미치지 않습니다. – RebDev

답변

1

나는 그것이 너무 많은 것들에 의존 이후 다른 대 하나의 실제 성능을 기대하기 어렵다 생각합니다.

몇 가지 고려 사항 :

얼마나 중요 엔티티 사이의 차이점은? 쿼리 당 하나의 유형의 엔티티 만 선택하는 경우 종종 표준화 된 솔루션이 더 빠를 가능성이 높습니다. 당신이 공유 열 이외의 것들에 선택하는 쿼리가있는 경우

는 같은 : entity_a with entity_c IN(something) 당신은 entity_c 컬럼에 인덱스를 할 것입니다.

entity_c가 매우 큽니다. 업데이트가 많이 발생하고 매우 드물게 쿼리되는 경우 정규화되지 않은 버전을 사용하는 경우 문제의 원인이됩니다. 나는 표준화 형식이 빠른 확신 조인

당신은 많은 일을하는 경우.

내 조언은 다음과 같습니다 표준화 된 양식을 사용합니다. 성능 문제가있는 경우이 솔루션을 살펴볼 수 있습니다.

또한 하이브리드 솔루션을 갈 수있다. b와 c는 자주 바뀌므로 다른 테이블은 그렇지 않습니다. 이렇게 두 테이블을 만듭니다. 또는 b와 c는 자신의 테이블이지만 다른 하나는 유지하십시오. 데이터베이스 설계에서

관련 문제