¿Cómo implementar la acción de Twitter retweet en mi base de datos?

Estoy implementando una aplicación web similar a Twitter. Necesito implementar la acción 'retweet', yUn tweet puede ser retuiteado por una persona varias veces..

Tengo una tabla de 'tweets' básica que tiene columnas para:

Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id

(dóndetweet_id es la clave principal para los tweets,tweet_text contiene texto de tweet,tweet_date_created es el DateTime cuando se creó el tweet ytweet_user_id es la clave externa parausers tabla e identifica al usuario que ha creado el tweet)

Ahora me pregunto cómo debo implementar la acción de retweet en mi base de datos.

Opción 1

Debería crear una nueva tabla de unión, que se vería así:

Retweets: tweet_id | user_id | retweet_date_retweeted

(Dóndetweet_id es una clave extranjera paratweets mesa,user_id es una clave extranjera parausers tabla e identifica al usuario que ha retuiteado el tweet,retweet_date_retweeted es un DateTime que especifica cuándo se realizó el retweet.)

pros: No habrá columnas vacías, cuando el proceso de usuario vuelva a escribir, nueva línea enretweets Se creará la tabla.

contras: El proceso de consulta será más difícil, tendrá que unir dos tablas y de alguna manera ordenar los tweets por dos fechas (cuando el tweet no está retweet, ordénelo por tweet_date_created, cuando el tweet esté retweet, ordénelo por retweet_date_retweeted).

opcion 2

¿O debería implementarlo en eltweets mesa comoparent_id, entonces se verá así:

Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id | Identificación de los padres

(Donde todas las columnas permanecen iguales yparent_id Es una clave foránea para el mismo.tweets mesa. Cuando se crea un tweet,parent_id permanece vacío. Cuando el tweet es retwiteado,parent_id contiene id de tuit de origen,tweet_user_id contiene usuario que procesó la acción de retweet,tweet_date_created contiene el DateTime cuando se realizó el retweet, ytweet_text permanece vacío - porqueNo permitiremos que los usuarios cambien el tweet original al retweetear..)

pros: El proceso de consulta es mucho más elegante, ya que no tengo que unir dos tablas.

contras: Habrá celdas vacías cada vez que se retuitea un tweet. Entonces, si tengo 1 000 tweets en mi base de datos y cada uno de ellos se retuitea 5 veces, habrá 5 000 líneas en mitweets mesa.

¿Cuál es la forma más eficiente? ¿Es mejor tener celdas vacías o tener un proceso de consulta más limpio?

Respuestas a la pregunta(2)

Su respuesta a la pregunta