いくつかのテーブルを検索できるイントラネットヘルプデスクのWebサイトに取り組んでいます。各テーブルのスキーマはまったく同じですが、目的に応じて表示が少し異なります。たとえば、ブログには作成者名がユーザーに表示されますが、FAQセクションとガイドセクションには表示されません。テーブルには次の列があります。
id int IDENTITY,
title VARCHAR(255),
body NVARCHAR(MAX),
author VARCHAR(80),
date DATETIME,
lasteditor varchar(80),
lastedited DATETIME,
CONSTRAINT [PK_blog_id] PRIMARY KEY CLUSTERED
([id] ASC)
各テーブルの結果で、すべてのテーブルのランクを返したいと思います。
Transact SQL(SQL Server 2008)を使用しているため、フルテキストインデックスを操作するには主キーが必要です。これまでのところ、フルテキストインデックスの一意のキーを取得する問題を解決するための2つの可能性を考え出しました。
すべてのテーブルを結合する検索が実行されるたびにビューを作成し、次のようなものを使用してビューに一意のID列を生成します。
SELECT id, variety, 1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num FROM tbl
すべてのテーブルを1つの大きなテーブルにマージし、タイプを示す追加の列を追加します(つまり、「ブログ」、「よくある質問」、「ガイド」など)。bigtableの主キーをフルテキストインデックスのキーとして使用し、追加のWHERE句を使用して必要な「テーブル」を取得します。
どちらがより良い実践と見なされますか、それともパフォーマンスが向上しますか?ビューを作成し、誰かがグローバルサイト検索を実行するたびにビューの「自動インクリメント」を生成するのは少し遅いように思われます。たぶん、ビューの一意のID列を生成する簡単な方法がありますか?