我正在为下面的问题寻找一个SQL设计解决方案。我的想法是,我有一个包含客户端数据的验证表单。每个客户都可以登录到他的帐户并编辑他的数据。之后,我必须将它保存到数据库中。在验证了数据的内容之后,我必须更新原始字段。
实际上,每个客户都有一个光伏装置。每个安装包含一个或多个逆变器和在每一个有N个太阳能电池板连接。所有的逆变器都连接在电表上。
我选择只保存数据库中存储的数据与修改后的数据之间的差异。如果客户只改变他的变频器的品牌,我将不会保存所有数据,而只保存修改后的变频器品牌。然后,我必须验证该品牌并在表Inverters中更新它。
我解决这个问题的第一个想法是使用两个表:validation_data和validation_fields。表validation_fields包含可以更新的所有字段(vaf_field)。表validation_data是一个临时表。它包含要更新的字段的id (vad_vaf_id,也是表validation_fields的外键)和值(vad_value)。vad_met_id是连接到仪表的外键。(没有什么特别的:)一旦验证了数据,vad_is_treated将具有1值。默认情况是0。
+-----------------+ +-------------------+
| validation_data | | validation_fields |
+-----------------+ +-------------------+
| vad_id | | vaf_id |
| vad_met_id | | vaf_field |
| vad_vaf_id | +-------------------+
| vad_value |
| vad_is_treated |
+-----------------+所以这种逻辑是好的,或者至少对我来说很好,但前提是客户只有一个逆变器。正如我所说的,我只保存现有数据和修改数据之间的差异。因此,如果客户端更改了他的两个变频器的品牌,在validation_data表中,我将拥有:
+--------+------------+------------+--------------+
| vad_id | vad_met_id | vad_vaf_id | vad_value |
+--------+------------+----------- +--------------+
| 1 | 1234 | 2 | Peter |
| 2 | 1234 | 3 | SMA 1400S |
| 3 | 1234 | 3 | SMA 1400S |
+--------+------------+------------+--------------+考虑一下,如果vad_vaf_id是2,那就是firstname领域,以及变频器的品牌3。
好吧,第一行一切都很好,客户改了名字。但是对于第二行和第三行,存在一个问题。客户改变了他的变频器的品牌,但为哪一个?第一和第二逆变器,还是第一和第三,或第二和第三?
你知道我该怎么处理吗?
发布于 2013-09-20 07:28:07
如果您的vad_vaf_id没有充分指定目标值,那么也许您应该在临时表中添加一个新列来提供该信息?有点像vad_target?
+-----------------+ +-------------------+
| validation_data | | validation_fields |
+-----------------+ +-------------------+
| vad_id | | vaf_id |
| vad_met_id | | vaf_field |
| vad_vaf_id | +-------------------+
| vad_target |
| vad_value |
| vad_is_treated |
+-----------------+当用户更改他的名字时,请离开字段NULL。当存在多个可能的目标时(即逆变器),使用逆变器的id。
https://dba.stackexchange.com/questions/49944
复制相似问题