2009-03-26 8 views
3

Par exemple, je le tableau suivant:Comment puis-je auto calculer une colonne dans une table sans utiliser une vue

CREATE TABLE `test` (
    `total_results` int(10) unsigned NOT NULL, 
    `num_results_as_expected` unsigned int(10) NOT NULL, 
) ; 

Je voudrais ajouter une autre colonne à la table, sans utiliser une vue à ajouter le pourcentage de:

(num_results_as_expected/total_results)*100 

Est-ce possible sans utiliser de VUE?

  • Clarification. Je sais que c'est possible en utilisant un statut de sélection, mais je voudrais ajouter cela dans l'instruction CREATE TABLE, afin que la colonne soit disponible pour tous ceux qui accèdent à la table.

  • Clarification 2: Le déclenchement est-il la bonne façon de procéder? Cela stockera essentiellement les informations en double dans la colonne.

+0

Avec le déclencheur, c'est une solution optimale. Vous ne stockez pas exactement la même valeur. Si vous calculiez cette valeur chaque fois que vous exécutez l'instruction select, cela ajouterait une surcharge supplémentaire sur votre serveur. –

+0

Indice: savez-vous à quoi sert le terme «démonrmalisation»? :) –

+0

@koistya, le pourcentage calculé sera invalide lorsque la ligne est mise à jour. – karim79

Répondre

4

Créer une colonne régulière + ajouter un déclencheur "avant insertion" qui mettra à jour sa valeur avec une valeur calculée à chaque opération d'insertion. Ex .:

create trigger update_result before insert on test for each row 
begin set new.result = (num_results_as_expected/total_results)*100; 
2
select (num_results_as_expected/total_results)*100 as percentage from test 

Donc, pour obtenir toutes les colonnes, y compris la nouvelle:

select total results, num_results_as_expected, (num_results_as_expected/total_results)*100 as percentage from test 

Cela vous évite d'avoir à stocker quelque chose de plus, la colonne supplémentaire apparaît comme par magie lorsque les données sont extraites.

Questions connexes