oracle - Oracle中可变长度时空数据的动态数据库设计(需要架构设计)

标签 oracle database-design data-modeling spatial

目前我正在做一个研究项目,我需要存储时空数据并有效地分析它们。我在下面给出了确切的要求。
研究是气象数据,所以数据属性有温度、湿度、气压、风速、风向等。属性的数量我们以前不知道,根据需要我们可能需要添加更多的属性(表具有动态属性和不同的数据类型性质)。同样,数据是从不同的位置、不同的高度以及在特定的持续时间和时间间隔内捕获的。
那么,为需求设计架构的最佳方式应该是什么?我们必须有效地找出关系。
该项目的目的不仅是存储数据库,还需要对数据进行操作。
表格格式的样本数据 -
位置 |时间 |高度 |压力 |温度 |风向| ...
L1 | 2011-12-18 08:04:02 | 7 | 1009.6 | 28.3 |东| ...
L1 | 2011-12-18 08:04:02 | 15 | 1008.6 | 27.9 |东| ...
L1 | 2011-12-18 08:04:02 | 27 | 1007.4 | 27.4 |东| ...
L1 | 2011-12-18 08:04:04 | 7 | 1010.2 | 28.4 |东北| ...
L1 | 2011-12-18 08:04:04 | 15 | 1009.4 | 28.2 |东北| ...
L1 | 2011-12-18 08:04:04 | 27 | 1008.9 | 27.6 |东北| ...
L2 | 2011-12-18 08:04:02 | ..... 很快
这里我需要为上面的示例数据设计一个模式,其中 Location 是可以使用 oracle MDSYS.SDO_GEOMETRY 类型实现的空间位置。
约束是:

  • 在开发过程中,属性(表格列)的数量是未知的。在运行时可以添加任何新属性(比如说 - 湿度、折射率等)。所以我们不能设计属性特定的表模式。
    1.1)对于这个约束,我想使用这样的模式 -
    tbl_attributes(attr_id_pk,attr_name,attr_type);
    tbl_data(位置,时间,attr_id_fk,值);
    我的设计属性值必须是 varchar 类型,并且根据需要我想强制转换(根本不是一个好主意)。
    但是仅使用 SQL 查询来查找具有此模式的关系数据非常困难。例如我想找到 -
    1.1.1) 当风向为东且温度在 27-28 之间时位置 L1 的平均压力
    1.1.2) 位置,在 15 高度处压力最大。
    1.2)我也在考虑在运行时编辑表模式,我认为这又不是一个好主意。
  • 我们将使用一个加载器应用程序,它将根据模式(无论它可能是什么)来处理这种动态插入。
  • 需要有效地检索统计数据,如上面给出的一些示例 [1.1.*]。
  • 最佳答案

    我不完全确定我理解你所说的意思

    The no of attributes (table column) is unknown during development. In runtime any new attribute(let say - humidity, refractive index etc) can be added.



    首先,我认为这并不是随机发生的:即,当您从您知道(在导入之前)知道这些具有一两个额外维度的字段中获得一堆新数据时。正确的?

    此外,在这个新数据批处理中获得“折射率”这一事实不会使旧数据神奇地获得该维度的适当值。

    因此,我会选择一个经典的 Object-to-RDBMS 映射,你有:

    一个标题表,其中包含每次测量都存在的内容:即时间和空间,可能是源(即实验室、传感器、提供数据的团队)和自动生成的 key 。

    一个或多个详细表,其中值被定义为适当的字段。

    例子:

    标题
    location | time                | height | source  |Key          | 
    L1       | 2011-12-18 08:04:02 | 7      | team-1  | 002020013   | 
    L1       | 2011-12-18 08:04:02 | 15     | team-1  | 002020017   | 
    L1       | 2011-12-18 08:04:02 | 27     | Lab-X   | 002020018   | 
    L1       | 2011-12-18 08:04:04 | 7      | Lab-Y   | 002020021   | 
    L1       | 2011-12-18 08:04:04 | 15     | Lab-X   | 002020112   | 
    

    大气数据(基本)
    Key       | pressure  | temp | wind-dir  | 
    002020013 | 1009.6    | 28.3 | east      |
    002020017 | 1019.3    | 29.2 | east      |
    002020018 | 1011.6    | 26.9 | east      |
    

    光传感器数据
    Key       | refractive-ind  | albedo  | Ultraviolet  |
    002020017 |         79.6    | .37865  | 7.0E-34      |
    002020018 |         67.4    | .85955  | 6.5E-34      |
    002020021 |         91.6    | .98494  | 8.1E-34      |
    

    换句话说:每组不同的数据都将使用一个或多个子表(如果需要,您可以“动态”添加这些子表)并且您仍然可以通过标准方式创建查询,您只需要连接子表(在可能的情况下:即如果您想通过风向和折射率进行分析,您可以 - 但仅当您拥有一组具有这两个值的数据时)通过使用引用键保持这些一致)。

    我相信这比使用内部带有 CSV 的文本字段、数据 blob 或使用键值关联更有效。

    关于oracle - Oracle中可变长度时空数据的动态数据库设计(需要架构设计),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8543844/

    相关文章:

    java - Oracle SQL 中的 SELECT STAR VS SELECT 1 检查是否存在

    sql - 在 Oracle 中使用 sql 获取过去 7 天的数据行

    具有两个不同 key 的实体的 REST API URI

    oop - 理论上可以不一致的多个聚合是否可以接受?

    database - 什么词描述了所有其他人加入的表格?

    oracle - Jetbrains Datagrip/PHPStorm 如何执行 oracle 程序?

    c++ - 与 CLOB 兼容的 Pro-C 缓冲区类型

    SQL 表设计 : Should I store addresses with orders or in separate table?

    algorithm - Facebook 是怎么做到的?

    mysql - 使用图像表模式进行民意调查?