Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL为其他表的每个元数据创建一个表_Sql_Sql Server_Database_Nosql_Relational Database - Fatal编程技术网

SQL为其他表的每个元数据创建一个表

SQL为其他表的每个元数据创建一个表,sql,sql-server,database,nosql,relational-database,Sql,Sql Server,Database,Nosql,Relational Database,嗨,我有各种各样的时间序列,每一个都有一个唯一的timeseries ID。给定一个ID,序列看起来像这样(显然分别有不同的日期和数据) 这些时间序列有不同的“类型”。例如,假设一些时间序列是“WindData”类型,一些是“SolarData”类型,一些是“GasData”类型。给定一个timeseries ID,它将属于某种类型。例如: ID 1、2、3可能属于SolarData ID 4,5可能属于风数据 ID 6可能属于GasData 相同类型的时间序列(对于instanec 1、2

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

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

  • ID 1、2、3可能属于SolarData
  • ID 4,5可能属于风数据
  • ID 6可能属于GasData
相同类型的时间序列(对于instanec 1、2、3)共享相同的元数据字段(但不是相同的值!),例如,instance WindData可以有以下字段:

  • WindTurbineNumber、WindFarmName、国家/地区
虽然SolarData可以包含以下字段:

  • 站点名称,SolarPanelType
而GasData可能有:

  • 管道编号、原产国、目的国
现在的问题是,随着时间的增长,我可以有更多的类型。因此,我想要一种通用化这种数据元数据结构的方法。怎么用?我的想法是:

  • 一个给定timeseries id的表,它告诉我该系列的类型(即给定1,它告诉SolarData)
  • 一个给定类型的表,它将为我提供列名(以及可选的类型)
  • 一个给定id的表,它将返回数据
我需要什么样的数据库结构


我不知道如何创建一个表(或多个表),在给定seriesid的情况下,该表可以告诉我需要哪些元数据字段。

一般的理想情况如下所示。必须有一种系列表和一个“父”系列表以及一些子系列表

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结构并没有那么灵活。描述数据关系非常棒,在存储和获取大块数据方面非常有效,更不用说它在某些处理方面的功能了

更好的解决方案可能是混合解决方案,可能将数据以灵活的格式(如json)存储在一个系列表中,甚至可以使用NoSql解决方案或SQL x NoSql的混合解决方案


这里的主要问题是你需要多少个系列,以及一个新的系列多久才能推出一次。一打:SQl,一千个:NoSQL。

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

关系数据库采用“写模式”的设计理念。我们决定将来将获得的数据是什么样子,然后用该数据模式设计一个存储结构,然后将数据插入该模式。在适当的情况下,这种方法很有效,50年左右的Boyce Codd式数据库结构就证明了这一点


不过,这听起来像是您希望在接收数据时存储数据,不管数据的形状如何,然后应用“读取模式”原理,稍后以查询所需的形式提取有用的位。这将需要一个NoSQL或NewSQL解决方案。您可以考虑任何数量的设备来实现这一点,从Hadoop及其相关结构,如HBase(但不是蜂巢)到CouCHDB或Apache CasdRRA。 为什么不为每种数据建立一个表格呢?我不能理解。到处都是。你能发布一些实际的细节,让我们知道你需要什么吗?这是一个很好的起点。我在问题中添加了一个nosql标记,因为它可能会从搜索主题的人那里得到更有用的答案。使用一个包含JSON数据的nvarchar列怎么样?是的,这可能有效。老实说,我甚至没有想到这一点,因为微软花了很长时间才参加JSON派对,而且我还没有用SS2016+完成任何JSON制作工作。无论如何,值得追求。谢谢你的回答!问题是,在未来,我将拥有大量不同类型的数据,因此我正在寻找一种更通用的方法来实现这一点
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
)