【问题标题】:Does indexedDB support foreign keys? If not, can I simulate foreign keys?indexedDB 是否支持外键?如果没有,我可以模拟外键吗?
【发布时间】:2014-02-23 04:57:20
【问题描述】:

我正在构建一个使用 IndexedBD 的网络应用程序。我来自 SQL 背景,所以概念不同。具体来说,我的理解是 indexedDB 中没有“外键”的真正概念。因此,我试图找出检索相关对象的最快方法,在 SQL 世界中,该对象将是外键。

以 SQL 为例,假设我们有以下表:

table carBrand:
  brandName
  brandInitial
table carModel:
  modelName
  brand (FK)

现在,如果我们在carBrand 中有一条记录,其中包含brandName=FordbrandInitial='F',然后在carModel 中有一条记录,其中包含数据modelName = Mustangbrand = (FK)Ford

要在 SQL 世界中显示此 Mustang 记录的 brandInitial,我可以使用点“。”符号。简单地说,myCarInstance.brand.brandInitial 将显示F。我不必存储到carModel 记录中的brandInitial,因为指向外键的指针保存了该数据。

现在转移到 indexedDB,同样的场景会这样设置:

objectStore "carBrand"
objectStore "carModel"

为了拥有相同的记录(福特野马),我的理解是我们会进行两次.add 通话。首先,我们添加brandName: "Ford"。接下来(这也是我对“最佳实践”的理解不明确的地方)添加“Ford Mustang”,我们将向包含此数据的carModel 存储添加一条记录:

modelName: "Mustang"
brand: "Ford"      

那么,有了这个数据设置,有没有一种“快速”的方法来检索记录的brandInital?我是否必须打开一个交易只是来检索F 品牌首字母,或者我应该使用其他方法吗?

【问题讨论】:

    标签: indexeddb


    【解决方案1】:

    在像 indexeddb 这样的键值存储中,对象存储之间没有关系。如果您的关系是父子关系,则可以使用分层键,例如 [carBrand, carModel]。在 appengine db api 中查看有关分层键的更多详细信息。

    【讨论】:

    • 是的,我意识到与 IndexedDB 没有实际关系,但我想知道是否有一些简单的方法可以遵循伪关系。经过更多研究,我完成了将对象存储在对象中的路径。因此,我没有建立关系,而是拥有嵌套对象。工作方式相同,但有点不同。现在我可以很好地使用点符号了。
    • 我也不确定如何执行此操作,但由于我正在从事的项目的复杂性,我决定使用 lovefield。在向前端堆栈添加更多技术之前,总是需要考虑权衡因素,但这完全是另一个讨论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多