Независимо от того, используете ли вы автоинкрементное поле в качестве первичного или составного ключа с использованием post_id и user_id, в основном получится следующее:
Если у вас есть дочерние таблицы в вашей таблице posts
, вы когда-нибудь захотите запросить эти таблицы, используя user-id
сообщения?
Например, если другим пользователям разрешено комментировать сообщение, и у вас есть таблица comments
, видите ли вы причины, по которым вам нужно получать данные из таблицы комментариев, где вы запрашиваете user_id
из оригинальный пост?
Если это так, то при использовании автоинкрементного поля вам всегда придется присоединяться к родительской таблице (posts
), чтобы запрашивать данные в вашей дочерней таблице на основе user_id
:
SELECT comments.*
FROM comments
INNER JOIN posts ON
posts.post_id=comments.post_id
WHERE posts.user_id='scott.korin'
Это может привести к снижению производительности, особенно если вы ожидаете миллионы строк данных в таблице posts
.
Если у вас нет необходимости запрашивать дочерние таблицы с использованием поля user_id
, я бы использовал автоинкрементное post_id
. Просто убедитесь, что вы определили поле достаточно большим. (если вы исключаете миллионы записей, вы не хотите застрять только с несколькими миллионами записей, потому что вы сделали поле post_id слишком маленьким) .