рекомендация по моделированию базы данных в pocketbase
Я пытаюсь создать простое приложение Todo с помощью Pocketbase, где каждый пользователь может создавать/читать/обновлять/удалять задачи, которые являются частными для пользователя. Мне нужна была рекомендация по правильному способу разработки варианта использования. Первоначально я думал о добавлении полей списка задач в коллекцию пользователей. Какой должен быть тип поля задач? Должен ли это быть выбор или отношение? я создал еще одинtodos
коллекция с полями пользователя, описание. Теперь должен ли пользователь использовать отношение типа? Я знаком с реляционной базой данных и часто думаю об отношениях и внешнем ключе. Поскольку pocketbase db является базой данных NoSQL, нельзя ли мне разрешить вкладывать коллекцию задач в мою пользовательскую коллекцию? Должны ли todos быть корневой коллекцией?
Даже если вы знакомы с pocketbase, вам помогут любые рекомендации о том, как бы вы справлялись с такой ситуацией в базах данных Nosql, таких как mongodb,firebase db. Любое предложение поможет мне научиться.
1 ответ
pocketbase использует Sqlite под капотом, так что это не база данных NoSQL;)
Тем не менее, я думаю, что ваша мысль верна. У вас должна быть таблица todo с отношением к пользователю-владельцу, а остальные столбцы сохраняют данные, связанные с toto, такие как описание, контент, приоритет и т. д. Я бы не рекомендовал вложение данных, потому что это затрудняет поиск вещей в базе данных. и медленнее в долгосрочной перспективе. Базы данных NoSQL хэшируют документы по-разному, поэтому они по-прежнему хорошо работают при вложении записей. В покетбейсе такого нет.
Нет, вы не должны вкладывать todos в пользователя.
Да, на мой взгляд, todos — это корневая коллекция по отношению к пользователю (здесь отношение называется «пользователь»).
Получить todo с его пользователем (интерфейс js):
const record = await pb.collection('todos').getOne('RECORD_ID', {
expand: 'user',
});
Или получите пользователя и используйте getList, чтобы получить первые 50 задач пользователя с помощью:
const record = await pb.collection('users').getOne('RECORD_ID')
const resultList = await pb.collection('todos').getList(1, 50, {
filter: 'user = "' + record.id + '"',
});
Надеюсь, это поможет вам :)