Как хранить много флагов элементов в основных данных - PullRequest
0 голосов
/ 10 июня 2011

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

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

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

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

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

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

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

Спасибо

1 Ответ

0 голосов
/ 10 июня 2011

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

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

Итак, мы можем очистить вашу существующую модель как:

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.

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

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

В общем, забудьте обо всем, что вы знаете о SQL. Эти знания не помогут вам понять основные данные и будут активно препятствовать вашему пониманию.

...