Jak wdrożyć akcję Twittera retweet w mojej bazie danych

Wdrażam aplikację internetową podobną do Twittera. Muszę wdrożyć akcję „retweet” ijeden tweet może być wielokrotnie przesłany przez jedną osobę.

Mam podstawową tabelę „tweety”, która zawiera kolumny dla:

Tweety: tweet_id | tweet_text | tweet_date_created | tweet_user_id

(gdzietweet_id jest kluczem podstawowym dla tweetów,tweet_text zawiera tekst tweet,tweet_date_created jest DateTime, kiedy został utworzony tweet itweet_user_id jest kluczem obcym dousers i identyfikuje użytkownika, który utworzył tweeta)

Teraz zastanawiam się, jak powinienem wdrożyć akcję retweet w mojej bazie danych.

opcja 1

Czy powinienem utworzyć nową tabelę łączenia, która wyglądałaby tak:

Retweets: tweet_id | id_użytkownika | retweet_date_retweeted

(Gdzietweet_id jest kluczem obcym dotweets stół,user_id jest kluczem obcym dousers i identyfikuje użytkownika, który podał dalej tweet,retweet_date_retweeted to DateTime, który określa, kiedy został wykonany retweet.)

plusy: Nie będzie pustych kolumn, gdy użytkownik przetwarza reteet, nowa linia wretweets tabela zostanie utworzona.

Cons: Proces zapytania będzie trudniejszy, będzie musiał połączyć dwie tabele i jakoś posortować tweety według dwóch dat (gdy tweet nie jest ponownie przesyłany, posortuj go przez tweet_date_created, gdy tweet jest ponownie przesyłany, posortuj go przez retweet_date_retweeted).

Opcja 2

Czy powinienem go zaimplementować wtweets stół jakparent_id, będzie wtedy wyglądać tak:

Tweety: tweet_id | tweet_text | tweet_date_created | tweet_user_id | ID rodzica

(Gdzie wszystkie kolumny pozostają takie same iparent_id jest kluczem obcym do tego samegotweets stół. Gdy tworzony jest tweet,parent_id pozostaje pusty. Gdy tweet jest przesyłany dalej,parent_id zawiera pochodzenie tweet id,tweet_user_id zawiera użytkownika, który przetworzył akcję retweet,tweet_date_created zawiera DateTime, kiedy zrobiono retweet, itweet_text pozostaje pusty - bonie pozwolimy użytkownikom zmieniać oryginalnego tweeta podczas ponownego wysyłania.)

plusy: Proces zapytania jest o wiele bardziej elegancki, ponieważ nie muszę łączyć dwóch stołów.

Cons: Będą puste komórki za każdym razem, gdy tweet zostanie ponownie przesłany. Jeśli więc w mojej bazie danych mam 1 000 tweetów, a każdy z nich jest przesłany ponownie 5 razy, w moim przypadku będzie 5 000 liniitweets stół.

Który sposób jest najbardziej wydajny? Czy lepiej jest mieć puste komórki lub czyścić proces zapytania?

questionAnswers(2)

yourAnswerToTheQuestion