3

SQL Server のフルテキスト インデックスで複数のテーブルにインデックスを作成できないことはわかっています。しかし、全文索引を実装したいテーブルにリレーションシップがあります。

以下の3つの表を見てください...

Vehicle
Veh_ID - int (Primary Key)
FK_Atr_VehicleColor - int
Veh_Make - nvarchar(20)
Veh_Model - nvarchar(50)
Veh_LicensePlate - nvarchar(10)

Attributes
Atr_ID - int (Primary Key)
FK_Aty_ID - int
Atr_Name - nvarchar(50)

AttributeTypes
Aty_ID - int (Primary key)
Aty_Name - nvarchar(50)

Attributes テーブルと AttributeTypes テーブルには、ビルド中のアプリケーション全体でドロップダウン リストで使用できる値が保持されます。たとえば、「黒」、「青」、「赤」などの属性を持つ「車両の色」の属性タイプ...

ユーザーが「ブルー フォード マスタング」を検索しようとすると、問題が発生します。では、Vehicle のようなテーブルがかなり大きくなることを考えると、最善の解決策は何でしょうか?

「FK Atr VehicleColor」に加えて、ドロップダウンで選択されたもののテキスト値を保持する「Veh Color」である「Vehicle」テーブルに別のフィールドを作成する必要がありますか?

または、「FK Atr VehicleColor」を完全に削除して、「Veh Color」を追加しますか? ドロップダウンが更新フォームに取り込まれているときに、「Veh Color」のテキスト値を使用して「Atr Name」と照合できます。このアプローチでは、属性がデータベースから削除された場合に対処する必要があります。

-- 注: 2 つのアンダースコアの間のすべてがイタリック体であるため、コード ビューの外ではアンダースコアを使用できませんでした。

4

3 に答える 3

4

フルテキスト インデックス作成専用の非正規化テーブルを別に用意するのが一般的だと思います。次に、このテーブルはトリガーによって更新されるか、この場合のように SQL Server のスケジュールされたタスクによって更新されます。

これは SQL Server 2000 でした。SQL Server では、フルテキスト インデックス付きのインデックス付きビューを作成できます: http://msdn.microsoft.com/en-us/library/ms187317.aspx。ただし、インデックス付きビューには多くの制限があることに注意してください。たとえば、OUTER join を使用するビューにインデックスを付けることはできません

于 2008-09-23T20:56:42.273 に答える
2

必要なデータを取り込むビューを作成し、そのビューにフルテキスト インデックスを適用できます。ビューは「WITH SCHEMABINDING」オプションを指定して作成する必要があり、UNIQUE インデックスが必要です。

CREATE VIEW VehicleSearch
WITH SCHEMABINDING
AS
SELECT
  v.Veh_ID,
  v.Veh_Make,
  v.Veh_Model,
  v.Veh_LicensePlate,
  a.Atr_Name as Veh_Color
FROM
  Vehicle v
INNER JOIN
  Attributes a on a.Atr_ID = v.FK_Atr_VehicleColor
GO

CREATE UNIQUE CLUSTERED INDEX IX_VehicleSearch_Veh_ID ON VehicleSearch (
  Veh_ID  ASC
) ON [PRIMARY]
GO

CREATE FULLTEXT INDEX ON VehicleSearch (
  Veh_Make  LANGUAGE [English],
  Veh_Model LANGUAGE [English],
  Veh_Color LANGUAGE [English]
)
KEY INDEX IX_VehicleSearch_Veh_ID  ON [YourFullTextCatalog]
WITH CHANGE_TRACKING AUTO
GO
于 2008-09-23T21:06:23.077 に答える
0

私が理解しているように (私は SQL Server をよく使用しましたが、フルテキスト インデックスを作成したことはありません)、SQL Server 2005 では、ビューに対してフルテキスト インデックスを作成できます。したがって、次のビューを作成できます

SELECT 
  Vehicle.VehID, ..., Color.Atr_Name AS ColorName 
FROM
  Vehicle 
LEFT OUTER JOIN Attributes AS Color ON (Vehicle.FK_Atr_VehicleColor = Attributes.Atr_Id)

次に、インデックスに「ColorName」を含めて、このビュー全体にフルテキスト インデックスを作成します。

于 2008-09-23T20:55:53.007 に答える