неэффективная структура базы данных Firebase Swift - PullRequest
0 голосов
/ 17 февраля 2020

В моем приложении у меня есть продукты, которые заказаны Основная категория -> Подкатегория -> Элементы в подкатегории -> Специфические данные c Сведения об элементе

Первый экран моего приложения - это представление коллекции с изображениями продукта категории. При нажатии он выдвигается к новому виду коллекции с подкатегориями, который при нажатии показывает вид таблицы с отдельными элементами в указанной подкатегории. Наконец, это табличное представление передает деталь V C, которая является контроллером представления с изображением и именем продукта.

Сначала я попытался структурировать свою базу данных firebase следующим образом:

Cateogiries
   Main Category1
   id: mainCat1
   imageUrl: someUrl
      Subcategory1
         id: subCat1
         imageUrl: someUrl
         item1
            name: Item 1
            id: item1
            imageUrl: someUrl
            subcategory: items' subcategory

, но быстро столкнулся с проблемами:

мое приложение имеет несколько функций, которые позволяют пользователям go непосредственно из viewController «основных категорий» в детализированный вид элемента c (с использованием либо панели поиска, либо сканирования штрихкода продуктов). Поскольку узел «Элемент» находится так глубоко в узле «Главная категория», я не смог получить его при непосредственном доступе к нему. Поэтому я структурировал свою базу данных следующим образом:

Main Categories
   Main Cat1
      id: mainCat1
      imageUrl: someUrl
      name: Main Cat 1
Subcategories
   Main Category1
      Subcategory1
         id: subcat1
         imageUrl: someUrl
         name: Sub Category1
Items
   Subcategory1
      item1
         id: item1
         name: Item 1
         imageUrl: someUrl

Чтобы сделать эту работу, я извлекаю правильный узел из firebase в каждом контроллере представления. В первой категории (основные категории) я выбираю всех дочерних элементов узла «Основные категории» и отображаю их имена и изображения. При нажатии на ячейку выбранная категория «перемещается» к следующему v c со следующим кодом:

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showSubCat" {
        let subCatVc = segue.destination as! SubCategoryCollectionViewController

        if let indexPath = self.collectionView?.indexPath(for: sender as! UICollectionViewCell) {
            subCatVc.sentData1 = productArray[indexPath.row].name
        }
    }
}

Таким образом, в следующем v c (sibcat v c ) получает ранее выбранную категорию, поэтому я могу выбрать правильную подкатегорию из узла «Подкатегории» в зависимости от того, что нажал пользователь. То же самое для следующего v c.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...