Беспорядочная структура Firebase с категоризацией элементов в приложении iOS - PullRequest
0 голосов
/ 29 мая 2020

Я создаю приложение, в котором есть элементы, которые отсортированы по основной категории -> подкатегории -> отдельные элементы. Я использую базу данных 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 всех элементов, которые они предпочитают, со значением «истина» (или «ложь», если они не понравились).

Этот процесс добавления новых элементов чрезвычайно утомителен и подвержен ошибкам, а моя база данных выглядит как беспорядок, поэтому сложно отслеживать вещи. Как мне лучше хранить данные?

...