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

And*_*ins 3 database orm database-schema

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

Car*_*les 9

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

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

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

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

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

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

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

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


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

而这个SO答案: