database - ORM 与序列化数组?

标签 database arrays orm

我只是在学习 ORM,我想知道...如果您有一个对象(假设是一个 JSON...并假设它是密集的,包含嵌套对象,具有可能因对象而异的属性总数对象等),反对简单地将其转换为序列化数组并将其存储在表中的论点是什么?

我正在描述的对象可能无论如何都不会正常化;它会有不确定数量的属性,这意味着不确定的列......将这种东西映射到一个表需要大量的行和键。

如果您最终计划在数据库中查询一个对象,然后通过代码进行处理,那么简单地序列化它或使用某种 OODB 的缺点是什么?使用 ORM 可以获得什么?

最佳答案

我的经验是,由于 ORM 的存储层期望存储数据是动态的,因此对其格式没有先入之见,因此它可以更好地处理规范中的异常情况。 (不是实际的错误异常,而是您的对象与您的数据库模式不匹配的情况)

当您处理动态对象时,经典存储所强制执行的刚性通常会迫使您要么处理规范的异常,要么创建一个如此松散的数据库模式,以至于使用它会破坏数据库引擎通常授予的优化;考虑计算统计数据和各种指标。

但是,最终我认为您在第二段中一语中的:如果它无法规范化,那么您将无法将其表示为足以让您的数据库高效工作的模式。

当然,您可以将整个对象序列化为一个数组并将其存储,但是您失去了良好的索引、全文搜索和交叉引用对象而无需多次读取的能力。

上面的一个例子,假设您的数据库正在为电子商务订单建模,并且您想要查找初始采购订单的后续采购订单。数据库需要知道如何读取每个序列化项目以找到它的 parentId 属性,然后重新扫描表以查找匹配项。

长话短说,ORM 是对自梦想面向对象编程以来一直存在的问题的答案 - 不要担心并使用它们,除非您确定您的数据结构/模式是严格且合理的到 SQL。

关于database - ORM 与序列化数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9388374/

相关文章:

javascript - 如何使用 Angular.js ng-repeat 显示表内的数据数组

arrays - 随机排列矩阵

java - Hibernate 中的带注释的类

java - 仅当使用 hibernate 不存在该行时,如何在表中添加行?

mysql - 检查长时间运行的查询的状态

mysql - 对多个表上的字段进行不同计数的查询不起作用

PHP/MySQL - 同时进行多个查询

database - 数据库索引是否反向工作?

java - StringTokenizer 数组

java - 并发应用程序中的 Play Framework 2.X 模型定义