Почему сущность нуждается в обратном? - PullRequest
2 голосов
/ 15 октября 2011

У меня есть очень простая базовая модель данных, состоящая из одной галереи, которая содержит несколько изображений. Мне кажется, что для галереи должно быть достаточно отношения «один ко многим» с Image, но если я не установлю и обратную связь из Image обратно в галерею, я получу предупреждения и ошибки компилятора. С объектно-ориентированной точки зрения мне кажется, что Image не должно знать или заботиться о том, находится ли он в галерее или любом другом ManagedObject, так почему компилятор заставляет меня создавать это обратное отношение? Наличие свойства «галерея» на изображении кажется очень неправильным.

Ответы [ 2 ]

8 голосов
/ 15 октября 2011

Core Data использует обратную связь, чтобы помочь сохранить ссылочную целостность. Когда вы изменяете отношение или удаляете объект, это резко повышает производительность. Без обратного эти же действия потенциально могут привести к полному сканированию таблицы.

По моему мнению, отсутствие обратного должно быть ошибкой, а не предупреждением. Разница может быть существенной в некоторых довольно распространенных ситуациях.

Представьте себе каскадное удаление нескольких объектов без них. Это может занять достаточно много времени, чтобы ОС считала, что ваше приложение не работает.

0 голосов
/ 16 октября 2011

Я думаю, вы не можете применять принципы oo к структурам баз данных - они не находятся в одной области. Базовые данные - это таблицы, строки и указатели между ними. Давайте посмотрим на ссылочную целостность и пример вашей галереи. Если у вас нет связи между изображением и галереей, когда вы собираетесь удалить изображение, система не будет знать, как удалить его ссылку в галерее. Вы могли бы с какой-то обоснованностью утверждать, что о таких деталях нужно позаботиться, но я думаю, что так оно и есть, и вы должны просто жить с этим. Может быть, отправить отчет об ошибке в Apple ..

...