假设我有两个表,例如thread
和author
,其中
的 thread
+------+--------+-...-+
| id | author | ... |
+------+--------+-...-+
和 author
+----+-...-+
| id | ... |
+----+-...-+
其中thread.author
在author.id
上有外键。这是论坛项目的一小部分。
我正在运行一个使用Hibernate ORM访问数据库的Java应用程序。所以,我基本上有3层:逻辑层(Java类)< - >数据访问层(Hibernate)< - >数据库中。
现在,考虑这种情况:我经常需要为很多用户提供线程数。所以,基本上我认为我有这些不同的解决方案:
SELECT COUNT(*) FROM thread WHERE author='some_id'
)。这似乎效率很低,因为它很多次访问数据库。author
表,添加threads_number
之类的列。但是,这又提出了另一点:哪一层更新了这一列?数据库触发器(在不同的数据库之间看起来非常不可移植)或应用程序层(这很好,但同时又会导致不一致)?什么是最佳选择?
答案 0 :(得分:0)
第二种方式很难。你有一对多的关系,所以你应该在单个author.threads_number字段中存储多个线程ID,但这是非常糟糕的做法。 物化视图将帮助您和典型视图与第一种方式相同 - 您需要从数据库中多次选择数据。 总而言之,您确实需要多次获得数据,因此您需要多次接收数据。 您所能做的就是使用hibernate访问数据库。 Hibernate可以在不使用数据库连接的情况下从缓存中读取存储的数据,并且可以管理数据库连接池以实现最佳性能。