Bonjour
j'ai deux tables comme ceci :
je voudrais que la modification de numeroStations dans la table du bas affecte tous les numeroStations correspondant dans la table du haut. J'ai des déjà cherché du côte des "relationnel table" sans succès .
Bonjour
j'ai deux tables comme ceci :
je voudrais que la modification de numeroStations dans la table du bas affecte tous les numeroStations correspondant dans la table du haut. J'ai des déjà cherché du côte des "relationnel table" sans succès .
Si votre SGBD est un SGBDR digne de ce nom, il suffit d'ajouter une contrainte de clé étrangère dans la table du haut référençant la colonne NumeroStation de la table du bas et d'ajouter à cette contrainte la consigne ON UPDATE CASCADE.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« 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 la suite Linux Mageïa !
La table du haut s'appelle "mesure" et celles du bas "stationStationnée" :
Lorsque je modifie la valeur de la cellule "numeroStation" dans "stationStionnee" il ne se passe rien dans la table "mesures"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 query.exec("create table stationStationnee(id int primary key,numeroStation ..etc") query.exec("create table mesures (id int primary key ,matricule varchar (etc ...) ,numeroStation INT REFERENCES stationStationnee(numeroStation) ON UPDATE CASCADE")
Désolé, pas le temps. Les contraintes de clés étrangères normalisées, c'est chez SQLPro.
Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
« 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 la suite Linux Mageïa !
Il faudrait préciser le SGBD, les options de contraintes ne sont pas les mêmes sur tous les systèmes.
Bonjour,
en effet connaitre le SGBD utilisé serait une chose utile !
Mais il y a en plus un problème de conception.
1/ pour que ce que vous cherchez à faire (tel que cherchez à le faire) fonctionne, il faut que la colonne numeroStation de la table stationStationnee fasse l'objet d'une contrainte d'unicité dûment déclarée... est-ce bien le cas ?
2/ en fait le 1/ importe peu, puisque ce n'est pas la bonne façon de faire ! Votre table "mesures" devrait référencer la table "stationStationnee" par sa clef primaire, c'est à dire "stationStationnee.id". De cette façon, il n'y aura aucune modification à faire dans la table "mesures" lors de la modification d'un "numeroStation" dans la table "stationStationnee". C'est la raison pour laquelle une clef primaire doit être asémantique, c'est à dire ne pas avoir de sens au niveau de votre système, afin qu'elle ne change jamais. (Mais cela ne devrait pas vous empêcher de déclarer une contrainte d'unicité sur numeroStation si c'est fonctionnellement pertinent !)
J'utilise SQlite avec Qt pour une base locale intégrée dans mon application
Donc si je comprends bien ma colonne numeroStation doit être une clé primaire? C'est loin d'être le cas les id sont dans la première colonne et s'incrémentent à chaque nouvelles données , les numéroStations sont des chiffres pas forcément en ordre (contrairement à l'exemple).
Je saisis mal ce passage la clé primaire de "mesure" ou "stationStationee". Qu' est ce que je dois changer dans le code plus haut grosso modo ?Votre table "mesures" devrait référencer la table "stationStationnee" par sa clef primaire, c'est à dire "stationStationnee.id".
Dans la table "mesures", vous devriez remplacer la colonne "numeroStation" par IdStation, faisant référence à la colonne "id" de la table "stationStationnee", pour les détails voir les tutoriels et cours de formation pour apprendre SQL.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager