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ụctitle
: Tiêu đề của danh mụcparent_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óid
làp
Ok, vậy danh mục ở ví dụ trên bạn có thể lưu trữ trong database như sau:
id | title | parent_id |
1 | Thể thao | 0 |
2 | Thể thao quốc tế | 1 |
3 | Thể thao trong nước | 1 |
4 | Bóng đá Anh | 1 |
5 | Giáo dục | 0 |
6 | Khuyến học | 5 |
7 | Du học | 5 |
Bạn quan sát bên và tập trung vào trường parent_id
. Ví dụ Khuyến học
và Du 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.
*** Bạn muốn học Php Mysql để đi làm nhưng cảm thấy bối rối, bế tắc không biết bắt đầu từ đâu? Hãy khám phá combo backend “PHP Master” và “Laravel Pro” tại unitop.vn , đây là chương trình giúp hàng ngàn người có công việc từ 8-30tr/tháng.
Phan Văn Cương founder unitop.vn