Основные данные: обратная связь с несколькими объектами? - PullRequest
7 голосов
/ 25 января 2010

Допустим, в моей модели данных есть 4 объекта: человек, автомобиль, питомец и фотография. Я хотел бы, чтобы отношения между Person Car и Pet были связаны с объектом Photo, в котором я хотел бы, чтобы каждая из этих вещей содержала фотографию этого объекта. Пока проблем нет. Хотя, где это становится сложным, это обратные отношения, в которых объект фотографии хотел бы указать на прикрепленный элемент. Я бы предпочел либо вообще не иметь обратной связи, поэтому единственным атрибутом в Photo будет UIImage или, может быть, одно обратное отношение attachItem. Если бы я это сделал, я мог бы выбрать только один из этих предметов, чтобы прикрепить его к моим отношениям.

Было бы лучше оставить это как однонаправленные отношения? Может быть, я мог бы сделать абстрактную сущность с именем «AttachableItem» и сделать из нее «Person Car» и «Pet», а затем сделать мои обратные отношения связанными с AttachableItem. Я не уверен, какой путь будет лучшим.

1 Ответ

12 голосов
/ 25 января 2010

Я бы сделал Photo абстрактным объектом и создал бы объекты PersonPhoto, CarPhoto и PetPhoto, каждый из которых в качестве родительского объекта использовал бы Photo.

Person, Car и Pet будут иметь отношения один к одному с PersonPhoto, CarPhoto и PetPhoto соответственно. Тогда у PersonPhoto, CarPhoto и PetPhoto может быть одно обратное отношение «один к одному» с Person, Car и Pet соответственно.

Объект Photo по-прежнему будет иметь единственный атрибут. Вы можете хранить изображения в файлах в каталоге документов вашего приложения и сохранить имя файла в качестве этого атрибута. Такой подход рекомендуется в этом ответе . Кроме того, вы можете хранить изображения непосредственно в Базовых данных в качестве преобразуемого атрибута, преобразовав их в NSData, используя UIImagePNGRepresentation() или UIImageJPEGRepresentation().

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