gpt4 book ai didi

database - 在数据库中存储字符串数组

转载 作者:太空狗 更新时间:2023-10-30 02:00:01 24 4
gpt4 key购买 nike

我有一个通过 ORM 保存到数据库的对象。该对象有一个字符串数组,每个对象的数组长度可能不同。我想知道在数据库中存储字符串数组的标准做法(例如,我应该将所有字符串存储在一个字段中作为 csv 等.) ?

最佳答案

我猜你有一个 MySql 关系数据库。作为第一种方法,您必须考虑插入任何类型的组合数据(CSV、JSON、serialize()) 关系数据库中的一个字段是您始终应该避免的东西。这是我在大学学习数据库时学到的第一件事。这是因为当你设计一个数据库时,你的第一个方法应该是Database normalization。 .

Denormalization是寻找性能时常用的东西。为此,您需要在数据库(建模、访问等)方面拥有丰富的经验。这是经验丰富的 DBA 和商业智能专业人员所做的事情,但如果您真的不知道自己在做什么,则不必尝试任何事情。

因此,您的目标是设计一个规范化的数据库。为什么这反对数据库规范化?好吧,我们知道有几种“正常形式”,它们决定了表格对逻辑不一致和异常的免疫程度。如果你看一下 First normal form 的定义

First normal form (1NF) is a property of a relation in a relational database. A relation is in first normal form if the domain of each attribute contains only atomic values, and the value of each attribute contains only a single value from that domain.

因此,当您在字段中保存数组时,您的数据库甚至不是第一范式。

不这样做的一些实际原因是:

  • 您不能使用 JOIN
  • 不能使用索引
  • 搜索、筛选、排序,并不容易
  • 丧失引用能力
  • 如果你真的不知道自己在做什么,应用层的性能会更差。

确实有些人(像 Joomla 那样)存储实体的不太重要的数据,例如字段中的非关键配置值。最好的方法可能是使用 serialize() . Here您对何时可以考虑这样做有一个解释。但同样,只有当您真正知道自己在做什么并且确实需要它时,您才应该这样做


如果你想要更多的引用,你可以阅读这个:

还有这个 SO 回答:

关于database - 在数据库中存储字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com