Я знаю, что GAE Datastore не является SQL, и что понятие составного первичного ключа не является отображением 1: 1 для SQL. Но я думаю, что хочу создать что-то вроде одного, и я ищу консенсус о том, как это работает. Вот моя модель данных:Первичные ключи Bigtable и Compal
- Car Company
- первичный ключ: название компании
- Модель
- первичный ключ: название компании, название модели
- автомобилей
- Первичный ключ: название компании, модель, VIN
В SQL, на модель «название компании» и «название модели» будет моим первичный ключ («название компании» которого также будет иностранной ключ). Тогда у автомобиля будет сложный внешний ключ Car(company name, model name) -> Model(Company name, model name)
.
В библиотеке ndb
Key фактически представляет собой набор пар ключ/значение, но это похоже на отношение предков, используемых для транзакций. Мне не нужны транзакции для этого (и фактически, поскольку предки ограничивают всю группу сущностей примерно одной транзакцией в секунду, я вообще не хочу использовать предков). Так что мои вопросы:
Является ли тот факт, что ключ представляет собой набор пар ключ-значение способ, чтобы использовать его в качестве составного первичного ключа эквивалента, или же она автоматически создает отношения предок? Возможно ли иметь ключ с несколькими компонентами без использования предков и ограничение скорости транзакции? Связаны ли они неумолимо вместе или не связаны друг с другом и в основном просто используются вместе?
Как люди вообще справляются с этим понятием в Хранилище данных Google/Bigtable? Я могу подделать составной ключ, соединяя ключи в одну строку (вместо списка, такого как
[Ford, Focus]
Я могу просто создать строку, такую как"Ford/Focus"
), это то, что делают большинство людей?
«Важно помнить, что выборка с помощью ключа лучше, чем запрос», это именно то, что я хотел задать, да. Благодаря! –