Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Как хранить лайки в базе, вместе или раздельно?

#mysql #база_данных


Имею ввиду, если есть посты c лайками, комментарии с лайками, и допустим еще фотографии,
то как их хранить - в одной таблице или раздельно?

Например, одну общую таблицу с полем какой тип контента залайкали

id --- type ------ id_content ---- who_liked  
1 ---- post ----------100--------------123  
2 ---- post ----------101--------------254  
3 ---- post ----------102--------------254  
4 ---- photo ---------100--------------123  
5 ---- comment -------100--------------123


Или сделать разные таблицы?
post_likes,
photo_likes,
comment_likes
    


Ответы

Ответ 1



Идея не совсем такая Вам не нужно указывать тип, Вам нужно создавать связь Foreign Key с записью к которой собственно и относится. Создавать нужно именно одну таблицу. Это рекомендуется по тому что это более расширяемый вариант, Вам не нужно удалять или создавать новые таблицы если появится необходимость в новых объектах которые можно пометить лайком. Что не так с Foreign Key? Все прекрасно до тех пор пока мы не понимаем что есть небольшая проблема. Foreign Key может ссылаться только на одну таблицу, как же нам быть если таблицы разные? Создаем вторую таблицу в которой храним PK ID Имя таблицы к которой прикреплены лайки То есть в итоге у нас получится таблица id Name 1 Photo 2 Post и теперь нам нужно только хранить Foreign Key на нужную запись из этой таблицы. А затем умелое использование SQL поможет нам, подставлять значения из этой таблицы в наш SQL запрос. То есть первым запросом мы получаем значение Foreign Key, и допустим оно равно Post. Затем подставляем это значения во второй SQL запрос в котором ищем уже по этой таблице id, который хранился в нашей первой таблице с лайками. В данном случае плюс Foreign Key не в целостности данных, по тому что здесь мы ее как раз совсем и не добьемся, а в простоте и расширяемости реализации. И да вам нужно будет всегда следить за тем что бы при удалении объекта, также и удалялись лайки.

Комментариев нет:

Отправить комментарий