2017-06-15 3 views
0

J'ai 2 tablesLa meilleure façon dans le serveur sql

header 
(
    id uniqueidentifier, 
    code varchar(25), 
    description varchar(150), 
    ... 
) 

attributes 
(
    headerId uniqueidentifier, 
    attributeId uniqueidentifier, 
    stringColumn varchar(100), 
    integerColumn int, 
    decimalColumn decimal(16,5), 
    booleanColumn bit, 
    textColumn varchar(500), 
    ... 
) 

Baisically Je voudrais pour rechercher attributs de table mettre en œuvre une recherche générale qui trouverait le header.Id de tous les en-têtes qui ont liés les attributs d'une valeur de certains chaîne de recherche.

Je sais qu'un index de recherche serait idéal pour cela. Mais actuellement pas prévu de mettre en œuvre cela. Mon plan actuel est de créer une colonne attributeMeta varchar(max) dans la table d'en-tête et de stocker un json dans la colonne contenant toutes les données d'attribut, puis de faire un index de recherche fullText dessus et de l'interroger.

Est-ce que ce serait bien ou y at-il une meilleure solution? étant donné que je ne devrais pas implémenter un index de recherche dès maintenant?

+0

Votre code se situe quelque part entre une classe et une table ... Y a-t-il seulement la colonne 1 varchar? Taille de cette colonne? –

+0

il y a 2 colonnes varchar une pour les chaînes courtes et une pour les longues – Jester

+0

Faites simplement une recherche plein texte sur ces 2 colonnes, pas besoin d'une autre colonne avec des données répétitives –

Répondre

0

si vous êtes en utilisant le serveur sql, essayez :::

ALTER TABLE header 
ADD COLUMN attributeMeta VARCHAR(MAX) 

UPDATE TABLE header 
SET attributeMeta = 
SELECT 
headerId +','+ 
attributeId +','+ 
stringColumn +','+ 
integerColumn +','+ 
decimalColumn +','+ 
booleanColumn  -- CONCAT AS MANY TABLES AS YOU NEED 
FROM attributes 
WHERE id = attributes .headerId) --im assuming attributes.headerId and headers.id can be used to link the tables 

mais mon meilleur pari serait de créer un index dans les champs et les tableaux appropriés.