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

Model listy sąsiedztwa a model zestawu zagnieżdżonego dla danych hierarchicznych MySQL?

Model zestawu zagnieżdżonego nie jest obecnie powszechnie stosowany w bazach danych, ponieważ jest bardziej złożony niż model listy adiacency, biorąc pod uwagę fakt, że wymaga zarządzania dwoma „wskaźnikami” zamiast jednym. W rzeczywistości model zestawu zagnieżdżonego został wprowadzony do baz danych, gdy wykonanie zapytań rekurencyjnych, które przeszło hierarchię, było złożone lub niemożliwe.

Od 1999 roku standardowy SQL zawiera tak zwane Recursive Common Table Expressions lub Recursive CTE, które upraszczają (i standaryzują!) tworzenie zapytań przechodzących przez ścieżki rekurencyjne w hierarchii z dowolną liczba poziomów.

Wszystkie główne systemy DBMS mają teraz tę funkcję, ze szczególnym wyjątkiem:MySQL. Ale w MySQL możesz rozwiązać ten problem za pomocą procedur składowanych. Zobacz na przykład ten post na StackOverflow lub ten post na dba.stackexchange .

Podsumowując, oto moje rady:

  1. Jeśli nadal możesz zdecydować, którego DBMS użyjesz, rozważ zdecydowanie kilka alternatyw:na przykład, jeśli chcesz pozostać przy bazie danych o otwartym kodzie źródłowym, użyj PostgreSQL , użyj modelu listy adiacencji i skorzystaj z rekurencyjnych CTE dla swoich zapytań.
  2. Jeśli nie możesz zmienić DBMS, nadal powinieneś skorzystać z modelu listy adiacency i użyć procedur składowanych, jak te cytowane w odnośnikach.

AKTUALIZUJ

Ta sytuacja zmienia się wraz z MySQL 8, który jest obecnie w fazie rozwoju i który zintegruje rekurencyjne CTE , dzięki czemu od tej wersji Model listy Adiacency będzie prostszy w użyciu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mysql może szybciej wstawiać miliony rekordów?

  2. Błąd MySQL składnia 1064, ale wszystko wydaje się w porządku

  3. Znajdowanie dokładnej wartości z ciągu oddzielonego przecinkami w PHP MySQL

  4. mysql za dużo indeksów?

  5. Jak używać orkiestrowego/tenanti w Laravel 5 do budowania aplikacji wielodostępnej z wieloma bazami danych?