Мне нужен совет опытных инженеров No SQL, как мне структурировать свои данные.
- Я хочу смоделировать свою структуру данных SQL на No SQL для Google Cloud Firestore.
- У меня нет опыта работы с базами данных No SQL, но я хорошо владею традиционными SQL.
- . Я использую Node.js для написания запросов.
Пока что я преобразовал три таблицы в JSON документы с примерами данных:
{
"session": {
"userId": 99992222,
"token": "jwttoken1191891j1kj1khjjk1hjk1kj1",
"created": "timestamp"
}
}
{
"user": {
"id": 99992222,
"username": "userName",
"avatarUrl": "https://url-xxxx.com",
"lastLogin": "2019-11-23 13:59:48.884549",
"created": "2019-11-23 13:59:48.884549",
"modified": "2019-11-23 13:59:48.884549",
"visits": 1,
"profile": true,
"basketDetail": { // I get this data from a third party API
"response": {
"product_count": 2,
"products": [
{
"product_id": 111,
"usageInMinutes_recent": 0,
"usageInMinutes": 0,
"usageInMinutes_windows": 0,
"usageInMinutes_mac": 0,
"usageInMinutes_linux": 0
},
{
"product_id": 222, // no recent usage here
"usageInMinutes": 0,
"usageInMinutes_windows": 0,
"usageInMinutes_mac": 0,
"usageInMinutes_linux": 0
}
]
}
}
}
}
{
"visitor": {
"id": 999922221,
"created": "2019-11-23 13:59:48.884549"
}
}
Мои вопросы:
- session.userId, пользователь. id, visitor.id могут все обозначать одного и того же пользователя. Что такое Firestore эквивалентно внешним ключам в SQL? Как мне соединить / объединить эти три коллекции в запросе?
Что мне делать с вложенным объектом basketDetail
? Это хорошо, где это или я должен определить свою собственную коллекцию? Я ожидаю, что запросы
- иногда добавляют все недавнее использование.
- часто проверяют, есть ли у пользователя определенный c product_id
- , часто заменяют целое
baskedDetail
объект с новыми данными. - иногда обновляет один спецификатор c product_id.
Как бы я связал коллекции user
с basketDetail
в запросе, если бы я их отделил?
Спасибо за совет!