95 votes

Colonne calculée à partir d'une autre colonne ?

Étant donné le tableau suivant :

id | value
--------------
1     6
2     70

Existe-t-il un moyen d'ajouter une colonne qui est automatiquement calculée sur la base d'une autre colonne dans le même tableau ? Comme une VIEW, mais faisant partie de la même table. Par exemple, calculated serait la moitié de value . Calculated devrait être automatiquement mis à jour lorsque value des changements, tout comme le serait un VIEW.

Le résultat serait :

id | value | calculated
-----------------------
1     6       3
2     70      35

6 votes

Alors pourquoi ne pas utiliser un VIEW ?

5 votes

Les colonnes calculées persistantes (c'est-à-dire stockées) sont souvent moins chères à lire car elles sont stockées comme les autres colonnes. Elles peuvent même être indexées.

2 votes

Les colonnes calculées non persistantes ne sont qu'une fonctionnalité pratique. Elles fonctionnent souvent mieux que les vues lorsqu'on a affaire à des ORM.

5voto

krtek Points 15497

Si vous voulez ajouter une colonne à votre tableau qui est automatiquement mise à jour à la moitié d'une autre colonne, vous pouvez le faire avec un déclencheur.

Mais je pense que la réponse déjà proposée est une meilleure façon de faire.

Gâchette codée à sec :

CREATE TRIGGER halfcolumn_insert AFTER INSERT ON table
  FOR EACH ROW BEGIN
    UPDATE table SET calculated = value / 2 WHERE id = NEW.id;
  END;
CREATE TRIGGER halfcolumn_update AFTER UPDATE ON table
  FOR EACH ROW BEGIN
    UPDATE table SET calculated = value / 2 WHERE id = NEW.id;
  END;

Je ne pense pas que l'on puisse faire un seul déclencheur, puisque les événements auxquels nous devons répondre sont différents.

0 votes

Merci. Dans ce cas, nous devrions également envisager de supprimer ?

3voto

Doron Points 39

J'espère que cela aidera encore quelqu'un, car beaucoup de gens pourraient arriver à cet article. Si vous avez besoin d'une colonne calculée, pourquoi ne pas simplement exposer vos colonnes souhaitées dans une vue ? Ne vous contentez pas de sauvegarder les données ou de surcharger les performances avec des déclencheurs... exposez simplement les données dont vous avez besoin déjà formatées/calculées dans une vue.

J'espère que cela vous aidera...

0 votes

Cela dépend, lorsqu'une solution OLAP représente trop de frais généraux, vous pouvez ajouter des colonnes avec des valeurs arrondies à utiliser à des fins de reporting rapide (afin que les agrégats groupés donnent toujours les mêmes montants que le CRM / ERP ou le compte bancaire). Le stockage des valeurs peut accélérer les rapports dans les cas où le calcul impliquerait plus qu'un calcul trivial, par exemple les calculs de marge de vente, ou lorsque la jonction d'autres tables serait nécessaire pour effectuer le calcul. Il est préférable d'insérer la valeur lorsque vous avez toutes les données à portée de main au moment de l'insertion, plutôt que de tout mélanger lorsqu'un rapport est demandé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X