【问题标题】:Database design with rectangular data矩形数据的数据库设计
【发布时间】:2016-02-12 19:21:01
【问题描述】:

我正在尝试学习 SQL 和数据库设计,在这种情况下,我需要一些帮助来选择我的数据库的良好设计。我正在使用 C# 和 MySQL。
我在本课中的输入数据包括电表,所有电表都有唯一的标识号,每个电表每小时提供一个值。我有 2013 年及以后的数据,这将在未指定的未来继续。最好的猜测是提前 5 年。大约有 25 000 米,因此每天将有 25e3 * 24 = 600 000 个数据点。我每天通过文件获取一次这些数据。米的数量将缓慢变化,因此每年将有大约 500 次变化,增加和移除米。作为奖励,我想知道何时将值添加到数据库中以计算收集系统的某些性能指标。所以这是每个仪表的输入数据:

  • Valuetime(日期时间)
  • 值(十进制数据)
  • 添加日期(日期时间)

每个仪表都提供一种类型的数据,因此我可以存储具有该数据类型的表格,因此数据本身将包含匿名十进制值。这就是我的问题开始的地方。我尝试了一些不同的设计方法:

  1. 一个大表,每行包含一小时数据,每米一列。由于大量列而失败,我需要一个单独的同样大的表,其中包含“Date_added”。
  2. 每米一个表,列 valuetime、value 和 date_added。由于 C# 程序的性能缓慢而失败。
  3. 分区表(即 table1 = 仪表以 1 开头,依此类推)。这仍然会导致很多列。
  4. 分区表,其中表 10 = 米以 10 开头,依此类推。这仍然导致许多列。

在向数据库添加数据时,上述所有解决方案都会导致性能相当缓慢。

如果我在 Stack Overflow 和其他地方搜索具有大量列的数据库设计,我总是会找到“标准化!”的答案,但由于我的新手经验,我不知道在我的情况下如何。我有一个唯一的值 (valuetime) 并且我有唯一的仪表 ID,这就是我称我的数据为矩形的原因。

有人可以引导我走向正确的道路吗?

【问题讨论】:

  • 删除了c# 标签。试图保持与设计相关而不是离题,并且因为过于宽泛而被关闭

标签: mysql database database-design


【解决方案1】:

对于您输入的数据:

仪表表:

ID int PK IDENTITY(1, 1)
MeterName varchar

读数表:

ID int PK IDENTITY(1, 1)
MeterID int FK
Value decimal
TimeStamp datetime
DateAdded date

您应该使用 ETL 填充它 - 制作 SSIS 包或其他东西。在我看来,绝对比 C# 应用程序更好。

接下来,可以制作汇总表了:

每日汇总表:

ID int PK IDENTITY(1, 1)
MeterID int FK
SumOfValue decimal
Date date

您可以在 ETL 之后填充此内容。您可以制作每周、每月、每季度、每年等汇总表,并相应地安排他们的人口。这将提高报告性能。

【讨论】:

  • 这是 mysql 不是 sql server
  • 感谢您的回答! @Drew 是正确的,我使用的是 MySQL,但无论如何你的回答都会指导我。一个缺点是我无法访问 SSIS,因此我将继续使用 C#。有了这个解决方案,就会有一个包含大量行的读数表,但这可以吗?而对于每个表中的ID-field,使用metername作为主键有什么缺点吗?
  • 如果你们需要我做任何事情,就大声喊叫
  • 数字更适合主键,因为它们的索引速度比字符串快。您可以在名称上创建唯一键约束以确保没有重复项。使用数字主键还有其他好处,但这里不需要介绍它们
【解决方案2】:

以 Stan Shaw 的回答为基础...

如果数据是 CSV 文件,只需每晚使用 LOAD DATA。您可能应该加载到临时表中,处理数据,然后复制到真实表中。可能不需要任何 C# 代码。

DateAdded 似乎有点没用,把桌子弄得乱七八糟。要么完全删除,要么建立另一个表来记录上传。

不要为主表上的 ID 烦恼; (MeterID, Timestamp) 是“自然”PRIMARY KEY。同样,这样可以节省空间。

我只会在一个汇总表中每天构建汇总行。该表可能足够快以处理每周/每月查询。只有在不够快的情况下,才应该考虑对摘要进行总结。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2011-01-12
    相关资源
    最近更新 更多