1

SQL Server 2005 を使用して、記事を公開するために使用される内部アプリケーションがあります。

このタスクでは、ユーザーが投稿を公開するときにタグのリストを保存する必要があります。

タグ用に別のテーブルを作成し、次のような XML 列を使用して、タグをリストする投稿の ID でタグの ID 列を更新する必要があります

TABLE_TAGS
TAG_NAME varchar, ARTICLE_IDS XML

また

ARTICLE テーブル自体に列を作成します

TABLE_ARTICLE 
COLUMN_TAGS XML //  and store tag, the post is associated with.

ユーザーが「TAG クラウド」で特定のタグをクリックすると、他のブログと同様に、そのタグでリストされた投稿を表示する必要があります。より多くのヒットやディスカッションなどを含む投稿を表示するには、ネストされた SQL ステートメントも必要になります。

SELECT ARTICLE_TITLE, ARTICLE_URL FROM
TABLE_ARTICLE 
WHERE
ARTICLE_ID = 
(SELECT ARTICLE_IDS FROM TABLE_TAGS
WHERE TAG_NAME = @TAGTOFIND)

追加、更新、または効率の観点から、どのように、そして何が最善のアプローチであるかはわかりません。

他のヒントはありますか?

ありがとう

4

4 に答える 4

4

articletags_model_01

SELECT  ArticleTitle
       ,ArticleURL
FROM    Article AS a
        JOIN Article_Tag AS x ON x.ArticleID = a.ArticleID
        JOIN Tag AS t ON t.TagID = x.TagID
WHERE   t.TagName = @SomeTag
于 2010-01-03T22:54:47.430 に答える
0

多対多の関係を処理する通常の方法は、結合テーブル (ジャンクション テーブル、ブリッジ テーブル、スルー テーブルなど) を使用することです。したがって、タグのテーブル、記事のテーブル、および TagId と ArticleId の外部キーを持つ「記事で使用されるタグ」の 3 番目のテーブルが作成されます。どのタグが特定の記事に関連付けられているか、またはどの記事が特定のタグに関連付けられているかを調べるには、ターゲット テーブル (タグまたは記事) と結合テーブルに対して結合クエリを実行します。

于 2010-01-03T22:16:45.840 に答える
0

それが私だったら - そしてこれは正しくないかもしれません...

article テーブルに加えて、2 つのテーブルを使用します。

  • タグ用の 1 つのテーブル: ID、タグ
  • 記事をタグにリンクする 1 つのテーブル: ArticleID、TagID

これには、記事のタグを維持する作業 (タグ リストの解析、タグが存在するかどうか、作成されていない場合など) のチャンクが含まれますが、その反対側 (タグによる検索とタグの両方の検索、表示、タグのカウント) が必要になります。クラウド) のほうが簡単で、さらに重要なことに、インデックスを作成できるため高速である必要があります。検索が主要なパフォーマンス目標である場合、書き込み速度よりもはるかに多くの読み取りを行う必要があるためです。

于 2010-01-03T22:17:54.850 に答える
0

XML をデータベースに格納することは、当然のことながら、パフォーマンスが良くありません。関係を実装する多対多テーブルを使用して、タグと記事の関係を正規化された方法で保存することを検討してください。

Table: ArticleTag

ArticleId int
TagId int

これにより、データベースの XML サポートに頼ることなく、タグや記事を照会できます。

于 2010-01-03T22:18:52.463 に答える