階層フィルタリングを使用してデータをクエリできる機能を構築することを検討しています。私はそれをどのように進めるかについていくつかのアイデアを持っていますが、より効率的かもしれない推奨事項や提案があるかどうか疑問に思っていました。
例として、ユーザーが仕事を探していると想像してください。職種は以下のとおりです。
1: Scotland
2: --- West Central
3: ------ Glasgow
4: ------ Etc
5: --- North East
6: ------ Ayrshire
7: ------ Etc
ユーザーは、特定の地域(グラスゴーなど)またはより広い地域(スコットランドなど)で検索できます。
私が検討している2つのアプローチは次のとおりです。
- 各レコードのデータベースに子を記録し(つまり、猫1の子フィールドに2、3、4が含まれる)、そのレコードに対して。を使用してクエリを実行します
SELECT * FROM Jobs WHERE Category IN Areas.childrenField
。 - 再帰関数を使用して、選択した領域に関連するすべての結果を検索します。
私が両方から見る問題は次のとおりです。
- このデータをデータベースに保持することは、構造に対するすべての変更を追跡する必要があることを意味します。
- 再帰は遅く、非効率的です。
最善のアプローチに関するアイデア、提案、または推奨事項はありますか?MSSQL 2005 DBでC#ASP.NETを使用しています。