На счет группировки в таблице wall не все так гладко, ибо, если запись собирает, например, все добавленные пользователем заметки за час/день, тогда вопрос, как будут выглядеть подобные посты, скажем, за вчера, при условии, что половину фотографий/заметок, указанных в записи, удалили? В таком случае, надо для каждого wall message либо проверять при выводе доступность каждого элемента, перечисленного в нем, либо наплевать, но тогда и результат соответствующий будет.
activity stream не очень важен, разве что он будет хранить дискретные записи, например, создание одной фотографии/заметки, просто для лога. Как вариант, в нем можно хранить wall_message_id, который будет указывать на сгруппированную запись, в которой это действие будет отображаться. Тогда немного облегчается процесс, о котором я писал выше, так как, например, удаляя какую-то фотографию, мы можете найти обратную запись (создание) в таблице activity stream, оттуда выбрать wall_message, из которого уже удалить ту самую фотографию из перечисленной группы.