Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/12/2010, 10h09   #1
Membre du Club
 
Inscription : juillet 2005
Messages : 245
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 245
Points : 46
Points : 46
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
DiverSIG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 10h18   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 969
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 969
Points : 18 203
Points : 18 203
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 11h53   #3
Membre du Club
 
Inscription : juillet 2005
Messages : 245
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 245
Points : 46
Points : 46
pour la contrainte d'unicité, est-ce que déclarer la clé primaire comme ça :
Code :
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 :
1
2
ALTER TABLE MESURES WITH NOCHECK ADD 
	CONSTRAINT ContrainteMesure UNIQUE (MES_PREL, MES_PARAM);
Merci,

Nico
DiverSIG est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 12h06   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 969
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 969
Points : 18 203
Points : 18 203
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 09h24   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 948
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 948
Points : 17 762
Points : 17 762
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h12.


 
 
 
 
Partenaires

Hébergement Web