2017-05-01 2 views
0

Ich baue eine Imageboard/Forum-Engine. von Entwurf hat jeder Thread/Post in einem Sub-Forum eine sequenzielle ID, wie Github Fragen, wo jede Ausgabe ID an ihn gebunden ist Repository ist:Mehrere dissoziierte sequentielle IDs

Wenn auf Spiele Sub-Forum einen neuen Thread erstellen, Ihr Gewinde würde ID 1, wenn jemand antworten, seine Post (Antwort) ID wäre 2 und so weiter ...

+----+--------+------------+ 
| id | parent | board | 
+----+--------+------------+ 
| 1 | null | games  | 
| 2 | null | games  | 
| 3 | 1  | games  | 
| 1 | null | music  | 
| 1 | null | television | 
| 2 | 1  | music  | 
+----+--------+------------+ 

ich habe einige Implementierungen gesehen, dass für jeden neuen Unter eine neue Tabelle erstellt Forum, aber ich mag diesen Ansatz nicht, weil ich alle Unterforen in Beratung kennen muss, um eine Abfrage zu machen.

Gibt es einen "besten" Ansatz, etwas, das Github mit Repos Problemen macht?

PS: Ich werde Postgresql

+0

Sollte der zweite Datensatz keinen "Eltern" -Wert von "1" haben? – toonice

+0

Wenn Sie den Thread starten, erstellen Sie eine neue 'threadID' und geben Sie allen Nachrichten, die zu diesem Thread gehören, diese ID. Geben Sie außerdem jeder Nachricht innerhalb des Threads (einschließlich der ersten) eine inkrementierende 'messageID'. – toonice

+0

Kann eine Antwort auch der Beginn eines Unterfadens sein? – toonice

Antwort

0

verwenden, wenn Sie den Thread starten, eine neue threadID erstellen und alle Nachrichten geben diese ID auf diesen Thread gehört. Geben Sie außerdem jeder Nachricht innerhalb des Threads (einschließlich der ersten) eine Inkrementierung messageID. Zum Beispiel ...

+----------+-----------+------------+ 
| threadID | messageID | board  | 
+----------+-----------+------------+ 
| 1  | 1   | games  | 
| 1  | 2   | games  | 
| 1  | 3   | games  | 
| 2  | 1   | music  | 
| 2  | 2   | music  | 
| 1  | 4   | games  | 
| 3  | 1   | television | 
+----------+-----------+------------+ 

Wenn ein neuer Thread beginnen, stellen threadID zu MAX(threadID) + 1 und eingestellt messageID der willkürlichen Wert von 1. Wenn Sie einen Thread fortsetzen, setzen Sie threadID auf den vorhandenen Wert threadID des Threads und messageID auf MAX(messageID) + 1.

Wenn Sie irgendwelche Fragen oder Kommentare haben, dann zögern Sie nicht, einen Kommentar entsprechend zu posten.

+0

Aber wie kann ich die threadID Autoincrement an seine Platine gebunden werden? – allanj