Мое приложение поставляется с обширной моделью данных, созданной в Core Data. По мере роста модели я нахожу, что создаю множество необязательных отношений, и это выглядит более запутанным и раздутым, чем мне кажется. Есть ли правильный способ уменьшить количество отношений?
В общем, основной движущей силой многочисленных отношений является то, что у меня есть много сущностей, которые требуют определенных свойств, в зависимости от морфологии сущностей. Я набросал гипотетический пример для создания некоторого контекста. Представьте себе, в приложении пользователь может создавать животных. Каждое животное имеет некоторые общие свойства, но в зависимости от того, с каким животным мы имеем дело, существует также ряд специфических свойств. Мой нынешний подход приведет к модели, в которой у животного сущности есть несколько взаимно-однозначных отношений с указанными сущностями свойства, как в модели ниже.
Однако, ясно, что число отношений легко выходит из-под контроля, если вы хотите вырастить эту модель . Кроме того, ничто не мешает текущему животному ошибочно получить более одной указанной сущности свойства. Я подумываю о переходе на альтернативу, где я удаляю взаимосвязь базовых данных и использую UID, чтобы сопоставить животное со специфическими свойствами, как показано ниже . Сущность животного получает атрибут «selectedProps», в котором я храню UID, который ссылается на один из указанных объектов «Property », каждый из которых получает атрибут UID.
Насколько я могу наблюдать, это имеет следующие недостатки и преимущества
Downsides:
- Требуются некоторые накладные расходы, которые обычно обрабатываются Core Data (например, каскадное удаление),
- Выборка будет немного медленнее, но для каждого животного придется выбирать только одну указанную сущность свойства, поэтому я думаю, что это не должно быть проблемой.
Преимущества:
- Сократите постоянно растущее число дополнительных связей в моем приложении и сэкономьте на хранении, поскольку пользователь создает все больше и больше животных.
- У животного явно есть только одно заданное свойство.
- более простая миграция; при представлении новых животных не нужно создавать никаких отношений, просто новая сущность.
Мой вопрос: я что-то упускаю? Я совершаю ужасную ошибку или, может быть, есть лучшая альтернатива?
Любая критика комментариев будет принята с благодарностью.
Ps. Мне известно, что Базовые данные допускают родительские / дочерние объекты, но, насколько я понимаю, с хранилищем sqlite за ним, каждый атрибут указанной сущности для каждого животного окажется в одной таблице. Это кажется крайне нежелательным, учитывая, что в моем случае у каждого животного есть список специфических свойств, и в будущем число животных должно возрасти до больших чисел.