首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表设计问题

表设计问题
EN

Database Administration用户
提问于 2013-09-16 09:43:48
回答 1查看 324关注 0票数 4

我正在为下面的问题寻找一个SQL设计解决方案。我的想法是,我有一个包含客户端数据的验证表单。每个客户都可以登录到他的帐户并编辑他的数据。之后,我必须将它保存到数据库中。在验证了数据的内容之后,我必须更新原始字段。

实际上,每个客户都有一个光伏装置。每个安装包含一个或多个逆变器和在每一个有N个太阳能电池板连接。所有的逆变器都连接在电表上。

我选择只保存数据库中存储的数据与修改后的数据之间的差异。如果客户只改变他的变频器的品牌,我将不会保存所有数据,而只保存修改后的变频器品牌。然后,我必须验证该品牌并在表Inverters中更新它。

我解决这个问题的第一个想法是使用两个表:validation_datavalidation_fields。表validation_fields包含可以更新的所有字段(vaf_field)。表validation_data是一个临时表。它包含要更新的字段的id (vad_vaf_id,也是表validation_fields的外键)和值(vad_value)。vad_met_id是连接到仪表的外键。(没有什么特别的:)一旦验证了数据,vad_is_treated将具有1值。默认情况是0

代码语言:javascript
复制
+-----------------+   +-------------------+
| validation_data |   | validation_fields |
+-----------------+   +-------------------+
| vad_id          |   | vaf_id            |
| vad_met_id      |   | vaf_field         |
| vad_vaf_id      |   +-------------------+
| vad_value       |
| vad_is_treated  |
+-----------------+

所以这种逻辑是好的,或者至少对我来说很好,但前提是客户只有一个逆变器。正如我所说的,我只保存现有数据和修改数据之间的差异。因此,如果客户端更改了他的两个变频器的品牌,在validation_data表中,我将拥有:

代码语言:javascript
复制
+--------+------------+------------+--------------+
| 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_id2,那就是firstname领域,以及变频器的品牌3

好吧,第一行一切都很好,客户改了名字。但是对于第二行和第三行,存在一个问题。客户改变了他的变频器的品牌,但为哪一个?第一和第二逆变器,还是第一和第三,或第二和第三?

你知道我该怎么处理吗?

EN

回答 1

Database Administration用户

发布于 2013-09-20 07:28:07

如果您的vad_vaf_id没有充分指定目标值,那么也许您应该在临时表中添加一个新列来提供该信息?有点像vad_target

代码语言:javascript
复制
+-----------------+   +-------------------+
| 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。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/49944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档