数据库设计(Postgres)的新手,寻求建议

时间:2020-02-10 23:17:02

标签: database postgresql

我是设计数据库的新手。我来自前端背景。我正在寻找一个存储风力发电机性能指标的数据库。我得到了一个excel文件。指标列表接近200,您可以在该图中看到前几个指标。 enter image description here

我想不出在数据库中表示此数据的最佳方法。我的第一个想法是将该表原样导入数据库表,并向其中添加一个涡轮ID列。我的第二个步骤是为每个指标创建一个表,并向每个表中添加一个turbo-id列。你们有什么感想。对我而言,存储将建立高性能数据库的数据的最佳方式是什么?谢谢您的帮助和投入

2 个答案:

答案 0 :(得分:1)

一种方法是像这样:

TURBINE
  ID_TURBINE         INTEGER PK
  LATITUDE           DECIMAL
  LONGITUDE          DECIMAL

METRIC
  ID_METRIC          INTEGER PK
  METRIC_NAME        VARCHAR UNIQUE
  VALUE_TYPE         VARCHAR
    Allowed values = ('BOOLEAN', 'PERCENTAGE', 'INTEGER', 'DOUBLE', 'STRING')

TURBINE_METRIC
  ID_TURBINE_METRIC        INTEGER PK
  ID_TURBINE               INTEGER
     FOREIGN KEY TO TURBINE
  METRIC_NAME              VARCHAR
     FOREIGN KEY TO METRIC
  BOOLEAN_VALUE            BOOLEAN
  PERCENTAGE_VALUE         DOUBLE
  INTEGER_VALUE            INTEGER
  DOUBLE_VALUE             DOUBLE
  STRING_VALUE             VARCHAR

将其充实,但是您需要它。我不知道您的VARCHAR字段应保留多长时间,依此类推,但这可以让您灵活地存储每个涡轮的度量标准。我想您也可以制作LATITUDE和LONGITUDE指标-我刚刚将它们添加到了TURBINE表中,以表明可能存在固定信息,最好将其存储为TURBINE表的一部分。

答案 1 :(得分:1)

您想要一个表来表示涡轮机(涡轮机的真实情况,如其位置),以及一个或多个随时间推移到达的涡轮机度量标准。如果不同的度量标准组以不同的间隔到达,则将它们放在不同的表中。

我将要实现的一个目标是最大程度地减少可为空的列的数量。理想情况下,每列均定义为NOT NULL,并且将无效输入留出进行检查。可为空和不可为空的值由提供度量的系统作出的承诺控制。

就是这样:每个表都有一个或多个唯一标识一行的键,所有非键列都是有关该行定义的实体的信息。

使用一个名称/值对表似乎很诱人,并且“更灵活”,因此,如果Feed发生更改,您就不必担心新属性。但是,那将是一个错误(这是一个经典的错误,这就是我提到它的原因)。实际上,它不是更灵活,因为无论如何,上游更改都将需要下游更改。另外,如果上游发生了DBMS未检测到的变化,它们可能会巧妙地破坏您的数据和结果。

通过在SQL中尽可能严格地定义一组有关数据的规则,可以防止输入丢失,格式错误和错误。 DBMS所做的任何验证都是对应用程序可以跳过并且不会捕获任何应用程序的验证。

例如,为您提供风速的最小/最大值等。这些承诺会在数据库中形成约束。如果风速为负,则说明有问题。这可能是传感器问题,或者(更可能是)数据对齐错误,因为引入了新列或输入分析不正确。 DBMS不会错误地将风的方向放置在“风速”列中,而是拒绝输入,然后有人可以调查出了什么问题。

别忘了玩乐。您将有机会在不断发展的行业中创建新数据库,并同时了解数据库技术和理论。并非每天都会发生!

相关问题