про денормализацию

Василий М.

Новичок
короче говоря, на сайте есть пользователи и есть их комментарии
комментарии вытягиваются из базы с left join на таблицу users

если трем пользователя, то соответственно не понятно кто оставил комментарий

что делать - не знаю. как обычно такое реализуют? рассматриваю следующий варианты:

1. денормализация. записывать в таблицу комментариев информацию о пользователе, типа его имя. тогда не понятно что делать, если пользователь меняет свое имя - изменять его и в таблице комментов или нет?

2. не тереть пользователей вообще, просто блокировать

что скажете?
 

Фанат

oncle terrible
Команда форума
непонятно, зачем лефт джойн
непонятно, почему нельзя написать "аноним" или "пользователь удален"
 

fixxxer

К.О.
Партнер клуба
если не устраивает вариант Фаната, можно не удалять пользователей, например (а ставить флажок deleted), ну то есть твой вариант 2

мне это кажется вполне уместным
 

MiksIr

miksir@home:~$
Если денормализовать, то сразу таким образом, что бы отказаться от джойна вообще на юзеров вообще. При удалении/переименовании юзера - обновлять, конечно, тригером или на уровне приложения.
 

Фанат

oncle terrible
Команда форума
не нужна здесь никакая денормализация.
здесь здравый смысл нужен, при планировании интерфейса.
если пользователь удаляется, то ЯВНО не для того, чтобы потом вечно светиться в комментариях.
если пользователя удаляет админ, продолжать показывать его комменты скорее всего нецелесообразно.
 

Василий М.

Новичок
непонятно, зачем лефт джойн
один запрос вытягивает инфу о комментариях и о пользователе. или ты предлагаешь сначала комментарий получить, а потом инфу о пользователе?

непонятно, почему нельзя написать "аноним" или "пользователь удален"
можно так написать, но вопрос именно в том, что бы сохранить информацию об авторе
например, на этом форуме старые темы есть, у них пользователь представлен в виде обычного текста, а не как вотт сейчас - в виде гиперссылки. т.е. я так понимаю инфа об авторе поста где-то сохранена, но аккаунта пользователя не существует.

fixxxer
понятно..

Если денормализовать, то сразу таким образом, что бы отказаться от джойна вообще на юзеров вообще. При удалении/переименовании юзера - обновлять, конечно, тригером или на уровне приложения.
все 100500 его комментариев? хм...
 

Василий М.

Новичок
если пользователь удаляется, то ЯВНО не для того, чтобы потом вечно светиться в комментариях.
тем не менее многие площадки так устроены. например, ЖЖ. пользователя нет, а комментарий есть. тут проблемы чернокожих админа не волнуют - мне выгоднее содержать базу полноценных диалогов, нежели позволять пользователю при самоуничтожении тереть и его контент
 

MiksIr

miksir@home:~$
А не нужно абстракций про 100500. Все его 3000 - ну да, а что. А думаете удаление этих же комменариев по внешнему ключу хоть чем-то легче? Или ежесекундный джон легче, чем раз в неделю кого-то удалить?
Опять же, смотреть нужно по ситуации. В конце концов можно и середину найти - денормализовать на удалении, т.е. юзера удалять и только для него - вместо удалений комментариев - ставить туда его имя.
Хотя все же нужно задать себе вопрос - а зачем вообще я хочу "удалять", а не "блокировать".
 
Сверху