SQL为其他表的每个元数据创建一个表
嗨,我有各种各样的时间序列,每一个都有一个唯一的timeseries ID。给定一个ID,序列看起来像这样(显然分别有不同的日期和数据) 这些时间序列有不同的“类型”。例如,假设一些时间序列是“WindData”类型,一些是“SolarData”类型,一些是“GasData”类型。给定一个timeseries ID,它将属于某种类型。例如: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
- ID 1、2、3可能属于SolarData
- ID 4,5可能属于风数据
- ID 6可能属于GasData
- WindTurbineNumber、WindFarmName、国家/地区
- 站点名称,SolarPanelType
- 管道编号、原产国、目的国
- 一个给定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
)