It'd best if you had a filter that would fetch all the records any of the view could ever want and then filter them using custom proxy models.
I'm going to go check the Qt source myself to see how it's actually implemented but is calling the select() method on an unfiltered (not using the setFilter() method) QSqlTableModel for a huge sql table (let's say with a lot of columns and millions of rows) a massive memory drain? Or how does Qt handle it's returned cursor set?

Ideally it would be great to represent each table as a model so that all parts of the program would receive updates if a different part updated the model. But I guess calling setFilter() and then select() every once in a while isn't that bad either.