0

Я знаю, что GAE Datastore не является SQL, и что понятие составного первичного ключа не является отображением 1: 1 для SQL. Но я думаю, что хочу создать что-то вроде одного, и я ищу консенсус о том, как это работает. Вот моя модель данных:Первичные ключи Bigtable и Compal

  • Car Company
    • первичный ключ: название компании
  • Модель
    • первичный ключ: название компании, название модели
  • автомобилей
    • Первичный ключ: название компании, модель, VIN

В SQL, на модель «название компании» и «название модели» будет моим первичный ключ («название компании» которого также будет иностранной ключ). Тогда у автомобиля будет сложный внешний ключ Car(company name, model name) -> Model(Company name, model name).

В библиотеке ndbKey фактически представляет собой набор пар ключ/значение, но это похоже на отношение предков, используемых для транзакций. Мне не нужны транзакции для этого (и фактически, поскольку предки ограничивают всю группу сущностей примерно одной транзакцией в секунду, я вообще не хочу использовать предков). Так что мои вопросы:

  1. Является ли тот факт, что ключ представляет собой набор пар ключ-значение способ, чтобы использовать его в качестве составного первичного ключа эквивалента, или же она автоматически создает отношения предок? Возможно ли иметь ключ с несколькими компонентами без использования предков и ограничение скорости транзакции? Связаны ли они неумолимо вместе или не связаны друг с другом и в основном просто используются вместе?

  2. Как люди вообще справляются с этим понятием в Хранилище данных Google/Bigtable? Я могу подделать составной ключ, соединяя ключи в одну строку (вместо списка, такого как [Ford, Focus] Я могу просто создать строку, такую ​​как "Ford/Focus"), это то, что делают большинство людей?

ответ

1

Чтобы ответить на два вопроса:

  1. Я не знаком с ndb но ключей в хранилище данных составлены из иерархии Kind-ID (Long) или Kind-имя (String). Итак, да, создание этого набора пар ключ-значение будет налагать группы сущностей, так что автомобиль будет находиться в группе объектов модели, которая будет в группе сущностей Car Company. This page объясняет более подробно.

  2. Ваша модель данных будет действительно зависеть от того, как вы хотите ее запросить и обновите, но стоит помнить, что Datastore не будет применять какие-либо ограничения на ваши данные, ваше приложение должно будет это сделать. Итак, да, создание уникальной строки, такой как ford.focus, может быть одним из способов создания идентификатора модели. Затем вы можете использовать что-то вроде ford.focus.12345 в качестве идентификатора автомобиля. Или вы можете просто позволить Datastore автоматически создать длинный идентификатор, а затем сохранить свой автомобиль в качестве ключа к своей модели, который, в свою очередь, может иметь ключ, ссылающийся на его компанию Car Company.Возможно, вы захотите иметь некоторую избыточность по сравнению с нормализацией и иметь ключи как к модели, так и к автомобильной компании в своем автомобиле - опять же, это зависит от того, какие данные вам нужно запрашивать/извлекать и как часто.

Важно помнить, что выборка с помощью ключа лучше, чем запрос, поэтому требования вашего приложения будут иметь отношение к вашей модели сущности.

+0

«Важно помнить, что выборка с помощью ключа лучше, чем запрос», это именно то, что я хотел задать, да. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^