¿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 1Deberí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?