我有以下问题:我正在加载一个只有删除和插入的“dif”-table。 “更改”由删除后跟插入确定。
此表没有主键,也没有要排序的字段。我想使用Hibernate来加载这个表。 (SELECT obj FROM MyDifTable obj WHERE obj.group = groupId
)
现在,我在所有值和上面的查询中使用了一个键,而且我没有按照源表中的顺序获取行。
我的问题是:
我知道这是一个设计糟糕的东西,我试图与设计团队争论,但没有成功。
最诚挚的问候, 启
答案 0 :(得分:3)
关系数据库基于Set理论的一个分支。信息在数据库中(在Set中)或不在。订单不是集合中的概念,只有存在是集合中的概念。这意味着如果需要,您必须明确地对排序进行建模。
如果必须维护订单,则必须添加“order by”子句以对集合的结果成员进行排序。有时候这种排序是外在的(所以你可以推迟排序决定,直到查询提交时间)。在非常罕见的情况下,将该订单内化在“数据集”中非常重要。
在奇数情况下,您需要内化订购,您必须通过将订单与数据一起存储在集合中来实现;但是,为了强制存在“order by”子句(查询编写者可能会省略它),您可能还需要放置一些数据的存储过程/视图,以确保查询始终以正确的顺序返回。
将列表存储到数据库时,内部排序的示例很常见。一个通常将列表项与它的索引一起存储在同一行的列表中。这样,当检索它时,您可以恢复项目和订购。