Порядок сортировки в Базовых данных с отношением multi-multi - PullRequest
3 голосов
/ 22 декабря 2010

Скажем, я моделирую школу, поэтому у меня есть 2 сущности: ученик и класс. По какой-то причине я хочу, чтобы у каждого списка классов был свой порядок сортировки. В простых отношениях это будет означать присвоение студенту атрибута sortOrder и просто сортировку списка по этому номеру. Проблема в том, что учащийся может быть порядка 3 в одном классе и порядка 6 в другом. Как бы я мог хранить эти заказы в Базовых данных таким образом, чтобы я мог легко получить к ним доступ и правильно сортировать свои списки?

 Student                  Class
 classes  <<--------->>  students
    ^                       ^
    |                       |
unordered                ordered

Эта диаграмма может помочь объяснить, что я пытаюсь сделать. Студенческий «список» я хотел бы получить в определенном порядке, где-то хранить, который может быть любой порядок. Хранение этого заказа - это то, что я не уверен, как сделать это наиболее эффективным способом. Создание группы объектов Order и попытка управлять ссылками - это много лишних затрат, и кажется, что должен быть лучший способ.

Ответы [ 2 ]

1 голос
/ 22 декабря 2010

Если порядок студентов может быть описан одним или несколькими NSSortDescriptors, вы можете создать извлеченное свойство для объекта Class, которое выбирает студентов и применяет дескриптор сортировки.В качестве альтернативы может быть проще (в зависимости от вашего варианта использования) применить дескриптор (ы) сортировки к NSFetchedResultsController, который вы используете для работы с классом «коллекция студентов».

Если вы можете 'т NSSortDescriptor, тогда вам понадобится атрибут index (или имя по вашему выбору) для сущности Student, если есть только один порядок или набор Order сущностей, описывающих индекс в каждом порядкекаждый Student.Вы будете нести ответственность за поддержание этих значений индекса.К сожалению, в Core Data нет простого способа сделать это.Это просто много работы.

0 голосов
/ 22 декабря 2010

Student << - >> StudentClass << - >> Class

StudentClass
----
studentID
order
classID 

Затем вы можете выбрать при необходимости.

Например, у вас есть student. Получить весь StudentClass, где StudentID равен student.studentID. Затем у вас есть order, а также доступ к классу.

Вы, вероятно, захотите добавить некоторую бизнес-логику, чтобы сделать вашу жизнь проще. Кроме того, если вы еще не используете его, взгляните на MOGenerator: https://github.com/rentzsch/mogenerator

РЕДАКТИРОВАТЬ: Я действительно хотел бы знать, почему это отклоняется. Комментарии будут высоко оценены.

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