当前位置: 首页 > 知识库问答 >
问题:

存储双向关系的数据结构

唐向荣
2023-03-14

我在谷歌上搜索过,找不到任何可以在O(1)时间内存储和读取双向数据的DS。例如书籍和作家。有了书的名字,就必须找到作者。有了作者的名字,就必须找到书。

在数据库中,这些关系(如联接表)是如何存储的?

提前谢谢。

共有2个答案

淳于博文
2023-03-14

扩展到Dukling的回答,我相信Google有一个名为HashBiMap的实现:http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/HashBiMap.html

屈畅
2023-03-14

这个想法结合了以下几点:

  • 第一个元素到第二个元素(或它们的列表)的哈希映射
  • 第二个元素到第一个元素(或它们的列表)的哈希映射

哈希映射提供了预期的O(1)查找。

不过,我不认为数据库通常使用哈希映射,据我所知,更典型的是b-树(提供O(logn)性能)。

 类似资料:
  • 我试图在用户和地址之间建立双向关系, 用户1-------->*地址 但是 地址1-------->1个用户 我在上网时得到了这些信息 > 对于一对一双向关系,拥有方对应于包含对应外键的方 双向关系的反向侧必须通过使用OneToOne、 OneToMany或ManyToMany批注的mappedBy元素来引用其 所属侧。mappedBy元素指定作为 关系所有者的实体中的属性或字段。 但如果我按照情

  • 我很难找到如何在Spring中从@manytomany关系中检索数据。我遇到了无限递归问题,并尝试了一些解决方案,比如使用@JSONIgnoreProperties,但都没有成功。 一个用户可以有多个组,一个组可以有多个用户。我可以将用户添加到组中,但是当涉及到检索与用户关联的所有组时,我会从无限递归中得到堆栈溢出。 理想情况下,我希望能够发送带有用户ID的get请求,然后检索与该用户关联的所有G

  • 我正在将nTier架构迁移到六边形架构中。我的域现在定义得很好,我有所有基础设施依赖项的接口。查看数据库存储库,我有几个数据库,在下面的一侧有一个类实现每个repo。我的问题是关于数据库依赖项的正确方法是什么: 1-在域端有一个接口来处理数据访问,然后依赖于基础设施实现,并有一个类作为所有数据库存储库的入口点,就像一个facade,从那里调用所有存储库实现。这种方法与我在nTier应用程序中已经使

  • 我在和之间具有双向多对多关系。在的帮助下创建两个实体,甚至创建它们的子实体都是简单明了的。 和都可以在的帮助下轻松地自动持久化,如下所示: 然而...更新会导致异常: 我尝试修改的以包括、和/或,但未成功。我们怎么绕过这件事?

  • 我有两个集合A和B的元素a和b。现在它们彼此相关(0...1: n基数),所以每个a在B中最多有一个伙伴,每个b可以与A中的项目有几个(至少一个)关联。A是一组整数对,B是整数。 有没有有效的方法来存储这种“双向”地图?一种简单的方法是使用两种地图: 但也许有更好的方法来更有效地处理这个问题。 谢谢你的帮助

  • 问题内容: 假设我有两个实体: 然后,我要保留“客户”实体,然后,参照先前添加的“客户”保留“订单”实体。当我从数据库中检索此客户并调用getOrders时,它将返回空集。这是正常行为吗?如果是,当我添加新的Order实体时,我该怎么做以自动刷新此集合? 问题答案: Jpa不会为您维护关系,因此应用程序需要设置双向关系的两端,以使它们与数据库保持同步。当您设置了order-> customer关系