|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : février 2009 Messages : 14 ![]() |
Bonjour à tous,
J'ai un rendus de projet à faire, et je suis un peu perdu pour ce qui est des CHECK postgre, j'ai bien pigé le truc pour les CHECK simple sur une seul table, mais je n'arrive pas malgré mes recherches à réaliser un CHECK entre deux tables différentes. Voici le script de la base sql "Camping" que j'ai réalisé : Code :
j'ai essayé un truc du genre: Code :
Merci par avance pour votre aide voici le MCD de la base : |
||||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
Normal que vous soyez perdu car une contrainte check ne peut contrôler que les données d'une ligne.
Si vous voulez faire un contrôle qui a une portée supérieure (ex : d'une ligne par rapport à une autre ou par rapport aux lignes d'une autre table), il faut passer par un trigger. |
|
|
00
|
|
|
#3 | ||||||||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Citation:
Démonstration... tables pour l'exemple : Code :
Création d'une fonction de vérification : Code :
Code :
Code :
INSERT INTO T_CLIENT_CLI VALUES (1, 'DUPONT', 15); Code :
INSERT INTO T_FACTURE_FCT VALUES (101, 1, '2011-04-15', 12.0) Code :
INSERT INTO T_FACTURE_FCT VALUES (102, 1, '2011-04-15', 35.0) Citation:
Bref, apprenez SQL. Mon livre, comme mon site web peut vous être utile !!! Voici ce qui figure en toutes lettres dans mon livre (2e édition, page 70/71) : " NOTA La création de contraintes de validation complexes nécessite de bien connaître les possibilités offertes par l'ordre SQL SELECT d'extraction de données ainsi que l'écriture des UDF (User Define Function). Exemple, contrainte de validation faisant référence appel à des UDF Code :
A la lecture de la définition de cette table on peut en déduire que • la cohérence du numéro national d'identité (vulgairement appelé numéro de sécurité sociale) est vérifié par la routine F_VALIDE_NNI du schéma S_ROUTINES; • le nom du patient doit respecter certaines règles (par exemple commencer par une lettre et pour le reste, n'être composé que des caractères A à Z et leurs déclinaisons avec accents, ainsi que les caractères espace, tiret, apostrophe) et figurer en majuscule, ceci étant obtenir à l'aide de la routine F_VALIDE_NOM du schéma S_ROUTINES; • le prénom du patient obéira aux même règles que ci dessus mais en autorisant un mélange de majuscule et minuscule (par exemple seule les premières lettres de chaque partie du prénom seront en majuscules et les autres en minuscule). " 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
|
|
|
#4 |
|
Invité régulier
![]() Inscription : mai 2006 Messages : 15 ![]() |
Est-ce qu'il est suffisamment malin pour rendre la main directement sur une requête du type :
Code :
SELECT * FROM T_FACTURE_FCT WHERE CLI_ID=1 AND FCT_REMISE=35.0 |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Rare sont les SGBDR qui savent optimiser les plans de requêtes par les contraintes. Pas en l'état actuel de PG. SQL Server sait faire cela... Lisez l'article de MikeDavem sur le sujet :
http://blog.developpez.com/mikedavem...e-sur-les-per/ 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
|
|
|
#6 | ||
|
Invité de passage
![]() Inscription : février 2009 Messages : 14 ![]() |
Hé bien, je vois que je déchaine les passions !!
Pour revenir a vos réponses, j'ai donc créé un trigger qui se doit de remplir les contraintes suivantes : Un emplacement ne peut pas être loué 2 fois en même temps Un client ne peut pas avoir deux réservations qui se chevauchent On ne peut pas louer pendant la fermeture du camping Les tuples des relations location et option_location ne peuvent pas être modifiés une fois la facture éditée On voudrait de plus avoir quelques comportements automatiques : 1. Lors de l'ajout d'un tuple dans location, les arrhres sont calculés automatiquement (ils ne prennent en compte que le coût de l'emplacement et pas les éventuelles options supplémentaires; ils sont arrondis à l'euro près). 2. Lors de l'ajout d'un tuple dans facture, le montant se calcule automatiquement. Dans les deux cas, le prix utilisé pour un jour donné est celui de la saison en cours. Par exemple, si une personne vient le dernier jour de la saison d'été haute saison, elle paiera le prix haute saison la première nuit puis le prix moyenne saison. Code :
![]() Merci à vous PS : J'ajoute le nouveau script sql de création de la base avec certaines données pré remplis, il ne reste plus qu'a créé des réservations et des factures pour tester le fonctionnement : Le fichier est ici : http://www.toofiles.com/fr/rawfilesd...sql-base2.html |
||
|
|
00
|
|
|
#7 | ||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Encore une fois ce serait beaucoup plus simple et plus performant en utilisant une contrainte check associée à une UDF.
Exemple : Un emplacement ne peut pas être loué 2 fois en même temps Code :
Code :
__________________
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
|
|
|
#8 |
|
Invité de passage
![]() Inscription : février 2009 Messages : 14 ![]() |
oui oui j'avais bien compris , mais mon prof veux un trigger...
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : mars 2005 Messages : 1 565 ![]() |
|
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Dite à votre prof que son exercice est stupide. En effet réaliser des triggers là ou ce n'est pas nécessaire et là ou c'est contre performant est parfaitement stupide. Apprenez lui à faire avec des contraintes CHECK et dites lui que c'est de la part d'un autre prof...
vous pouvez me citer ! 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
|
|
|
#11 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
__________________
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
|
|
|
#12 | ||
|
Invité de passage
![]() Inscription : février 2009 Messages : 14 ![]() |
ok heu vous savez, cela ne m'avancera à rien car le but étant d'apprendre les triggers et celui ci ne fonctionnant pas, je ne vais pas pouvoir rendre un devoir concernant une autre méthode, même si celle ci me parait meilleur, de plus le trigger comme vous avez pus le constater est beaucoup plus évoluer qu'une simple vérification, il y a à aussi des remplissages automatiques etc...
Je viens de le bosser de nouveau celui ci et j'ai ajouter les commentaires: Code :
Je veux juste savoir comment faire fonctionner celui ci et après promis j'utiliserais votre méthode. Siouplait et désolé pour l'insistance |
||
|
|
00
|
|
|
#13 | ||||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
les chaines de caractères sont délimitées par des apostrophe. Pas par des guillemets !
testez pas à pas, d'abord cela : Code :
Code :
__________________
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
|
|
|
#14 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Citation:
un trigger pour le remplissage auto + CHECK et UDF pour les contraintes ! Rien ne vous interdit de rendre un devoir plus intelligent que ne l'est l'énoncé ! 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 * * * * * |
|
|
10
|
|
|
#15 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
J'avais pas vu, mais à mon sens il y a des erreurs dans le script SQL de création de vos tables...
En effet le type SERIAL ou BIGSERIAL (pourquoi d'aileurs l'avoir utilisé, pensez vous que le serial permettant de numéroter 2 milliards de lignes sont insuffisant ?) doit être bréservé à la table de référence et pas aux tables filles. Par exemple pour la table camping.location, la bonne formulation est : Code :
__________________
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
|
|
|
#16 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Je voit des tartines d'autres erreur dans votre modèle :
arrhes en bigserial ??? comment mettre 21,15 euros ? des montants ne doivent pas être en float, mais en décimal (16,2) par exemple. les quantités doivent être en float (généralement) annule dans location n'est-il pas un booléen ? description_option bigserial ???? Enfin, pour la modélisation de la table des clients, je vous donne ZÉRO pointé ! 1) des varchar(150) pour des noms et prenom 2) une adresse dans le nom 3) pas de lignes d'addresse 4) pas de pays 5) un seul téléphone 6) une seule adresse (comme ça s'il revient je créé un doublon ou bien je fais une fausse facture)... 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
|
|
|
#17 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
en tout cas, c'est un défi laid....
Bon, vu le nombre de post que j'aligne, je ne pouvais pas m'empêcher de la faire !!!! 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
|
|
|
#18 |
|
Invité de passage
![]() Inscription : février 2009 Messages : 14 ![]() |
j'avais bien vu les erreurs de typage, par contre je ne les connais pas tous sous postgre, je découvre actuellement le systeme donc je fait comme je peu avec les documents qu'on me donne.
Pour la table il ne fallait pas prendre la première, j'ai reposter la seconde recorrigé, mais ce n'est qu'une copie du model de l'énoncé, que voici : http://www.toofiles.com/fr/rawfilesd..._partie_2.html Je vais tenter de faire mieux, je ne suis pas expert mais j'ai tout de même envie de réussir cet exercice... |
|
|
00
|
|
|
#19 |
|
Invité de passage
![]() Inscription : février 2009 Messages : 14 ![]() |
et je viens de me rendre compte que c'est mon logiciel de conception qui convertis mes types de cette manière et effectivement qu'il y a énormément de chose à revoir.
Je vais regarder tout ça. |
|
|
00
|
|
|
#20 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Citation:
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