Это фундаментальный вопрос на уровне начинающих, который не будет коротким. Это характерно для Backendless.Двунаправленные отношения в бездействии - Работа с очень взаимосвязанными данными
У меня есть ряд сценариев, которые я хотел бы иметь возможность обратиться, поскольку я работаю с небольшим набором таблиц, которые все взаимосвязаны в какой-то форме и их нужно исследовать с разных сторон.
Основным примером может быть нечто вроде PersonTable и AddressTable. PersonTable, содержащий список людей, с их lastName, firstName и т. Д. AddressTable, содержащий адреса и их различные атрибуты streetName, houseNumber и т. Д.
Предположим, я хочу предоставить пользователям два разных вида в основной навигации и разрешить им для дальнейшего расширения.
View1: Вы нажимаете «Люди», вы получаете список людей из PersonTable. Этот список появляется во вторичном навигационном окне. Нажатие на отдельное лицо предоставит вам адрес/адреса, связанные с этим человеком.
Однако, я также хочу, чтобы быть в состоянии сделать это в обратном порядке:
View2: Вы нажимаете кнопку «Адрес», вы получите список адресов из AddressTable. Этот список появляется во вторичном навигационном окне. Нажатие на отдельный адрес предоставит вам человека/людей, связанных с этим адресом.
Таким образом, с помощью однонаправленного подхода были бы отношения от PeopleTable до AddressTable. Это отлично и хорошо для View 1. Один запрос предоставит данные для дополнительной навигации, и результаты этого запроса могут включать данные отношений, необходимые для детализации.
Однако, если бы я хотел поддержать View 2, мне пришлось бы выполнить два запроса, учитывая направление отношений и где я начинаю.
Если вы масштабируете это до большего набора данных с большим количеством таблиц и полей, моя озабоченность может стать более очевидной. Потому что я хочу фактически предоставить некоторые данные от родителя отношения в начальном создании вторичного навигационного элемента. Таким образом, это означает исходный запрос этой таблицы для перечисления элементов и запрос для каждого отдельного элемента (для получения данных, которые мне нужны из его родителя в отношении), чтобы заполнить данные, указанные в исходном списке. (Тогда нажатие на элемент обеспечит еще более подробную информацию). Очевидно, что эта связь может быть отменена, и тогда я буду извлекать дочерние данные, а не родительские данные, но тогда, когда я захочу перейти к данным с другого направления (другой вид), я снова попаду в ту же ситуацию.
TL; DR: Мне нужно иметь возможность перемещать таблицы практически в любом направлении и сверлить данные, пытаясь минимизировать количество запросов, необходимых для этого случая. Это случай, когда требуется большое количество отношений?
В самом начале вопроса: Я понимаю, что, хотя Backendless поддерживает их, двунаправленные отношения, как правило, неодобрились (по крайней мере, в мире SQL).
Итак, действительно, что такое лучшая практика? Это просто логично «Создать отношения, когда они помогают вам сократить количество запросов»?
Автопоставка не была моей задачей. Я заинтересован в отношении записи записей в таблицах. Кажется более эффективным иметь поле в каждой таблице, содержащей связанные записи в других таблицах. Будучи тем, что я мог вытащить непосредственно из конкретной адресной записи точные идентификаторы связанных записей Person, вместо того, чтобы запрашивать весь PersonTable, чтобы найти все записи с отношением к этой конкретной записи адреса. Похоже, что более низкий порядок сложности заключается в поддержании указателей на связанные записи, и я понимаю, что это то, к чему относятся отношения в Backendless. –
Вам не нужно запрашивать отношения, если вы автоматически загружаете данные – Wain