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

时间:2014-02-05 17:47:13

标签: database orm database-schema

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

1 个答案:

答案 0 :(得分:8)

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

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

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

的定义
  

第一范式(1NF)是关系中关系的属性   数据库。如果每个域的关系,则关系是第一范式   attribute仅包含原子值,以及每个属性的值   仅包含该域中的单个值。

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

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

  • 您无法使用JOIN
  • 您无法使用索引
  • 搜索,过滤,排序,并不容易
  • 失去参考的能力
  • 如果您真的不知道自己在做什么,那么应用程序层的性能会更差。

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


如果您想要更多参考资料,可以阅读:

此SO也回答:

相关问题