2010-08-15 12 views
1

Je souhaite utiliser la fonctionnalité de recherche de texte intégral de Microsoft SQL Server. Si j'ai une table Client qui fait référence à d'autres tables comme City, Country, Department, etc., est-il préférable de créer une table séparée qui contiendrait des données dénormalisées, qui seraient alors indexées en texte intégral, ou est-ce mieux de créer une valeur fictive dans chaque table étrangère (par exemple avec la clé -1), puis de remplacer les valeurs NULL de la table Client par les valeurs fictives correspondantes, puis créer une vue indexée (ces entrées fictives sont en raison de la vue indexée et utilisation de 'jointure interne' au lieu de 'jointure gauche'), puis créer un index de texte intégral sur cette vue d'index?Affichage indexé de SQL Server pour la recherche de texte intégral

Avec ce dernier, je ne serais pas à vous soucier de remplissage de la table « de normalisée » à chaque fois un changement d'enregistrement du client, ou dans l'une des tables étrangères - Ville, Pays, Département, etc.

Ou peut-être rien de tout ce qui précède, je pourrais utiliser aussi de nouvelles idées :)

Répondre

4

Aucune de ces réponses.

Conserver les données normalisées et créer des index FT séparés sur chaque table normalisée. Lors de l'interrogation des données, interrogez la table correspondante. Si vous souhaitez qu'une requête couvre plusieurs tables (par exemple si la ville, le pays ou le département contient 'York'), utilisez les opérateurs de requête UNION pour agréger les recherches sur plusieurs tables. C'est ainsi que FT fonctionne, gardez votre design aligné avec la façon dont la fonctionnalité fonctionne. N'essayez pas de tricher, vous allez seulement vous brûler.

+0

L'option 1 dans la question de l'OP n'est-elle pas une solution viable si la performance est un problème? Pour référence: http://stackoverflow.com/a/8932733/538962 – mg1075