sql >> Databáze >  >> RDS >> Mysql

Návrh databáze pro komentáře a odpovědi

Můžete použít pouze jednu tabulku, která obsahuje pole ParentID. Pokud záznam nemá žádnou hodnotu, je to komentář, jinak je to odpověď (buď na komentář nebo odpověď).

Můžete se zeptat na záznam ParentID záznamu (zkontrolujte je to ParentID), abyste zjistili, zda je tato odpověď na komentář nebo odpověď.

Upravit :Výše ​​uvedené je poměrně praktické řešení. Chcete-li však přejít na normalizovanou verzi, stále ponechte jednu tabulku Komentáře (bez ParentID) a vytvořte tabulku ReplyTo, která má CommentID a ResponseID, což jsou obě ID záznamů v tabulce Komentáře.

Pomocí tohoto nápadu následující SQL zobrazí komentáře a „odpověď“ na každý komentář pro každou odpověď, která má komentář:

select c.comment, r.comment as reply
from comment as c, comment as r, replyto as rt
where c.ID = rt.CommentID
and r.ID = rt.ReplyID

Jak zdůrazňuje Dimitrii, nezobrazí komentáře bez odpovědi – k tomu potřebujete vnější spojovací dotaz (netestoval syntaxi):

SELECT c.comment, r.comment as reply,
from Comment c 
  left outer join Comment r on c.id = r.id  
  left outer join replyto rt on rt.responseid = r.id



  1. Zrušte vnoření více polí paralelně

  2. Kontejner Spring Docker nemá přístup ke kontejneru Postgres Docker

  3. Django + Postgres + Velké časové řady

  4. PHP nemůže za určitých okolností vyřešit název kontejneru mysql