我有一个对象,我通过ORM保存到数据库。该对象有一个字符串数组,每个对象的数组长度可以不同。我想知道将字符串数组存储在数据库中的标准做法(例如,是否应将所有字符串作为csv存储在一个字段中,等等)?将字符串数组存储在数据库中
回答
我想你有一个MySql关系数据库。 作为首次,你认为在关系数据库将任何类型的组成数据(CSV,JSON,serialize()
)在现场,是什么,你总是应该避免。这是我在大学学习数据库时学到的第一件事。这是因为当你设计一个数据库时,你的第一种方法应该是Database normalization。
Denormalization是寻找性能时常用的东西。为此,您需要在数据库(建模,访问等)方面拥有丰富的经验。这是经验丰富的DBA和商业智能专业人士所做的事情,但如果您不真正了解自己在做什么,则无法尝试任何事情。
所以,你的目标是设计一个规范化的数据库。为什么这是针对数据库规范化的?好吧,我们知道有几种“正常形式”,它们决定了表格对逻辑不一致和异常的豁免程度。如果你看看在First normal form
第一范式的定义(1NF)是关系在关系数据库 属性。如果每个 属性的域仅包含原子值,并且每个属性 的值仅包含来自该域的单个值,则关系采用第一范式。
因此,当你在一个字段中保存一个数组时,你的数据库甚至不是第一个正常形式。
有些不这样做的实际原因是:
- 不能使用JOIN
- 不能使用索引
- 搜索,筛选,排序,是不容易的
- 的能力使参考文献丢失
- 如果您不知道自己在做什么,应用程序层的性能会变差。
的确,有些人(如Joomla确实)存储实体的重要数据较少,例如字段中的非关键配置值。最好的办法可能是使用serialize()。 Here你有解释什么时候可以考虑这样做。但同样这是后话,如果你真的知道你在做什么,你只能做的,你真的需要它
如果你想要更多的参考,你可以阅读:
- http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2z10.doc.intro%2Fsrc%2Ftpc%2Fdb2z_denormalizationforperformance.htm
- https://dba.stackexchange.com/questions/4622/when-should-you-denormalize
- http://searchdatamanagement.techtarget.com/definition/denormalization
而且还牛逼他的SO答案:
真棒只是我在找。谢谢! –
- 1. 将二维字符串数组存储到SQLite数据库
- 2. 将数据存储到字符串或数据库中
- 3. 将字符串存储到数组中
- 4. 将字符串存储到数组中?
- 5. 将字符串的地址存储在字符串数组中
- 6. 将部分字符串存储在字符串数组中
- 7. 将数组存储在数据库中
- 8. 如何将字符串中存储的数据转换为字符串数组
- 9. 如何将数据字符串存储到数组中
- 10. 在数据库中存储数据(字符串)
- 11. 将长字符串存储在数据库中是否好?
- 12. 将字符串存储在MySQL数据库中
- 13. 存储数据库连接字符串
- 14. 在SharedPreferences中存储字符串数组
- 15. MATLAB将字符串存储为数组
- 16. 将数组数组存储在数据库字段
- 17. 如何将字符串值存储在Java数组中的字符数组?
- 18. 将二进制数据作为字符串存储在Web Sql数据库中
- 19. 将枚举存储为数据库中的字符串
- 20. 在二维字符串数组中存储很多字符串
- 21. 在数组中存储字符串并拆分字符串
- 22. 从数据库中检索数据并存储在字符串中并将所有字符串绑定到gridview
- 23. 如何在sqlite数据库中存储字符串数组并保持顺序
- 24. 如何使用Hibernate在数据库表中存储字符串数组?
- 25. 存储字符串数组在appSettings?
- 26. 在字符串数组存储头VBA
- 27. 将数据存储在数据库中
- 28. 在一个字段中存储多个数据(将数据存储在数据库的数组中)
- 29. 将整数作为字符串存储在数据库中的缺点?
- 30. 存储浮点数作为字符串中的Android数据库
什么是 “最好” 的标准是什么?存储需要,性能等 –
而不是“最好的”,我想我应该对这样的问题说“标准”的做法。 –
您正在使用什么数据库系统,还是需要独立于数据库的解决方案?你还使用了什么样的ORM映射器?它的要求是什么? –