Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Hierarchia przechowywania mysql z dużymi drzewami

Projektowanie zestawów zagnieżdżonych jest zdecydowanie trudne, gdy musisz dokonywać częstych aktualizacji drzewa. W końcu będziesz musiał zmienić numerację dużych części drzewa.

Jedną z sugestii na złagodzenie tego jest użycie liczb zmiennoprzecinkowych zamiast liczb całkowitych. Jeśli wstawisz nowy węzeł do drzewa, stosunkowo łatwo jest znaleźć kilka liczb FLOAT pomiędzy zagnieżdżonymi zestawami liczb rodzica nowego węzła. Możesz w końcu dojść do granic precyzji liczby zmiennoprzecinkowej, ale ponieważ twoje drzewo nie jest zbyt głębokie, nie stanie się to przez długi czas.

Inną techniką, o której pisałem, nazywam Tabela Zamknięcia . Ta metoda przechowywania hierarchii znacznie ułatwia wstawianie/aktualizowanie/usuwanie węzłów w dużym drzewie bez konieczności aktualizowania dużej części drzewa. I nadal możesz wysłać zapytanie do całego drzewa lub dowolnego poddrzewa w pojedynczym nierekurencyjnym zapytaniu SQL.

Aby dowiedzieć się więcej o tabeli zamknięć, zobacz:

Odpowiedz na swój komentarz:

Lista sąsiedztwa jest prosta, ma minimalną nadmiarowość i obsługuje relacje FK, czego nie obsługują zestawy zagnieżdżone. Lista sąsiedztwa obsługuje wysyłanie zapytań do całego drzewa o dowolnej głębokości, jeśli używasz zapytań rekurencyjnych . Ale MySQL nie obsługuje zapytań rekurencyjnych.

Jeśli chcesz odpytywać tylko bezpośrednie relacje rodzic-dziecko (tj. jeden poziom głębokości) lub w inny sposób odpytywać tylko drzewa o stałej głębokości, lista sąsiedztwa jest w porządku.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Konfiguracja Tomcata przy użyciu DBCP

  2. Co to jest ten operator <=> w MySQL?

  3. Osiągnij hierarchię, relacje rodzic/dziecko w skuteczny i łatwy sposób

  4. Szybko zbuduj interfejs PHP CRUD za pomocą zaawansowanego narzędzia generatora CRUD PDO

  5. Dlaczego wiersze zwracane przez wyjaśnienie nie są równe count()?