Как реализовать ретвит Twitter в моей базе данных

Я реализую веб-приложение, похожее на Twitter. Мне нужно реализовать действие «ретвитнуть», и один твит может быть ретвитнут одним человеком несколько раз .

У меня есть базовая таблица «твитов», в которой есть столбцы для:

Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id

(где tweet_id— первичный ключ для твитов, tweet_textсодержит текст твита, tweet_date_created— дата и время создания твита, а tweet_user_id— внешний ключ к таблице usersи идентифицирует пользователя, создавшего твит )

. ] Теперь мне интересно, как мне реализовать действие ретвита в моей базе данных.

Вариант 1

Должен ли я создать новую таблицу соединений, которая будет выглядеть так:

Retweets: tweet_id | user_id | retweet_date_retweeted

(Где tweet_id— внешний ключ к таблице tweets, user_id— внешний ключ к таблице usersи идентифицирует пользователя, ретвитнувшего твит, retweet_date_retweeted— DateTime, указывающее, когда был сделан ретвит.)

плюсы:Пустых столбцов не будет, при повторном запуске пользовательского процесса будет создана новая строка в таблице retweets.

минусы:Процесс запроса будет сложнее, нужно будет объединить две таблицы и каким-то образом отсортировать твиты по двум датам (, когда твит не ретвитят, сортировать по твиту _дате _создания, когда твит ретвитят, сортировать это ретвит _дата _ретвит ).

Вариант 2

Или я должен реализовать это в таблице tweetsкак parent_id, тогда это будет выглядеть так:

Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id | parent_id

(Где все столбцы остаются прежними, а parent_idявляется внешним ключом к той же таблице tweets. При создании твита parent_idостается пустым. Когда твит ретвитят, parent_idсодержит идентификатор исходного твита, tweet_user_idсодержит пользователя, обработавшего действие ретвита, tweet_date_createdсодержит DateTime, когда ретвит был сделан,и tweet_textостается пустым -, потому что мы не позволим пользователям изменять исходный твит при ретвите .)

плюсы:Процесс запроса намного элегантнее, так как мне не нужно объединять две таблицы.

минусы:Каждый раз, когда твит ретвитят, будут пустые ячейки. Итак, если у меня в базе данных 1000 твитов и каждый из них ретвитят 5 раз, в моей таблице tweetsбудет 5000 строк.


Какой самый эффективный способ? Лучше иметь пустые ячейки или сделать процесс запроса более чистым?

6
задан Roman Mazur 25 July 2012 в 16:31
поделиться