【问题标题】:Can we store List type of data to MYSQL database table?我们可以将List类型的数据存储到MYSQL数据库表中吗?
【发布时间】:2016-09-05 07:34:39
【问题描述】:

我需要将一些列表类型的数据存储到MYSQL数据库中。是否可以将其存储在MYSQL中,如果可以,那么保存这些数据的字段的数据类型应该是什么?

提前致谢。

【问题讨论】:

  • 是的,我们可以插入。检查下面的链接。 stackoverflow.com/questions/17371639/…
  • 您能否详细说明一下列表以及为什么要将其存储在关系数据库中?
  • 而这个列表类型到底是哪种语言的数据类型?

标签: mysql


【解决方案1】:

不,不,不,不,不!切勿在单个列中存储多个值!

分离值并将它们中的每一个存储在另一条记录中。

例如,如果您有用户并且想要存储每个用户拥有的角色列表,那么您可以这样做

users table
-----------
id
name
...


roles table
-----------
id
name


user_roles table
----------------
user_id
role_id

【讨论】:

  • 永远不要说永远(除了现在,哈哈)。在某些情况下,由于非常特定的原因,会存储 JSON 或逗号分隔的值。当然,您描述的规则是一般规则,但有一些特定业务逻辑隐含的有效例外。
  • 在某些情况下,对表进行规范化是不好的。并非所有值都应该标准化。
  • @GTHell:比如什么时候??
  • @juergend 存储包含数据的 JSON 列表时,如果规范化会破坏 MySql 读取性能。例如,plate_num: confidence 的字典列表包含 3 个集合,每个条目有 200 个条目,则等于 600 个数据。告诉我您不想将其存储在单独的表中。 10000 笔交易可能会产生 6000000 条数据。我知道这是大数据,应该使用正确的数据库来处理,但并非所有人都有幸使用 nosql。
  • @juergend 你能解释一下why 多个值不应该存储在一个列中吗?我得到了解决方案,但问题似乎没有得到适当的充实。
【解决方案2】:

您可以使用JSON 数据类型。 MySQL 提供JSON 作为column 数据类型,并提供一些函数来处理JSON 数据。

documentation

注意:您必须使用 5.7+ 版本

从 MySQL 5.7.8 开始,MySQL 支持原生 JSON 数据类型,可以高效访问 JSON 中的数据

【讨论】:

    【解决方案3】:

    您可以使用 VARCHAR 数据类型列将其存储为 STRING。

    mysql 中没有专门用于存储特定列表的特定数据类型。

    其他方法是分解列表并将每个成员存储在不同的行中,然后在查询时,您可以使用您的首选语言重新创建列表、数组或 JSON。

    【讨论】:

      【解决方案4】:

      您可以使用 SET 数据类型,这会将预定义的数据集存储在 mysql 中而不是表中,并允许您从列表中选择最多 64 个单独项目的值

      https://dev.mysql.com/doc/refman/8.0/en/set.html

      【讨论】:

        【解决方案5】:

        您可以创建一个包含两个字段的表格 - 第一个是列表名称,第二个是列表项。该表就像列表及其项目之间的连接。每个列表名称在表中出现的次数与列表中的项目相同。每个列表项在表格中出现的次数与其所属列表的数量一样多。

        例如,假设您要存储有关团队的数据。假设任何人都可以成为多个团队的成员。如果鲍勃在蓝队和橙队,那么将有两条记录包括鲍勃 - 一条是他与蓝队配对,另一条是他与橙队配对。如果蓝队有 10 个人,那么将有 10 条记录提到蓝队 - 每个蓝队成员都有一个。

        我认为这个解决方案不遵循规范化规则,但它会是一个实际可行的解决方案,不是吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-22
          • 2014-04-26
          • 1970-01-01
          • 2010-11-16
          • 1970-01-01
          相关资源
          最近更新 更多