Как реализовать действие 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
Таблица.
Какой самый эффективный способ? Лучше иметь пустые ячейки или сделать процесс запроса более чистым?