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

The best way to store rows of the table of a document(SQL)?

我有一份报告 table。

报表也有字段。

例如(JSON):

{
   company: Company,
   period: "3M2019",
   typeReport: "type",
   multiplicity: 1000
   currency: "USD",
   rows: [
       { parameter: parameter1, value: 1000 },
       { parameter: parameter2, value: 2000 },
       { parameter: parameter3, value: 3000 },
   ]
}

我有两种获取数据的场景:

  1. 正在获取所选报告的所有行;
  2. 获取期间、类型报表、货币、公司的所有或选定参数的所有行(来自所有报表)。

第一种场景理解的话,第二种场景有两种存储方式:

  1. 从数据库中读取更多内容

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

  2. 更多存储数据

    Company、period、typeReport、currency 存储在每一行的 table 行中。然后我可以按字段找到每一行,对一个 table.

    进行一个查询

例如数据库中的行:

{company: Company, period: "3M2019", typeReport: "type", multiplicity: 1000, currency: "USD", parameter: parameter1, value: 1000},

{company: Company, period: "3M2019", typeReport: "type", multiplicity: 1000, currency: "USD", parameter: parameter2, value: 2000},

{company: Company, period: "3M2019", typeReport: "type", multiplicity: 1000, currency: "USD", parameter: parameter3, value: 3000},

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

为这种树状数据结构(具有明显的 1-n 关系)存储数据的一种简单方法可能是:

table 1:base

id, company, period, typeReport, multiplicity, currency

id 是此 table 的唯一(主)键。通常它将是一个自动递增的列。

table 2:params 列:

tid, parameter, value

然后您可以使用

获取所有数据(或搜索任何列值)
select company, period, typeReport, 
       multiplicity, currency, 
       parameter, value 
from base
inner join params on tid=id
-- where parameter=...

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