sql >> Databasteknik >  >> RDS >> Mysql

komplexa sql-trädrader

Det finns flera alternativ för att göra hierarkisk information lättare att arbeta med i SQL:

  • Vanliga tabelluttryck (enligt SQL-2003-standarden) stödjer rekursiva SQL-frågor mot den förälder-id-typ av data som du använder. Än så länge har MySQL inte stöd för denna funktion. PostgreSQL 8.4, Microsoft SQL Server och IBM DB2 är exempel på RDBMS-varumärken som stöder CTE-syntax. Oracle har också ett egenutvecklat tillägg till SQL-syntax som stöder rekursiva frågor.

  • Inkapslade uppsättningar (vänster/höger-lösningen som @phantombrain nämner) är en lösning som beskrivs i Joe Celkos bok "Trees and Hierarchies in SQL for Smarties" och även i många artiklar och blogginlägg på internet.

  • Sökvägsuppräkning (aka Materialized Path) lagrar en sträng i varje rad i hierarkin för att notera sökvägen för förfäder till den raden. Kombinera detta med LIKE frågor för att jämföra sökvägssträngen med dess förfäders vägar och avkomlingars vägar.

  • Stängningstabell (aka Transitive Closure Relation) använder en andra tabell för att lagra alla anfäder-ättling-relationer, inte bara den omedelbara föräldern som i designen du använder. Många typer av frågor blir enklare när du har lagrat alla sökvägar.

  • Hybridlösningar finns också. Lagra till exempel det omedelbara förälder-id:t som du gör, men också roten till trädet. Nu kan du få alla andra rader i samma hierarki, hämta dem till applikationskoden och sortera ut trädet med konventionella datastrukturer.



  1. MYSQL:Uppdatera fält med sammansättning av flera fält

  2. databasdesign för frågesport med olika språk

  3. mybatis generator Kolumnnamnsmönster kan inte vara NULL eller tomt

  4. SQL Server-isoleringsnivåer:A-serien