2011-01-17 16 views
3

私はASP.NET Webサイトでタグを実装しています。いくつかのアルゴリズムを調べた後、私は1つ以上のタグ語を含む2つのデータベース列を持つように傾いています。次に全文検索を使用して、指定されたタグを持つ行を検索します。1つ以上の列に一意の単語を見つけるか?

これはすべて、1つのことを除いてはまっすぐだと思われます。ユーザが選択できる利用可能なタグのリストを生成できる必要があります。

私は、利用可能なタグのリストを作成して毎週またはそれを実行するためのC#プログラムを書くことができますが、これをより効率的に処理するためのSQLメソッドがあるかどうかは不思議でした。

また、フルテキストインデックス作成の一環として単語が抽出されることに気付くことはできません。私はその情報にアクセスする方法はないと思いますか?

+1

あなたはどのバージョンですか? SQL Server 2008では、このフルテキストインデックスのクエリが可能ですが、なぜ列ごとに複数のタグを格納していますか?これは正規化された音ではありません。特定のタグを持つすべてのエンティティを検索する必要がありますか?もしそうなら、あなたはそれをどうやって計画していましたか? 'LIKE '%tagname%''などを使用していますか? –

+0

はい、SQL Server 2008です。私はまだそれを取り除いていますが、私のケースでは、 "プラットフォーム"、 "言語"などのようなさまざまなものにタグを付けると役に立ちます。 'LIKE '%tagname%''パフォーマンスについて何も気にしなかったなら、素晴らしいアイデアになります。上記のように、私はフルテキスト検索を使用する予定です。 –

+0

私はそれがあなたの計画が何であるか不思議に思っていたことを示唆するものではありませんでした。これは私にとってかなり悪い考えです。タグの名前を変更するなどの作業は、全文検索のすべての不明瞭さや、タグ名に含めることができる特殊文字を扱っていることなど、かなり苦しいでしょう。 (あなたのタグのようなサウンドはプログラミング指向です - 私は 'C#'のようなタグがフルテキストで索引付けされる方法はわかりません) –

答えて

1

これは私が実際の質問に答えるためにこれを構造化することを選択したいかではありませんがtable valued functionsを使用して、必要な情報を取得します。

+0

私はそれを調べます。特定の列のキーワードを確認できるかどうか分かりますか?また、どのように構造化しますか?多対多テーブルを使用していますか? –

+0

@ジョナサン - 私はこれらの機能の多くの詳細を覚えていないと私はフルテキストがこのマシンで設定されていないが、リンクされたドキュメントの出力の例がありますが、列が含まれているかのように見えます。はい、多対多テーブルを使用します。 –

1

タグ付きアイテムテーブルと多対多の関係にあるタグに別のテーブルを使用しないのはなぜですか? 私はそのような何か意味:あなたはsys.dm_fts_index_keywordssys.dm_fts_index_keywords_by_documentを照会することができますSQL Server 2008では

...

--Articles 
ArticleId 
Text 

--Tags 
TagId 
Name 

--TagsToArticles 
ArticleRef 
TagRef 
+0

A.タグを追加したり削除したりするのがはるかに複雑です。B.孤立したタグを簡単に取得できます。C.クエリにはより多くの結合が必要になるため、時間がかかることがあります。この問題は何度も議論されているので、私はここでデザインを議論することには消極的です。私はさまざまなアイデアを公開していますが、既に問題を調査しており、これについて特定の方向性を傾けています。 –

+0

私の考えでは、このような非正規化とフルテキスト検索の使用は、従来の正規化スキームよりもパフォーマンスに影響を与え、コードの複雑さを増やす可能性があります。 –

関連する問題