Wpis z mikrobloga

@KolacjaZeSniadaniem: To rozwiązanie jest dobre jeżeli chcesz trzymać tylko jeden poziom odpowiedzi podobnie jak na wykopie. Weź na przykład to:

Dodaje komentarz o ID 1 Ty na niego odpowiadasz komentarzem o ID 2. Ja odpowiadam na Twój komentarz komentarzem nr 3.

Posiadasz teraz pary (id, id_rodzica):

(1, null)

(2, 1)

(3, 2)

Napisz teraz zapytanie które pobierze komentarz nr 1 wraz z jego dziećmi... Myślę, że to zobrazuje Ci ewentualny problem
@KolacjaZeSniadaniem: Drzewo jest rozwiązaniem tego problemu. Mógłbyś również przyjąć dla mojego przykładu:

(1, null)

(2, 1)

(3, 1)

a data wiersza decydowałaby o kolejności wyświetlania.

Sposób jest banalny, ale tracisz wszystkie możliwości drzewa m.in to że w rzeczywistości nie wiesz kto odpowiedział na jaki komentarz, wyszukiwanie rodziców, dzieci itd. Podobny system wydaje się być na wykopie.
@KolacjaZeSniadaniem: to co pisze @siwymilek jest znanym antywzorcem SQL (SQL Antipattern). Jednym z rozwiązań tego problemu jest tzw. Path Enumeration czyli po prostu trzymanie całej ścieżki od root_id w kolumnie tekstowej (np "1/" lub "1/4/6/") i wyciągnięcie wszystkich potomków komentarza o id=1 potrafi być tak proste jak LIKE 1/%

Trochę do poczytania:

http://www.sitepoint.com/hierarchical-data-database/

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

i dobra książka:

http://pragprog.com/book/bksqla/sql-antipatterns