存储文档表行的最佳方式(SQL)?

存储文档表行的最佳方式(SQL)?,sql,database-design,Sql,Database Design,我有一份有表格的报告 该报告也有字段 例如,JSON: { company: Company, period: "3M2019", typeReport: "type", multiplicity: 1000 currency: "USD", rows: [ { parameter: parameter1, value: 1000 }, { parameter: param

我有一份有表格的报告

该报告也有字段

例如,JSON:

{
   company: Company,
   period: "3M2019",
   typeReport: "type",
   multiplicity: 1000
   currency: "USD",
   rows: [
       { parameter: parameter1, value: 1000 },
       { parameter: parameter2, value: 2000 },
       { parameter: parameter3, value: 3000 },
   ]
}
我有两种获取数据的方案:

获取所选报表的所有行; 从期间、类型报告、货币、公司的所有或选定参数的所有报告中获取所有行。 如果理解了第一种情况,则第二种情况有两种存储方式:

从数据库读取更多信息

公司、期间、类型报表货币存储在报表表中,当我想要获取行时,我应该查找具有这些字段的所有报表,然后按报表和参数查找所有行

更多存储数据

公司、期间、类型报告、货币存储在每行的行表中。然后我可以按字段找到每一行,对一个表进行一次查询

例如,数据库中的行:

{公司:公司,期间:3M2019,类型报告:类型,多重性:1000,币种:美元,参数:parameter1,值:1000}

{公司:公司,期间:3M2019,类型报告:类型,多重性:1000,币种:美元,参数:parameter2,值:2000}

{公司:公司,期间:3M2019,类型报告:类型,多重性:1000,币种:美元,参数:parameter3,值:3000}


存储数据的最佳方式是:从数据库中读取更多数据还是读取更多数据?

对于这种具有明显1-n关系的树状数据结构,存储数据的一种简单方式可以是:

表1:带列的基础

id, company, period, typeReport, multiplicity, currency
列id是此表的唯一主键。通常,它将是一个自动递增的列

表2:带列的参数:

tid, parameter, value
然后,您可以使用获取所有数据或搜索任何列值

select company, period, typeReport, 
       multiplicity, currency, 
       parameter, value 
from base
inner join params on tid=id
-- where parameter=...

使用这种类型的数据结构,您可以确保没有冗余,并且不会存储冲突数据

那么我的报告表是基础吗?或者我会有3个表:base、params、reports?其中报告将有下一列:id,tid只有两个表,请参见上文,但报告可以通过使用内部联接生成,如SELECT语句中所示。当然,您也可以列出id或tid-它们在您的报告中是相同的。