2014-02-18 1 views
1

나는 이것이 다소 철학적 인 질문이라고 생각합니다. 환자 그룹에 대한 병리학 결과를 수집하여 데이터베이스에 저장해야합니다. 과거에 내가 (간체) 아주 간단한 테이블 구조를 사용했다 : 스키마 설계에 더 자주데이터베이스 스키마 : 키/값 테이블 또는 하나의 레코드에있는 모든 키

+-------------------+--------------+------+-----+---------+-------+ 
| Field    | Type   | Null | Key | Default | Extra | 
+-------------------+--------------+------+-----+---------+-------+ 
| ID    | bigint(20) | NO | PRI | NULL |  | 
| Updated   | datetime  | NO | PRI | NULL |  | 
| PatientId   | varchar(255) | NO |  | NULL |  | 
| Name    | varchar(255) | NO |  | NULL |  | 
| Value    | varchar(255) | NO |  | NULL |  | 
+-------------------+--------------+------+-----+---------+-------+ 

나는 참조 :

+-------------------+--------------+------+-----+---------+-------+ 
| Field    | Type   | Null | Key | Default | Extra | 
+-------------------+--------------+------+-----+---------+-------+ 
| ID    | bigint(20) | NO | PRI | NULL |  | 
| PatientId   | varchar(255) | NO |  | NULL |  | 
| Ph_Value   | varchar(255) | NO |  | NULL |  | 
| K_Value   | varchar(255) | NO |  | NULL |  | 
| Ca_Value   | varchar(255) | NO |  | NULL |  | 
| Ph_Value_updated | datetime  | NO |  | NULL |  | 
| K_Value_updated | datetime  | NO |  | NULL |  | 
| Ca_Value_updated | datetime  | NO |  | NULL |  | 
+-------------------+--------------+------+-----+---------+-------+ 

최초의 디자인은 훨씬 더 유연 나에게 보인다, 그러나 레코드가 수백만에 이르면 성능에 대한 의문점이 생깁니다.

두 번째 문제는 경우에 따라 기록해야하는 몇 개의 필드가있을 수 있다는 것입니다.

저는이 문제에 대해 조언/조언을 구하는 데 정말로 관심이 있습니다.

답변

1

당신은 절대적으로 옳다 그 값의 이름입니다, 첫 번째 스키마는 훨씬 더 유연 : 스키마를 변경하지 않고 라이브 데이터베이스에 새 키를 추가 할 수 있습니다. 그러나 융통성은 대개 시간 및/또는 공간과 함께 구입합니다. 이 경우, 둘 다입니다. ID이 복제되고 N 번이므로 동일한 행의 모든 ​​키를 저장하는 데 더 많은 공간이 필요하며 필드를 함께 가져 오는 데 필요한 조인 또는 순서에 시간이 걸립니다.

필요한 경우가 아니면 융통성을 지불 할 이유가 없습니다. 대부분의 쿼리에 대부분의 열이 필요한 경우 두 번째 결과가 가장 경제적입니다. 그러나 대부분의 쿼리가 단일 열을 요구하면 유연성을 확보하는 것이 CPU 시간과 데이터베이스 공간을 소비하는 데 가치가있을 수 있습니다.

1

제 생각에는 이름/값 쌍이 많이 변경되지 않으므로 두 번째 옵션이 공간 및 행 수 측면에서 훨씬 우수합니다.

또 다른 솔루션을 사용하여 첫 번째 스키마를 최적화하고 다른 테이블에 이름을 넣을 수 있으며 같은 이름을 여러 번 반복하는 대신 name_id를 넣을 수 있습니다.

다른 스키마 환자 테이블과 patient_id 및 값과 테이블 이름이 포함 된 각 값에 대한 테이블을 가지고

관련 문제