Я думаю, вы правы, что подход с одним столом лучше здесь. Однако одним из недостатков является то, что он плохо масштабируется - что, если вы хотите добавить ссылки или типы комментариев? С этой моделью вам придется добавить еще один столбец для каждого из них. Подход, который я видел в Rails-land, заключается в использовании полиморфной модели, которая будет выглядеть следующим образом:
id | user_id | activity_type_id | p_id | v_id | f_id | datetime
Вы видите, что я заменил видео, фото и т. Д. На activity_type_id
. Тогда будет вторая таблица с именем activity_types
:
id | name
----+-------
1 | photo
2 | video
3 | ...
Затем, когда вы создаете запись members_activity
, вы можете назначить соответствующую activity_type_id
, и если вы хотите создать новые типы действий позже, это будет относительно безболезненно, и вы сможете SELECT
конкретный вид деятельности с простым JOIN
, например:
SELECT * FROM members_activity
JOIN activity_types ON members_activity.activity_type_id = activity_types.id
WHERE activity_types.name = 'photo';