为了控制实验设置,用户输入下表,该表定义了唯一的参数配置,即应该运行实验的参数值组合。参数的数量及其含义可以是任意的,例如,我们有Mode
,AmpGain
和InputVoltage
。
| ConfigName|模式|Amp增益|输入电压|
| --|--|--|--|
| MX1_LG_HV| MX1| 1 |3.3|
| MX1_HG_HV| MX1| 10 |3.3|
| MX2_LG_HV| MX2| 1 |3.3|
| MX2_HG_HV| MX2| 10 |3.3|
| MX2_LG_LV| MX2| 1 |一点八|
| MX2_HG_LV| MX2| 10 |一点八|
在我的应用程序中,这些数据需要保存在类似SQL的数据库中(例如SqLite)。从各种关于数据库设计模式的文章中,我发现 * 属性-值模式 * 是表示这种模型的一种可能方法,即:Parameter
表用于描述参数
| 参数ID(PK)|paramName|
| --|--|
| 1 |模式|
| 2 |Amp增益|
| 3 |输入电压|Config
表用于描述配置
| 配置ID(主键)|ConfigName|
| --|--|
| 1 |MX1_LG_HV|
| 2 |MX1_HG_HV|
| 3 |MX2_LG_HV|
| 4 |MX2_HG_HV|
| 5 |MX2_LG_LV|
| 6 |MX2_HG_LV|
最后,组合关系的表,其中ConfigID
和ParamID
形成主键:
| ConfigID| ParamID| ValueInt| ValueFloat| ValueStr|
| --|--|--|--|--|
| 1 | 1 |NULL| NULL| MX1|
| 1 | 2 | 1 |NULL| NULL|
| 1 | 3 |NULL| 3.3| NULL|
| 2 | 1 |NULL| NULL| MX1|
| 2 | 2 | 10 |NULL| NULL|
| 2 | 3 |NULL| 3.3| NULL|
| 3 | 1 |NULL| NULL| MX2|
| 3 | 2 | 1 |NULL| NULL|
| 3 | 3 |NULL| 3.3| NULL|
| 4 | 1 |NULL| NULL| MX2|
| 4 | 2 | 10 |NULL| NULL|
| 4 | 3 |NULL| 3.3| NULL|
| 5 | 1 |NULL| NULL| MX2|
| 5 | 2 | 1 |NULL| NULL|
| 5 | 3 |NULL|一点八|NULL|
| 6 | 1 |NULL| NULL| MX2|
| 6 | 2 | 10 |NULL| NULL|
| 6 | 3 |NULL|一点八|NULL|
这是实现EAV模式的正确方法吗?考虑到不会有超过25-30个参数,并且这些数据每分钟只需要访问/保存一次,是否有更好的方法来建模数据?
1条答案
按热度按时间xuo3flqw1#
我最终决定将这些参数序列化存储到JSON字段中,正如@Panagiotis Kanavos所建议的那样。这比实现EAV模式要麻烦得多,而且许多ORM框架都支持访问JSON字段。