Como implementar a ação de retweet do Twitter no meu banco de dados

Estou implementando um aplicativo da web semelhante ao Twitter. Eu preciso implementar ação 'retweet', eum tweet pode ser retweetado por uma pessoa várias vezes.

Eu tenho uma tabela básica de 'tweets' que tem colunas para:

Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id

(Ondetweet_id é a chave primária para tweets,tweet_text contém texto do tweet,tweet_date_created é o DateTime quando o tweet foi criado etweet_user_id é a chave estrangeira parausers tabela e identifica o usuário que criou o tweet)

Agora eu estou querendo saber como devo implementar a ação de retweet no meu banco de dados.

Opção 1

Devo criar uma nova tabela de junção, que ficaria assim:

Retweets: tweet_id | user_id | retweet_date_retweeted

(Ondetweet_id é uma chave estrangeira paratweets mesa,user_id é uma chave estrangeira parausers tabela e identifica o usuário que retweetou o tweet,retweet_date_retweeted é um DateTime que especifica quando o retweet foi feito.)

pros: Não haverá colunas vazias, quando o usuário reteet processo, nova linha emretweets tabela será criada.

contras: O processo de consulta será mais difícil, será necessário juntar duas tabelas e de alguma forma classificar os tweets em duas datas (quando o tweet não for retweet, classifique por tweet_date_created, quando o tweet for retweetado, classifique-o por retweet_date_retweeted).

opção 2

Ou devo implementá-lo notweets mesa comoparent_id, então ficará assim:

Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id | parent_id

(Onde todas as colunas permanecem as mesmas eparent_id é uma chave estrangeira para o mesmotweets mesa. Quando o tweet é criado,parent_id permanece vazio. Quando o tweet é retweetado,parent_id contém ID de tweet de origem,tweet_user_id contém usuário que processou a ação de retweet,tweet_date_created contém o DateTime quando o retweet foi feito etweet_text permanece vazio - porquenós não vamos permitir que os usuários alterem o tweet original quando retweetam.)

pros: O processo de consulta é muito mais elegante, já que não preciso juntar duas tabelas.

contras: Haverá células vazias toda vez que o tweet for retweetado. Então, se eu tiver 1 000 tweets no meu banco de dados e cada um deles for retweetado por 5 vezes, haverá 5 000 linhas no meutweets mesa.

Qual é o caminho mais eficiente? É melhor ter células vazias ou ter um processo de consulta mais limpo?

questionAnswers(2)

yourAnswerToTheQuestion