Tôi đã triển khai nó bằng cách sử dụng hai cột. Tôi đơn giản hóa nó ở đây một chút, vì tôi phải giữ tên thẻ trong một trường / bảng riêng biệt vì tôi phải bản địa hóa nó cho các ngôn ngữ khác nhau:
- thẻ
- đường dẫn
Hãy xem các hàng này chẳng hạn:
tag path
--- ----
database database/
mysql database/mysql/
mysql4 database/mysql/mysql4/
mysql4-1 database/mysql/mysql4-1/
oracle database/oracle/
sqlserver database/sqlserver/
sqlserver2005 database/sqlserver/sqlserver2005/
sqlserver2005 database/sqlserver/sqlserver2008/
vv
Sử dụng like
trên trường đường dẫn, bạn có thể dễ dàng nhận được tất cả các hàng thẻ cần thiết:
SELECT * FROM tags WHERE path LIKE 'database/%'
Có một số chi tiết triển khai như khi bạn di chuyển một nút trong hệ thống phân cấp, bạn cũng phải thay đổi tất cả các nút con, v.v., nhưng không khó.
Ngoài ra, hãy đảm bảo rằng độ dài của đường dẫn của bạn đủ dài - trong trường hợp của tôi, tôi không sử dụng tên thẻ cho đường dẫn mà sử dụng một trường khác để đảm bảo rằng tôi không nhận được đường dẫn quá dài.