【问题标题】:If a data model changes (an object) whats the best approach to also update the database?如果数据模型更改(对象),那么更新数据库的最佳方法是什么?
【发布时间】:2011-01-24 12:22:22
【问题描述】:
假设有一个 Teacher 对象,Teachers 拥有 Courses 对象的列表。
教师的课程可以更改。有的被添加,有的被删除。
在数据库中更新此更改的最佳方法是什么。
1. 每次更改后,立即更新数据库。例如:一门课程被添加,立即将其添加到数据库中。
2. 对实体/对象 Teacher 进行所有更改后(添加课程,删除课程),然后才使用所有更改更新数据库。
3. 其他??
我可以看到 1 和 2 的优点和缺点。
For 1:我不知道数据模型可以直接访问数据库时有多好。
对于 2:算法更复杂,因为您必须一次将数据模型中的信息与数据库中的信息进行比较。
谢谢
【问题讨论】:
标签:
database
model
datamodel
【解决方案1】:
查看一些适用于您的语言或平台的 ORM 工具。数据库中实体的对象表示总是可能不同步。例如,如果用户更改了某个属性,并且尝试了数据库更新,但无论出于何种原因更新失败。现在这两个项目没有同步。
这也可能取决于您的数据库的更新频率。如果您不希望在数据库写入方面有大量活动,则可以选择在任何属性更改时触发即时数据库更新。
否则,您可以在对象中包含dirty 标志,以指示它何时与数据库不同步。对象更改可以在发生时更新,或者在触发事件时(例如当用户决定保存他们的进度时)或定期更新,例如每 x 分钟。
不同的语言和框架以不同的方式实现这些模型对象。在 Rails 中,模型对象是 ActiveRecord 的子类,并且知道如何将自己持久化到数据库中。在 Java 中,您很少将域对象与它们的持久化方式混合在一起。这通常由 ORM 框架或自定义 DAO 对象来处理。
【解决方案2】:
我发现了 Hibernate。这正是我所需要的,而且很简单。