Tôi đang xem xét việc xây dựng một cơ sở cho phép truy vấn dữ liệu có lọc phân cấp. Tôi có một vài ý tưởng như thế nào tôi sẽ đi về nó, nhưng đã tự hỏi nếu có bất kỳ đề nghị hoặc đề xuất có thể hiệu quả hơn.Phương pháp tốt nhất để tìm kiếm dữ liệu phân cấp
Ví dụ: tưởng tượng rằng người dùng đang tìm kiếm một công việc. Các khu vực công việc sẽ như sau.
1: Scotland
2: --- West Central
3: ------ Glasgow
4: ------ Etc
5: --- North East
6: ------ Ayrshire
7: ------ Etc
Người dùng có thể tìm kiếm cụ thể (tức là Glasgow) hoặc ở khu vực rộng hơn (tức là Scotland).
Hai cách tiếp cận tôi đang xem xét là:
- giữ một lưu ý của trẻ em trong các cơ sở dữ liệu cho mỗi bản ghi (tức là mèo 1 sẽ có 2, 3, 4 ở trẻ em của trường) và truy vấn đối với kỷ lục mà với số
SELECT * FROM Jobs WHERE Category IN Areas.childrenField
. - Sử dụng hàm đệ quy để tìm tất cả các kết quả có liên quan đến khu vực đã chọn.
Những vấn đề tôi thấy từ cả hai đều là:
- Giữ dữ liệu này trong db sẽ có nghĩa là phải theo dõi tất cả những thay đổi cấu trúc.
- Đuổi chậm và không hiệu quả.
Bất kỳ ý tưởng, đề xuất hoặc đề xuất nào về cách tiếp cận tốt nhất? Tôi đang sử dụng C# ASP.NET với MSSQL 2005 DB.
Bạn có thể làm các truy vấn đệ quy, nếu cấu trúc bảng của bạn hỗ trợ nó: http: // msdn.microsoft.com/en-us/library/ms186243.aspx – FrustratedWithFormsDesigner
Bạn đã xem xét mô hình hóa thông tin của mình trong XML và lưu trữ nó trong một thuộc tính XML (trên bảng cơ sở dữ liệu) sao cho bạn có thể truy vấn nó bằng XQuery? – XpiritO