Dữ liệu đa cấp xuất hiện rất phổ biến trong website để lưu các đối tượng như danh mục tin tức, danh mục sản phẩm, các menu.

Ví dụ một phần danh mục bài viết của website báo Dantri.com.vn như bên dưới.

Thể thao
---- Thể thao quốc tế
---- Thể thao trong nước
---- Bóng đá Anh
Giáo dục
---- Khuyến học
---- Du học

Vậy với định hướng đi theo lập trình bạn cần phải đặt câu hỏi “Những danh mục đa cấp trên được lưu trữ bằng cách nào?”.

Thuật toán lưu trữ dữ liệu đa cấp vào database

Trên thực tế rất nhiều danh mục là con của một danh mục cha nào đó. Vậy nên cách lưu trữ cần chú ý đến đến mối quan hệ cha con giữa 2 danh mục.

Để lưu danh mục trong database cần tối thiểu các trường bên dưới:

  • id: Id của danh mục
  • title: Tiêu đề của danh mục
  • parent_id: Lưu id của phần tử cha nếu có

parent_id của phần tử k bất kỳ có giá trị như sau:

  • 0, nếu k là danh mục ở cấp 1(ngoài cùng)
  • p, nếu k là con của phần tử có idp

Ok, vậy danh mục ở ví dụ trên bạn có thể lưu trữ trong database như sau:

idtitleparent_id
1Thể thao0
2Thể thao quốc tế1
3Thể thao trong nước1
4Bóng đá Anh1
5Giáo dục0
6Khuyến học5
7Du học5

Bạn quan sát bên và tập trung vào trường parent_id. Ví dụ Khuyến họcDu học là con của Giáo dục nên giá trị parent_id của nó là 5 chính là id của Giáo dục.

Với cách lưu trữ như trên khi chúng ta muốn xuất dữ liệu lên giao diện người dùng rất đơn giản chúng ta dựa vào parent_id để biết mối quan hệ cha con giữa các đối tượng với nhau. Từ đó sẽ xuất ra kết quả theo đúng cấp bậc của nó.

Tổng kết

Qua chia sẻ trên tôi tin rằng bạn sẽ có được góc nhìn rõ hơn về cách để xử lý dữ liệu có đa cấp bật trong website như menu, danh mục sản phẩm, địa chính… tất cả chúng đều xử lý với thuật toán trên.

Ngay bây giờ bạn nên ghi chép lại thuật toán này để áp dụng nó ngay vào dự án của mình.

Xin chào, sớm hẹn gặp lại!