Лучший способ хранить контекстные атрибуты в основных данных? - PullRequest
0 голосов
/ 02 декабря 2018

Я использую Core Data для хранения объектов.Какова наиболее эффективная для меня возможность (т. Е. Лучшая эффективность выполнения, наименьший требуемый код, наибольшая простота и максимальная совместимость с существующими функциями / библиотеками / средами) для хранения различных значений атрибутов для каждого объекта в зависимости от контекста, зная, что контексты не могут бытьпредопределено, будет легионом и постоянно редактируется пользователем?

Пример:

Объект - это человек (Потенциально = Работодатель / = Сотрудник)

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

Таким образом, одним из атрибутов моего объекта будет «Название против работодателя против года, который закончился»

Лучшее, что я мог сделать с моим текущимзнания сохранить все три элемента вместекак строка, которая будет значением атрибута, назначенного каждому объекту, и постоянно анализирует эту строку, чтобы иметь возможность ее использовать, но это имеет следующие (ОГРОМНЫЕ) недостатки:

(1) Неоправданно замедленное выполнение и увеличениеИспользование энергии.Использование этого контекстного атрибута лежит в основе основной функции моего предполагаемого приложения (поэтому он будет буквально использоваться 10-100 раз каждую минуту).Необходимость постоянно анализировать эту информацию, чтобы иметь возможность использовать ее, добавляет ненужную обработку, которую я бы очень хотел избежать (2) Излишние накладные расходы на кодирование.Сохранение этого контекстного атрибута в виде строки излишне сделает мне необходимым дополнительное кодирование каждый раз, когда я буду использовать эту центральную информацию (то есть очень часто).(3) Излишняя сложность и потенциальная несовместимость.Это также добавит излишнюю сложность, и, отходя от ожидаемой практики, она избежит преимуществ Базовых Данных.

Каким будет самый эффективный способ достижения поставленной цели без вышеуказанных недостатков?

1 Ответ

0 голосов
/ 02 декабря 2018

В качестве примера можно выбрать сущность Employment с атрибутами для title и yearEnded и двумя (к-одному) отношениями к Person.Одно отношение представляет employer, а другое представляет employee.

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

Обобщая, это решение рекомендовано Apple для многих-многих отношений, имеющих атрибуты (см. «Моделирование отношений на основе их семантики» в их документации ).

Будет ли это затрагивать всеИз проблем, перечисленных в вашем вопросе, я оставляю для вашего эксперимента: если вещи меняются 10-100 раз в минуту, издержки запросов на выборку и создание / обновление / удаление промежуточного (Employment) объекта могут быть хуже, чем ваша строкапредставление.

...