【问题标题】:The best way to store rows of the table of a document(SQL)?存储文档表行的最佳方法(SQL)?
【发布时间】:2020-01-31 17:51:48
【问题描述】:

我有一个包含表格的报告。

报告也有字段。

例如(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. 更多从数据库中读取

    Company、period、typeReport 货币存储在 Report 表中,当我想获取行时,我应该找到包含这些字段的所有报告,然后按报告和参数查找所有行。

  2. 更多存储数据

    Company、period、typeReport、currency 存储在 Row 表的每一行中。然后我可以按字段查找每一行,对一张表进行一次查询。

例如数据库中的行:

{company:公司,期间:“3M2019”,typeReport:“type”,多重性:1000,货币:“USD”, 参数:parameter1,值:1000},

{company:公司,期间:“3M2019”,typeReport:“type”,多重性:1000,货币:“USD”,参数:parameter2,值:2000},

{公司:公司,期间:“3M2019”,typeReport:“type”,多重性:1000,货币:“USD”, 参数:parameter3,值:3000},

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

【问题讨论】:

    标签: sql database-design


    【解决方案1】:

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

    表 1:base 带列

    id, company, period, typeReport, multiplicity, currency
    

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

    表 2:params 与列:

    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
    • 只有两个表,见上文,但可以使用INNER JOIN 生成报告,如我的SELECT 语句所示。您当然也可以在报告中列出id(或tid - 它们将是相同的)。
    猜你喜欢
    • 2016-02-26
    • 1970-01-01
    • 2021-11-11
    • 2010-09-13
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多