SQL一个表来表示其他表的每个元数据

时间:2018-07-02 13:15:49

标签: sql sql-server database nosql relational-database

嗨,我有各种时间序列,每个序列都有唯一的时间序列ID。给定一个ID,该系列看起来像这样(显然重复的日期和数据不同)

datetime    data
1/1/1980    11.6985
1/2/1980    43.6431
1/3/1980    54.9089
1/4/1980    63.1225
1/5/1980    72.4399
1/6/1980    79.1363
1/7/1980    82.2778
1/8/1980    86.0785

这些时间序列具有不同的“类型”。例如,假设一些时间序列是“ WindData”类型,一些时间序列是“ SolarData”类型,而一些时间序列是“ GasData”类型。给定一个时间序列ID,它将属于某种类型。例如:

  • ID 1、2、3可能属于SolarData
  • ID 4,5可能属于Wind Data
  • ID 6可能属于GasData。

相同类型的时间序列(对于instanec 1、2、3)共享元数据的相同字段(但值不相同!),例如WindData可以具有以下字段:

  • WindTurbineNumber,WindFarmName,国家/地区

而SolarData可以具有以下字段:

  • SiteName,SolarPanelType

并且GasData可能具有:

  • 管道编号,CountryOfOrigin,CountryOfDestination

现在,问题是随着时间的推移,我可能会拥有更多类型。因此,我想要一种概括这种数据元数据结构的方法。怎么样?我的想法是:

  • 一个给出了时间序列ID的表可以告诉我该序列的类型(即给定1可以告诉SolarData)
  • 一个给出类型的表,它会给我列名(以及可选的类型)
  • 具有ID的表,它将返回数据。

我需要什么数据库结构?

我无法弄清楚如何创建一个表(或多个表),该表可以在给定序列号的情况下告诉我它需要哪些元数据字段。

2 个答案:

答案 0 :(得分:1)

我相信您不会在这里找到真正适合您需求的关系数据库结构。

关系数据库的设计遵循“写模式”的理念。我们决定将来要获取的数据是什么样的,然后设计具有该数据模式的存储结构,然后将数据插入该模式。在适当的情况下,这可以很好地工作,已有五十多年的Boyce-Codd风格的数据库结构证明了这一点。

听起来,就像想要存储数据一样,无论形状如何,然后应用“读取模式”原理,然后以查询所需的形式提取有用的位。这将需要NoSQL或NewSQL解决方案。从Hadoop及其相关结构(例如HBase(但不是Hive))到CouchDB或Apache Cassandra,您可以考虑使用多种设备来实现这一目标。

答案 1 :(得分:0)

一般理想如下。您必须有一个系列表和一个“父亲”系列表以及一些子系列表。

create table dbo.Seriekind
(
    Id int not null primrary key
   ,Description varchar(50) not null
   ,ListOfColumns varchar(500) not null
)

create table dbo.Series
(
   Id int not null indentity primary key
  ,TimeStamp datetime not null
  ,SerieKindId int not null
)

create table dbo.SolarData
(
     Id int not null primary key identity
    ,SerieId int not null
    ,SiteName
    ,SolarPanelType
)

create table dbo.WindData
(
     Id int not null primary key identity
    ,SerieId int not null
    ,WindTurbineNumber
    ,WindFarmName
    ,Country
)

create table dbo.GasData
(
     Id int not null primary key identity
    ,SerieId int not null
    ,PipelineNumber
    ,CountryOfOrigin
    ,CountryOfDestination
)

您要做的一个“不利条件”对于任何新类型的数据都需要一个新表。 FK是微不足道的。

修改

正如Eric解释的那样,SQL结构并不那么灵活。描述数据关系真是棒极了,并且在存储和获取大数据块方面非常有效,更不用说它在某些处理中的功能了。

一个更好的解决方案可能是一种混合解决方案,可以将数据存储为Series表中的json之类的灵活格式,甚至可以使用NoSql解决方案或SQL x NoSQL的混合解决方案。

这里的主要内容是您需要多少个系列,以及一个新系列的发布频率。一打:SQl,一千个:NoSQL。