I am writing a simple Django app that stores and displays user objects with lots of attributes.
The user may have up to three hundred attributes.
These attributes however, can be grouped off.
For example, we can have one group for "Favourite Dish" and the attributes under that are cost, flavour, cuisine etc. and another group for "Favourite Dog" and under that are cost, flavour, breed etc.
I know that in normal circumstances, you would compartmentalise the data and store each group of attributes in its own table, however this app will display and query all of the data, most of the time.
For example: the main page of this app will have a search box and users should be able to search any of the attributes in the entire model. This would involve a lot of joins if done the "usual" way, but would involve less joins if I just had a table of three hundred columns.
I have considered using NoSQL but there is other data that fits a relational schema much better.
What is the best practice for this?