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 1

Soll 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 2

Oder sollte ich es in der implementierentweets Tisch alsparent_iddann 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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage