Я создаю приложение, в котором есть элементы, которые отсортированы по основной категории -> подкатегории -> отдельные элементы. Я использую базу данных Firebase в реальном времени для хранения элементов. Проблемы начали возникать, когда я добавил функцию «избранное» (позволяет пользователю добавлять в избранное элемент, который отображает элемент на его собственном экране избранного) и сканер штрих-кода, который позволяет пользователю напрямую касаться указанного элемента c путем его сканирования штрих-код.
Эти функции значительно усложнили хранение предметов в Firebase. Я придумал решение, которое заставляет приложение работать так, как я хочу, но теперь добавление новых элементов в firebase чрезвычайно утомительно и подвержено ошибкам.
Мои базы данных в настоящее время состоят из следующих основных узлов:
Category
Subcategory
IndividualItem
Indexes
Barcodes
Users
Первый экран приложения - это просмотр коллекции, в котором отображаются все различные категории, и он касается узла Category
для отображения информация, которая структурирована следующим образом:
Category
Cheese
id: "cheese"
imageUrl: "someUrl"
name: "Cheese"
Category2
Category3
Следующий просмотр коллекции подключается к узлу Subcategory
, который имеет такую структуру:
Subcategory
Cheese
Cheddar Cheese
id: "cheddarCheese"
imageUrl: "someUrl"
name: "Cheddar Cheese"
Yellow Cheese
Category2
Category3
и отображает правильные подкатегории в зависимости от что было выбрано на предыдущем экране. Наконец, третий экран показывает список элементов в выбранной подкатегории и касается узла individualItem
:
individualItem
Cheddar Cheese
SomeGeneratedUID
id: SomeGeneratedUID
name: cheddar cheese #1
SomeOtherGeneratedUID
id: SomeOtherGeneratedUID
name: cheddar cheese #2
Yellow Cheese
Other subcategories
Здесь все усложняется. Чтобы подключаться непосредственно к отдельным элементам при сканировании штрих-кода элементов, мне нужен был узел, в котором имена всех отдельных элементов были на один уровень глубиной. Здесь на помощь приходит узел Indexes
. Его дочерние узлы - это все индивидуальные элементы, сгенерированные UID, а их дочерний элемент снова является подкатегорией элементов.
Таким образом, я могу отображать элементы напрямую либо путем поиска из главного меню, либо путем сканирования штрих-кода. Кроме того, каждый пользовательский узел имеет узел favourites
, который состоит из UID всех элементов, которые они предпочитают, со значением «истина» (или «ложь», если они не понравились).
Этот процесс добавления новых элементов чрезвычайно утомителен и подвержен ошибкам, а моя база данных выглядит как беспорядок, поэтому сложно отслеживать вещи. Как мне лучше хранить данные?