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

Я реализую веб-приложение, похожее на Twitter. Мне нужно реализовать «ретвит» действие иone tweet can by retweeted by one person multiple times.

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

Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id

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

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

Option 1

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

Retweets: tweet_id | user_id | retweet_date_retweeted

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

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

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

Option 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 остается пустым - потому чтоwe will not let users change the original tweet when retweeting.)

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

cons: Там будут пустые ячейки каждый раз, когда твит ретвита. Так что, если у меня есть 1 000 твитов в моей базе данных и каждый из них ретвитится 5 раз, в моем будет 5 000 строкtweets Таблица.

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

Ответы на вопрос(2)

Ваш ответ на вопрос