рекомендация по моделированию базы данных в 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 + '"',
});

Надеюсь, это поможет вам :)

Другие вопросы по тегам