2014-02-05 120 views
2

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

+0

什么是 “最好” 的标准是什么?存储需要,性能等 –

+0

而不是“最好的”,我想我应该对这样的问题说“标准”的做法。 –

+0

您正在使用什么数据库系统,还是需要独立于数据库的解决方案?你还使用了什么样的ORM映射器?它的要求是什么? –

回答

4

我想你有一个MySql关系数据库。 作为首次,你认为关系数据库将任何类型的组成数据(CSV,JSON,serialize()在现场是什么,你总是应该避免。这是我在大学学习数据库时学到的第一件事。这是因为当你设计一个数据库时,你的第一种方法应该是Database normalization

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

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

第一范式的定义(1NF)是关系在关系数据库 属性。如果每个 属性的域仅包含原子值,并且每个属性 的值仅包含来自该域的单个值,则关系采用第一范式。

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

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

  • 不能使用JOIN
  • 不能使用索引
  • 搜索,筛选,排序,是不容易的
  • 的能力使参考文献丢失
  • 如果您不知道自己在做什么,应用程序层的性能会变差。

的确,有些人(如Joomla确实)存储实体的重要数据较少,例如字段中的非关键配置值。最好的办法可能是使用serialize()Here你有解释什么时候可以考虑这样做。但同样这是后话,如果你真的知道你在做什么,你只能做的,你真的需要它


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

而且还牛逼他的SO答案:

+1

真棒只是我在找。谢谢! –

相关问题