Nano Hash - криптовалюты, майнинг, программирование

Как хранить много флагов элементов в основных данных

Я пытаюсь сделать следующее в своем приложении для iPad. У меня есть структура, которая позволяет людям создавать сгруппированные списки, которые мы называем «Шаблоны». Таким образом, CoreOffer верхнего уровня (имеет заголовок), который может иметь много групп (имеет название группы/порядок отображения), который может иметь много элементов (имеет ItemTitle, DisplayOrder). Как показано ниже. Это прекрасно работает, я могу отлично создавать шаблоны.

Ссылка на изображение http://img405.imageshack.us/img405/9145/screenshot20110610at132.png

Но как только шаблоны созданы, люди могут использовать их для сопоставления с шаблоном, который я буду называть оценкой. Шаблон можно использовать много раз. Оценка будет содержать дату (созданную системой) и какие элементы из этого конкретного шаблона были выбраны.

Пример ниже, люди смогут проверить определенные строки на экране ниже, тогда это оценка.

Ссылка на изображение http://img41.imageshack.us/img41/8049/screenshot20110610at133.png

Я изо всех сил пытаюсь понять, как создать и сохранить эту информацию в базовой модели данных без дублирования шаблона. (борьба из-за фона SQL!) В SQL это будет включать что-то вроде оценочной таблицы, записывающей каждый идентификатор элемента и его статус выбора.

Я ожидаю, что это довольно просто, но я просто не могу понять это!

Спасибо

10.06.2011

  • Я думаю, что вы пропустили часть своего вопроса после того, как в SQL это будет что-то вроде .... Если вы не можете редактировать, поместите это в комментарий прямо здесь, и я отредактирую его для вас. 10.06.2011
  • Вы также можете воспользоваться советом Tequilla: результат данных"> stackoverflow.com/questions/2350304/ 10.06.2011
  • Немного отредактированный, я считаю, что ваш отличный пример / руководство уже поставил меня на правильный путь. 10.06.2011

Ответы:


1

Первое, что вы хотите сделать, это очистить именование в вашей модели данных. Помните, что здесь вы имеете дело с уникальными объектами, а не с именами таблиц, столбцов, строк, объединений и т. д. в SQL. Таким образом, вам не нужно добавлять ко всему префикс «Основной» (если только у вас нет нескольких видов объектов «Предложение», «Группа» и «Элемент»).

Имена сущностей начинаются с прописных букв, имена атрибутов и связей — со строчных. Все имена сущностей являются единственными, потому что моделирование сущности не зависит от того, сколько экземпляров сущности будет или какие у нее будут отношения. Имена отношений «к одному» должны быть в единственном числе, а ко многим — во множественном числе. Эти соглашения упрощают чтение кода и позволяют передавать информацию о модели данных без необходимости просмотра самой графики.

Итак, мы могли бы очистить вашу существующую модель, например:

Offer{
  id:string
  title:string
  groups<-->>Group.offer
}

Group{
  title:string
  displayOrder:number
  offer<<-->Offer.groups
  items<-->>Item.group
}

Item{
  title:string
  displayOrder:number
  isSelected:Bool
  group<<-->Group.items
}

Теперь, если вы прочитаете ключевой путь в коде, который идет AnOfferObj.groups.items, вы можете сразу сказать, что проходите два отношения ко многим, не зная ничего больше о модели данных.

Мне неясно, что именно вы хотите, чтобы ваши «Оценки» «скопировали». Похоже, вы либо хотите, чтобы они «скопировали» весь график любого Offer, либо хотите, чтобы они «скопировали» набор Item объектов.

В любом случае решение состоит в том, чтобы создать объект Evaluation, который может формировать отношения либо с Offer, либо с Item.

В первом случае это будет выглядеть так:

Evaluation{
  title:string
  offer<<-->Offer.evaluations
}

Offer{
  id:string
  title:string
  groups<-->>Group.offer
  evaluations<-->>Evaluation.offer
}

... и во втором случае:

Evaluation{
  title:string
  items<<-->>Item.evaluations
}

Item{
  title:string
  displayOrder:number
  isSelected:Bool
  group<<-->Group.items
  evaluations<<-->>Evaluation.items
}

Обратите внимание, что ни в том, ни в другом случае вы ничего не дублируете и не копируете. Вы просто создаете ссылку на существующую группу объектов. В первом случае вы найдете все связанные объекты Item для конкретного объекта Evaluation, пройдя по ключевому пути offer.groups.items. Во втором случае вы прошли бы только ключевой путь отношения items объекта Evaluation с items.

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

Несколько советов на прощание: Core Data — это не SQL. Сущности не являются таблицами. Объекты не являются строками. Атрибуты не являются столбцами. Отношения не являются соединениями. Core Data — это система управления объектным графом, которая может сохранять или не сохранять объектный граф и может использовать или не использовать SQL для этого. Попытка думать о Core Data в терминах SQL приведет к тому, что вы совершенно неправильно поймете Core Data, что приведет к большому огорчению и напрасной трате времени.

По сути, забудьте все, что вы знали о SQL. Эти знания не помогут вам понять Core Data и будут активно препятствовать вашему пониманию их.

10.06.2011
  • Большое спасибо, это блестяще объяснено. Я думал об этом, но предыдущее знание SQL определенно заставляет меня дважды подумать о решениях! Я попытаюсь реализовать это в ближайшее время, но я считаю, что вы обрисовали в общих чертах, что мне нужно сделать. Спасибо. 10.06.2011
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..