IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Ecriture d'un trigger


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    524
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 524
    Par défaut Ecriture d'un trigger
    Bonjour,

    Je dois créer une base de données pour stocker des résultats de mesures de paramètres de prélèvements effectués dans des cours d'eau.
    Je crée 3 tables :
    - une table des paramètres, où je stocke le libellé, l'unité, ...
    - une table des prélèvements, où je stocke la date, ...
    - une table des mesures contenant les résultats de mesures.

    j'ai une relation entre les tables mesures et prélèvements, avec une cardinalité 1,1 du côté de la mesure.
    j'ai une relation entre les tables mesures et paramètres, avec une cardinalité 1,1 du côté de la mesure.

    Donc au niveau physique, je dois stocker dans la table mesures, pour chaque mesure, l'identifiant du prélèvement et l'identifiant du paramètre correspondant.

    Mais il faut s'assurer que dans le table mesures, le couple (identifiant du prélèvement, identifiant du paramètre) est unique. (à chaque prélèvement, on a une seule mesure d'un paramètre donné).

    Donc je pensais écrire un trigger pour cela, mais comment l'écrire ?
    Je suis sous postgresql.


    Merci,

    Nico

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il suffit de mettre une contrainte d'unicité sur le couple de colonnes !

    On pourrait même se dire que tu n'as pas deux associations (terme préférable à relation) mais une seule :
    Prélèvement -1,n----Mesurer----0,n- Paramètre

    Ce qui donne effectivement 3 tables mais la table associative a pour clé primaire les identifiants des deux tables issues des deux entités participant à l'association, ce qui implique l'unicité de ce couple :

    Prelevement (pr_id, pr_date...)
    Parametre (par_id, par_libelle, par_unite...)
    Mesure (msr_id_prelevement, msr_id_parametre, msr_resultat...)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    524
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 524
    Par défaut
    pour la contrainte d'unicité, est-ce que déclarer la clé primaire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE MESURES
    (
    	MES_PREL		INTEGER		NOT NULL,
    	MES_PARAM		INTEGER		NOT NULL,
    	MES_VALEUR		FLOAT		NOT NULL,
    	MES_QUALITE		INTEGER		NOT NULL,
    	CONSTRAINT PK_MESURES PRIMARY KEY (MES_PREL, MES_PARAM)
    );
    CREATE UNIQUE INDEX IDX_MESURES ON MESURES (MES_PREL, MES_PARAM);
    ça suffit, ou alors est ce qu'il faut rajouter explicitement une contrainte du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE MESURES WITH NOCHECK ADD 
    	CONSTRAINT ContrainteMesure UNIQUE (MES_PREL, MES_PARAM);
    Merci,

    Nico

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Puisque ta clé primaire est sur le couple {MES_PREL, MES_PARAM}, la contrainte d'unicité y est déjà. Pas besoin d'en rajouter.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 042
    Billets dans le blog
    6
    Par défaut
    Une clef primaire est une contrainte UNIQUE + NOT NULL. Il est donc inutile et dangereux de rajouter un index UNIQUE.
    Un index UNIQUE n'est pas une contrainte d'unicité. Une contrainte d'unicité c'est UNIQUE CONSTRAINT.
    Il est inutile et dangereux de mettre des index UNIQUE là ou vous pouvez mettre des contraintes d'unicité !

    A lire sur les contraintes : http://sqlpro.developpez.com/contrai...aintes_SQL.pdf

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Trigger / Ecriture dans un fichier
    Par bvincent69100 dans le forum SQL
    Réponses: 17
    Dernier message: 12/06/2009, 10h58
  2. lecture/ecriture des broches RTS/CTS du port RS232
    Par .:: sly51 ::. dans le forum C
    Réponses: 3
    Dernier message: 24/10/2006, 15h28
  3. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  4. [PostgreSQL] Refus de STATEMENT dans un trigger
    Par alex2205 dans le forum Requêtes
    Réponses: 3
    Dernier message: 10/03/2003, 12h51
  5. [Comparatif] Procédures stockées, triggers, etc.
    Par MCZz dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 28/08/2002, 12h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo