Алексей: вы в своём вопросе абсолютно ничего не указали что слышали про vacuum full, сами виноваты. А "ещё какие-то варианты" в огромном количестве приведены в ссылке, которую я дал. Вам даже лень было дочитать ответ.
Антон Дышкант: да, вы уже спрашиваете про связи в приложении. Что модель - это строчка в БД это я сильно утрировал. Модель это объект с данными для впшего придожения, она должна быть именно такой какой её хочет приложение, а не БД. Поэтому если у вас есть связи то да, удобно будет инициализировать объект не просто id, а сразу готовым объектом другого класса. Эту операцию можно проводить когда вы достаете объект из базы или в конструкторе, если создаёте новый. А на сохранении производите обратную операцию - сохраняете только id связи. Поэтому от удобства сохранения $this целиком в базу поидется отказаться, расписывайте все поля вручную. Когда-нибудь придется это сделать для каких-нибудь преобразований.
Andrey: java использовать не надо точно, javascript тоже нежелательно, если хотите выйти в поиск. Если костыли вам кажутся сложными и невозможными в исполнении, то не используйте xhr, а если движок весь на нём работает, то не используйте cms. А если уже нельзя не использовать cms, то сидите в луже. Других вариантов нет, придётся работать.
vitovt: "большой таблице - бред" - вам кампутер жалко? Мне, например, себя жалко, когда чтобы сделать обычный "<" и\мне приходится выбирать цену, валюту, джойнить по валюте вторую таблицу, перемножать и только после этого сравнивать. Курс меняется раз в день, а запросов у вас может быть тысячи в секунду. Логично просчитать новые цены 1 раз в день, а не тысячи раз в секунду считать одно и то же.