私はこのデザインを持っています。複数のモデルのデータベース設計ですか?
表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個あり、すべてのモデルに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_ 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で使用されるため、すべてのテーブルをすべての列で事前設定することはできません。