there is a problem with satellite data types though given how bubble processes the data.
bubble documentation tells us not to do nested searches/filters
so setting up a data structure like
contact
contact_detail
contact_preference
is non sensical because it forces the user to apply either an advanced filter or a reciprocal data lookup, or duplication of key data onto multiple data levels to get performant searches.
ie
search contacts (where phone is empty) filtered to contact_details bio is empty
you could do that several ways
store the bio on the contact data - but bio is potentially a heavy field, and the user may search empty bios very infrequently
create a boolean on the contact for empty bio - then requires a bulk update and a workflow to update this second field
search the contact_details for empty bios and return a list of contact_detail>contacts and then apply the filters on the contact data level to filter the contacts for phone
search the contacts filtered by phone, then apply adv filter to filter contact_detail for bio empty
so satellite data types have their own issues in that they complicate searches considerably and potentially cost a lot more for workload usage. on top of that all the data for all the satellites are returned not just the data used in the logic.
whilst I use satellites in my data quite a lot my understanding up until yesterday that they would be “look-through” data in that I could add references to nested data and only the called field would be returned but that is not correct.
bubble returns all the fields for all the nested levels, so if you do something like
search of contacts with empty phones, filtered to detail has empty bio and where the list of social_accounts contains facebook then bubble will return the contact, the detail and all the social accounts along with all the fields on all of those data types… making satellite data actually more intensive on WU costs than a simple flat data structure anytime that you do a nested search like this.
not only does a satellite data structure force you to do a lot of filters on large lists but it also forces you to filter at multiple levels - further increasing the WU cost.
in short there is no one way that is the clear or correct way to setup the data structures to optimize for WU costs. instead there’s a list of options and the end user (often not a developer) is expected to be able to pick the best one for their particular situation. And more importantly, expected to be able to see far enough into the future to foresee all possible interactions of all fields they are organizing into their database structures. Else they are locked into moving the fields later and running expensive bulk updates, or doing expensive data searches.
It seems there are several really critical and fundamental issues with bubble data structure, searches and WU costs and optimization methods and no real solution or best practice for any of it.