So implementieren Sie eine Twitter-Retweet-Aktion in meiner Datenbank
Ich implementiere eine Webanwendung ähnlich wie Twitter. Ich muss eine Retweet-Aktion implementieren undEin Tweet kann von einer Person mehrmals retweetet werden.
Ich habe eine einfache 'Tweets'-Tabelle mit Spalten für:
Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id
(wohertweet_id
ist der Primärschlüssel für Tweets,tweet_text
enthält tweettext,tweet_date_created
ist die DateTime, zu der der Tweet erstellt wurde undtweet_user_id
ist der Fremdschlüssel zuusers
Tabelle und identifiziert den Benutzer, der den Tweet erstellt hat)
Jetzt frage ich mich, wie ich die Retweet-Aktion in meiner Datenbank implementieren soll.
Option 1Soll ich eine neue Join-Tabelle erstellen, die so aussehen würde:
Retweets: tweet_id | user_id | retweet_date_retweeted
(Wohertweet_id
ist ein Fremdschlüssel fürtweets
Tabelle,user_id
ist ein Fremdschlüssel fürusers
Tabelle und identifiziert Benutzer, der den Tweet retweetet hat,retweet_date_retweeted
ist eine DateTime, die angibt, wann der Retweet gemacht wurde.)
Profis: Es werden keine leeren Spalten angezeigt, wenn der Benutzer eine neue Zeile ausführtretweets
Tabelle wird erstellt.
Nachteile: Der Abfrageprozess wird schwieriger, es müssen zwei Tabellen verknüpft und die Tweets nach zwei Daten sortiert werden (wenn Tweet nicht retweetet ist, sortieren Sie es nach tweet_date_created, wenn Tweet retweetet ist, sortieren Sie es nach retweet_date_retweeted).
Option 2Oder sollte ich es in der implementierentweets
Tisch alsparent_id
dann sieht es so aus:
Tweets: tweet_id | tweet_text | tweet_date_created | tweet_user_id | Eltern ID
(Wo alle Spalten gleich bleiben undparent_id
ist ein Fremdschlüssel für das gleichetweets
Tabelle. Wenn Tweet erstellt wird,parent_id
bleibt leer. Wenn Tweet retweetet wird,parent_id
enthält herkunftstweet id,tweet_user_id
enthält Benutzer, der die Retweet-Aktion verarbeitet hat,tweet_date_created
enthält die DateTime, zu der das Retweeten durchgeführt wurde, undtweet_text
bleibt leer - weilWir werden nicht zulassen, dass Benutzer den ursprünglichen Tweet beim Retweeten ändern.)
Profis: Der Abfrageprozess ist viel eleganter, da ich nicht zwei Tabellen verknüpfen muss.
Nachteile: Jedes Mal, wenn ein Tweet retweetet wird, werden leere Zellen angezeigt. Wenn ich also 1 000 Tweets in meiner Datenbank habe und jedes dieser Tweets fünfmal retweetet wird, enthält meine Datenbank 5 000 Zeilentweets
Tabelle.
Welches ist der effizienteste Weg? Ist es besser, leere Zellen zu haben oder den Abfrageprozess sauberer zu gestalten?