|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2011 Messages : 44 ![]() |
Bonjour,
Je souhaite créer une table pour historiser les données d’une table toute simple : Personne (id_personne , nom, prenom, age) Le MCD :
Le passage au MLD donne:
La création des tables : Code :
Merci ! |
||
|
|
00
|
|
|
#2 |
![]() ![]() |
D'après ton modèle, toutes les personnes resteront dans la table personne, qu'elles soient historisées ou non. Vu les colonnes de la table personne, quel est l'intérêt d'historiser cette table ?
De plus, l'âge est une donnée calculable qui ne devrait pas être stockée en BDD. Il vaudrait mieux y stocker la date de naissance et calculer l'âge chaque fois que nécessaire. La formule pour le faire en SQL est donnée dans ce message de SQLPro.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2011 Messages : 44 ![]() |
ah non, je voulais juste m'essayer à l'historisation
Je viens de découvrir le "concept" d'historisation (enfin en classe, la prof en avait parlé 30 sec vite fait) et je souhaiterai le mettre en pratique |
|
|
00
|
|
|
#4 | |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Citation:
Dans la pluspart des cas, l'historisation se base sur des données non evolutives. Il lui est peut etre seulement utile de savoir que lors de l'insertion de son nème tuple, la personne avait 54 ans... Sinon il devra etre obligé aussi d'inserer une date référence pour le calcul de son age (qui n'est pas forcément la date du jour), ce qui revient a la meme chose. Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
|
20
|
|
|
#5 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2011 Messages : 44 ![]() |
Dans la table d'historisation j'ai rajouté un id qui servira de clé ainsi qu'un attribut pour connaitre la date à laquelle a été apporté la modification.
Mainenant que mes tables sont créées, je voulais savoir quels étaient les moyens pour alimenter la table d'historisation. Je suppose qu'il faut pour cela mettre en place un trigger de type LDD car les modifications seront du type DELETE ou UPDATE. Et c'est là que les choses se corsent, en effet, j'ai fait plein de tests sur la console de phpmyadmin et aucun code ne semble juste Voici le dernier en date: Code :
à mon avis, le hic se trouve dans le SELECT, il prend en compte 4 valeurs et le INSERT en prend 7. Désolé je débute |
||
|
|
00
|
|
|
#6 | ||
![]() ![]() |
Citation:
Citation:
Soit la table des produits suivante : produit (prd_id, prd_reference, prd_nom, prd_qte_par_lot, prd_prix_vente_ht) Un produit peut : - changer de prix de vente ; - voir son nom modifié (un autre produit similaire est créé et on apporte une précision au nom du premier produit pour le différencier) ; - changer de référence sans changer de caractéristiques (nouveau codage de la nomenclature des produits) ; - voir sa quantité par lot changer (vendu à l'origine par 10 puis plus tard par 50). Pour historiser ces modifications successives, on peut tout simplement créer une table de structure identique + une colonne de date de changement : produit_histo (prh_id_produit, prh_date_changement, prh_reference, prh_qte_par_lot, prh_prix_vente_ht)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
10
|
|
|
#7 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Non évolutives a partir du moment ou elles sont historisées, bien sur ...
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
10
|
|
|
#8 | |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Citation:
Donc je vais apporter ma touche personnelle sur mon experience dans ce domaine. Generalement on parle de produits techniques et commerciaux (plusieurs produits commerciaux pouvant etre issus d'un seul et meme produit technique en fonction de son packaging, des clients, ...). La quantité de lot est l'altération d'un produit commercial (le produit technique de base est le meme). Dans la pluspart des cas (enfin toujours selon mon experience), la réference commerciale change, ce qui donne naissance a un nouveau produit commercial. Modifier le nom d'un produit, j'ai jamais vu cela, car les impacts (commerciaux, publicitaires, ...) sont extremement importants. Effectivement comme le dit Cinephil, une date de reference d'historisation doit etre présente. Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
|
10
|
|
|
#9 | |
|
Membre Expert
![]() Inscription : août 2009 Messages : 779 ![]() |
Citation:
J'ajouterai qu'en plus de la date de modification, il est souvent utile d'avoir une / plusieurs colonnes qui permettent de tracer les modifications : utilisateur et/ou raison de la modification. |
|
|
|
10
|
|
|
#10 | |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Citation:
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
|
10
|
|
|
#11 | |||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2011 Messages : 44 ![]() |
Citation:
![]() Passons au trigger: Code :
Pouvez-vous me dire où ça va pas? |
|||
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Il vous manque une donnée pour votre colonne date
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
10
|
|
|
#13 |
![]() ![]() |
Pourquoi fais-tu un trigger AFTER DELETE et pas plutôt AFTER UPDATE ? Ou même plutôt un BEFORE UPDATE puisqu'il s'agit d'historiser les valeurs existantes donc avant qu'elles soient modifiées !
Bon c'est vrai que si tu supprimes un produit il peut être bon de l'historiser mais perso je préférerais le laisser dans la table d'origine, quitte à ajouter une date de validité du produit ou un booléen indiquant si le produit est actif ou pas. En effet, un produit est généralement lié à des commandes, des factures, d'autres produits s'il entre dans une composition ou s'il est composé... Si tu supprimes le produit, il faut alors examiner les conséquences sur les autres tables associées à la table des produits. Quant à ta requête INSERT dans le trigger, pour donner une valeur à la date de modification, selon le type de la colonne, utilise CURRENT_DATE ou CURRENT_TIMESTAMP.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#14 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2011 Messages : 44 ![]() |
|
|
|
00
|
|
|
#15 | |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
Citation:
Cinephil vous donne la réponse dans le post précédent.
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
|
10
|
|
|
#16 | ||
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2011 Messages : 44 ![]() |
Citation:
bref, les triggers c'est pas mon fort, tu l'as remarqué. Citation:
|
||
|
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() Inscription : juin 2011 Messages : 44 ![]() |
|
|
|
00
|
|
|
#18 |
![]() ![]() |
DATETIME est un type de colonne. Sauf erreur de ma part (flemme de vérifier), il n'y a pas de fonction DATETIME ni de CURRENT_DATETIME en SQL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
|
|
#19 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
CURRENT_TIMESTAMP ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
10
|
|
|
#20 |
![]() ![]() |
Oui ?
Il te pose un problème le CURRENT_TIMESTAMP ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
10
|
Copyright © 2000-2012 - www.developpez.com