sql >> Databasteknik >  >> RDS >> Mysql

Ett bord kontra flera bord

Det kan finnas verkliga skäl för att vilja/behöver en enda kommentarstabell. Det skulle till exempel göra det enklare att se alla kommentarer från en given användare. Dessutom skulle sökningar genom alla kommentarer vara enklare (lägg ett FTS-index på den ena tabellen och du är klar).

Å andra sidan, om det inte finns en övertygande anledning att behålla kommentarerna i en enda tabell, finns det en möjlig tredje (och ganska uppenbar) lösning.

Skapa en separat kommentarstabell för varje objekt (inlägg, händelse, fil, dokument). RI-relationerna skulle vara mycket enkla att definiera och beskriva i den situationen. Dessutom, om du skriver ad-hoc-frågor väldigt ofta, kan det göra det enklare. Till exempel

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

Inget av detta kanske är relevant eller viktigt för din situation, men det kan vara värt att överväga.

Ytterligare en slumpmässig tanke:Båda lösningarna i OP har "känslan" att de definierar ett många-till-många-förhållande (t.ex. en kommentar kan tillhöra flera objekt). Förutsatt att det inte är den önskade situationen kan den förhindras med lämpligt unikt index, ... men ändå ... det har det ursprungliga utseendet, vilket verkar som om det skulle kunna leda till eventuell förvirring.



  1. MySQL:Genomsnittligt intervall mellan poster

  2. Välj de tidigaste och senaste datumen

  3. sql drar en rad för nästa eller föregående rad i en aktuell rad

  4. sql-fråga som grupperar olika objekt i hinkar