开发者社区> 问答> 正文

扩展SQL Server全文索引以搜索外键

我知道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表包含可在正在构建的整个应用程序的下拉列表中使用的值。例如,“车辆颜色”的属性类型具有“黑色”,“蓝色”,“红色”等属性。

好的,因此当用户尝试搜索“ Blue Ford Mustang”时就会出现问题。那么,考虑到Vehicle等表格会变得很大,什么是最佳解决方案?

我是否要在“车辆”表中创建另一个字段“ Veh Color”,该字段除了“ FK Atr VehicleColor”外,还保留下拉菜单中所选内容的文本值?

或者,我是否完全删除“ FK Atr VehicleColor”并添加“ Veh Color”?当下拉列表以更新形式填充时,我可以使用“ Veh Color”的文本值与“ Atr Name”匹配。使用这种方法,我将不得不处理是否从数据库中删除了属性。

-注意:不能在代码视图之外使用下划线,因为两个下划线之间的所有内容均为斜体。

展开
收起
心有灵_夕 2019-12-29 13:13:46 5673 0
1 条回答
写回答
取消 提交回答
  • 您可以创建一个视图,提取所需的任何数据,然后将全文索引应用于该视图。该视图需要使用“ 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
    
    2019-12-29 13:14:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载