Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ein Tisch vs. mehrere Tische

Es kann echte Gründe dafür geben, eine einzelne Kommentartabelle zu wollen/benötigen. Beispielsweise wäre es einfacher, alle Kommentare eines bestimmten Benutzers anzuzeigen. Außerdem wäre das Durchsuchen aller Kommentare einfacher (legen Sie einen FTS-Index in die eine Tabelle, und Sie sind fertig).

Wenn es andererseits keinen zwingenden Grund gibt, die Kommentare in einer einzigen Tabelle zu halten, gibt es eine mögliche dritte (und ziemlich offensichtliche) Lösung.

Erstellen Sie für jedes Element (Beitrag, Ereignis, Datei, Dokument) eine separate Kommentartabelle. Die RI-Beziehungen wären in dieser Situation sehr einfach zu definieren und zu beschreiben. Auch wenn Sie sehr oft Ad-hoc-Abfragen eingeben, könnte es einfacher werden. Zum Beispiel

 select * from documents d left join doc_comments c 
                           on d.id = c.docid 
                           where d.id=42;

Nichts davon ist möglicherweise relevant oder wichtig für Ihre Situation, aber es könnte eine Überlegung wert sein.

Ein zusätzlicher zufälliger Gedanke:Beide Lösungen im OP haben das „Gefühl“, dass sie eine Viele-zu-Viele-Beziehung definieren (z. B. kann ein Kommentar zu mehreren Elementen gehören). Angenommen, dies ist nicht die gewünschte Situation, kann es mit dem entsprechenden eindeutigen Index verhindert werden, ... aber immer noch ... es hat dieses anfängliche Aussehen, das so aussieht, als ob es zu einer möglichen Verwechslung führen könnte.