|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : juillet 2005 Messages : 245 ![]() |
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 |
|
|
00
|
|
|
#2 |
![]() ![]() |
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 ! |
|
00
|
|
|
#3 | ||||
|
Membre du Club
![]() Inscription : juillet 2005 Messages : 245 ![]() |
pour la contrainte d'unicité, est-ce que déclarer la clé primaire comme ça :
Code :
Code :
Nico |
||||
|
|
00
|
|
|
#4 |
![]() ![]() |
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 ! |
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 948 ![]() |
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 * * * * * |
|
00
|
Copyright © 2000-2012 - www.developpez.com