나는이 디자인을 가지고있다.여러 모델에 대한 데이터베이스 디자인?
models
표 :
id - primary key
title - varchar(256)
표 model_instances
:
id - primary key
model_id - foreign key to app_models.id
title - varchar(256)
표 model_fields
:
id - pk
model_id - foreign key to models.id
instance_id - foreign key to model_instances.id
title - name of the field
type - enum [text, checkbox, radio, select, 'etc']
표 model_field_values
:
(복수 선택 드롭 다운에 대한 같은)
instance_id - forein key model_instance.id
field_id - foreign key to model_fields.id
value - text
또한있을 수있는 많은 values
문제는 : 나는 다른 유형의 데이터 (텍스트, 날짜, 정수를 저장할 때문에 value
은 text
필드 항상)이 표에는 모든 모델의 모든 인스턴스에 대한 모든 값이 들어 있습니다.
예를 들어, 모든 모델에 10 개의 필드가있는 1000 개의 인스턴스가 있고 model_field_values (최소)에 100000 개의 행이 있고 일부 필드가 여러 개이면 120000-150000 행을 포함합니다.
value
을 사용하여 SQL을 선택하면 필드가 느려집니다.
해결 방법 1 :
For every model create new model_field_values like:
model.id = 1, model_field_values_1
...
model.id = 10, model_field_values_10
해결 방법 2 : model_fields 모델에 대한 모든 필드가 포함되어 있기 때문에
이, 우리는 기본 키에 의해 model.id = 1이
model_fields 같은 model_field_values를 (만들 수 있습니다) : 1 - 텍스트, 2 - 정수, 3 - datetime, 4 - smalltext
field for text_field_values_1 : field_1 텍스트, field_2 정수, field_3 datetime, fie ld_4 varchar (256)
multiple
값은 모두 model_field_values_1의 행에 대한 링크가있는 다른 테이블을 가지고 있어야하기 때문에이 솔루션은 값이 여러 개인 필드에는 적합하지 않지만 mysql이 원시 데이터 유형을 사용하기 때문에 데이터베이스를 검색하는 것이 좋습니다 in where 절 (텍스트 필드가 아님).
내가 뭔가를 놓칠 수 있습니까? 더 나은 디자인이있을 수 있습니까?
이 데이터베이스는 crm-system에서 사용되며 사용자는이 모델에서 많은 인스턴스가있는 다른 모델을 만들 수 있으므로 모든 열이있는 모든 테이블을 사전 구성 할 수 없습니다.