Поддерживает ли indexedDB внешние ключи? Если нет, смогу ли я имитировать внешние ключи?

Я создаю веб-приложение, которое использует IndexedBD. Я исхожу из фона SQL, поэтому понятия разные. В частности, я понимаю, что нет реальной концепции "внешнего ключа" в индексированном DB. Таким образом, я пытаюсь найти самый быстрый способ получить связанный объект, который в мире SQL будет внешним ключом.

Например, с SQL, предположим, что у нас есть следующие таблицы:

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

Теперь, если у нас есть запись в carBrand, которая содержит brandName=Ford, brandInitial='F', а затем запись в carModel, которая содержит данные modelName = Mustang и brand = (FK)Ford.

Чтобы отобразить brandInitial этой записи Mustang в мире SQL, я мог бы использовать точку "." нотации. Просто myCarInstance.brand.brandInitial, который отобразит F. Мне не нужно сохранять в brandInitial в записи carModel, поскольку указатель на внешний ключ хранит эти данные.

Теперь, перейдя в indexedDB, тот же сценарий будет настроен так:

objectStore "carBrand"
objectStore "carModel"

Чтобы иметь такую ​​же запись (Ford Mustang), я понимаю, что мы будем делать два вызова .add. Сначала добавим brandName: "Ford". Далее (и здесь, когда мое понимание "лучших практик" не является твердым), чтобы добавить "Ford Mustang", мы добавили запись в хранилище carModel, в котором есть эти данные:

modelName: "Mustang"
brand: "Ford"

Итак, с этими настройками данных существует ли "быстрый" способ получить запись brandInital? Должен ли я открывать транзакцию только для извлечения маркера F или есть какой-то другой подход, который я должен использовать?

1 ответ

В хранилище ключевых значений, например indexeddb, между объектами нет никакой связи. Если ваши отношения являются родительскими родителями, вы можете использовать иерархический ключ, например [carBrand, carModel]. Подробнее об иерархическом ключе в appengine db api.

licensed under cc by-sa 3.0 with attribution.