一种将数组类型数据存储到单个数据库表中的方法吗?

时间:2016-02-01 10:19:01

标签: sql database normalization

我有一个输入JSON,我需要将其输入数据库。我们正在探索是否规范化我们的数据库表。

以下是输入数据(json)的结构:

"attachments": [
        {
            "filename": "abc.pdf",
            "url": "https://www.web.com/abc.pdf",
            "type": "done"
        },
        {
            "filename": "pqr.pdf",
            "url": "https://www.web.com/pqr.pdf",
            "type": "done"
        },
               ],

在上面的示例中,attachments可能有多个值(超过2,最多为8)。

我们正在考虑创建一个名为DB_ATTACHMENT的不同表格,并保留工作人员的所有附件。但问题是我们有30多种不同的附件类型阵列(电话,地址,previous_emp,签证等)

有没有办法将所有内容存储在一个表(员工)中?我能想到的是使用单个列(ATTACHMENT)并以“分隔格式”添加所有数据,并在目标系统中使用逻辑来解析和提取所有内容。 还有其他更好的解决方

谢谢..

3 个答案:

答案 0 :(得分:1)

  

有没有办法将所有内容存储在一个表(员工)中?一个我可以   想到是使用单个列(ATTACHMENT)并添加所有数据   'delimited-format'并且在目标系统上有逻辑来解析和   提取一切..还有其他更好的解决方案吗?

您可以将数据作为JSON存储在单个VARCHAR列中,然后在客户端中恢复解码此JSON数据的信息。

此外,已经有一些SQL实现提供本机JSON数据类型。例如:

mariaDB:https://mariadb.com/kb/en/mariadb/column_json/

mySQL:https://dev.mysql.com/doc/refman/5.7/en/json.html

答案 1 :(得分:0)

数据库系统存储您的数据并为您提供SQL,以便在您的数据结构化时简化搜索请求。

这取决于您决定是否要存储结构化的数据以从SQL中受益,或者让搜索请求者承担解析它的负担。

答案 2 :(得分:0)

这在很大程度上取决于您打算如何使用数据。我不完全确定我理解你的问题,所以我将重新考虑我认为你正在使用的业务领域 - 如果这不正确,请发表评论。

  • 系统管理0..n名员工。
  • 一名员工可能有0..8个附件。
  • 附件恰好属于1名员工。
  • 附件可以是30种不同类型中的一种。
  • 每种附件类型可能都有自己的架构。

如果附件在业务领域中不重要 - 它们基本上是注释,您不需要查询或推理它们 - 您可以将它们存储为“employee”表中的列,并解析它们当你向最终用户展示它们时。

此解决方案可能看起来更简单 - 但不要低估转换逻辑 - 您必须支持每个附件的创建,读取,更新和删除。

如果附件在业务领域中有意义,则会很快崩溃。如果您需要回答诸如“查找所有已附加abc.pdf的员工”,“查找没有phone_number附件的员工”等问题,则解压每个employee_attachment会使您的查询非常困难。

在这种情况下,您几乎肯定需要将附件存储在一个或多个单独的表中。如果每个附件的架构确实不同,那么您需要弄清楚如何处理inheritance in relational database models

最后 - 一些数据库引擎本身支持JSON和XML等格式。您可以将此作为妥协解决方案。