Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1439 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Contraintes en SQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Contraintes en SQL

n°1075105
v10ware
Posté le 07-05-2005 à 20:51:08  profilanswer
 

Bonjour,
 
J'ai pour l'instant 3 relations.
 
Mettons que la première stocke différents types de jeux en équipe avec pour chacun, le nombre minimum de joueurs nécessaires (jeu, nb_joueurs_min)
Une aute relation stocke différents noms d'équipes en leur associant le nombre de personnes qui les constituent (equipe, nb_joueurs)
 
j'aimerais mettre les équipes et les types de jeux dans une troisième relation en assurant que l'équipe contient assez de personnes pour pouvoir jouer au jeu en question.
 
Comment puis-je exprimer cette contrainte en SQL ?
 
Merci d'avance :)

mood
Publicité
Posté le 07-05-2005 à 20:51:08  profilanswer
 

n°1075168
sircam
I Like Trains
Posté le 07-05-2005 à 22:41:36  profilanswer
 

Tu mélanges relations et tables dans une grande soupe, on dirait.
 
Si j'ai bien compris ce que tu veux, c'est un trigger qu'il te faut.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1075173
v10ware
Posté le 07-05-2005 à 22:53:37  profilanswer
 

Une relation n'est-elle pas la "description" d'une table ? Peux-tu m'expliquer la nuance ?
 
Et mes recherches m'ont bien amené à me renseigner sur les triggers, mais si je demande c'est que je ne vois pas comment écrire ce dont j'ai besoin :)

n°1075188
sircam
I Like Trains
Posté le 07-05-2005 à 23:03:53  profilanswer
 

Non, ce que tu dis est correct, mais c'est une terminologie peu usitée - sauf sans doute pour se la pêter, comme le font les linguistes avec le vocabulaire ou comme quand j'utilise des locutions latines sur ce forum. :o
 
Parce qu'on peut parler de relation (table) et de relation (relation). Dans le dernier paragraphe, j'ai cru que tu parlais de relation (relation) au lieu de relation (table), ce qui aurait été confus. Parce qu'en fait, on peut aussi parler de relation (relation) entre tes deux relations (tables), tu me suis ?
 
Sinon, pour les tiggerz, beeeh, eh ! Fais des essais avec des triggers simples (p.e. empêcher l'insertion d'une équipe de plus de 4 joueurs ou que sais-je) pour te faire la main et observe les réactions offusquées de ton DBMS. Ca te paraitra limpide.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1075191
v10ware
Posté le 07-05-2005 à 23:09:29  profilanswer
 

Ok pour le relation-table, c'est qu'en fait je débute et que mes profs aiment bien parler de relation plutôt que de table, ils restent dans leur bulle théorique et moi je les suis bêtement :o
 
Je vois comment poser des contraintes simples du genre CHECK (nb_joueurs < 5), mais c'est quand il s'agit d'aller regarder des valeurs dans les tables voisines que ça me chagrine... Enfin je vais bien finir par mettre la main sur un exemple :/
 
Merci quand même.

n°1075192
sircam
I Like Trains
Posté le 07-05-2005 à 23:13:42  profilanswer
 

v10ware a écrit :

Ok pour le relation-table, c'est qu'en fait je débute et que mes profs aiment bien parler de relation plutôt que de table, ils restent dans leur bulle théorique et moi je les suis bêtement :o


Garde toujours un oeil critique. ;)
 

v10ware a écrit :

Je vois comment poser des contraintes simples du genre CHECK (nb_joueurs < 5), mais c'est quand il s'agit d'aller regarder des valeurs dans les tables voisines que ça me chagrine... Enfin je vais bien finir par mettre la main sur un exemple :/


Beh, rien ne t'empêche de faire un SELECT avoir une jointure dans ton trigger, non ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1075198
v10ware
Posté le 07-05-2005 à 23:21:33  profilanswer
 

En fait on n'a pas étudié la création des triggers :D
 
Et je ne sais pas du tout si un SELECT dans un CHECK est faisable... Enfin je peux tenter.
 
Je vais peut-être gérer cette contrainte dans l'appli qui chapeaute la base si il n'y a pas de moyen simple d'écrire ça simplement, de toute façon.

n°1075207
sircam
I Like Trains
Posté le 07-05-2005 à 23:40:28  profilanswer
 

v10ware a écrit :

En fait on n'a pas étudié la création des triggers :D


Et bien voilà une belle occasion de briller.
:o
 

v10ware a écrit :

Et je ne sais pas du tout si un SELECT dans un CHECK est faisable... Enfin je peux tenter.


Un exemple pris au hasard (c'est du Sybase mais ça s'applique mutatis mutandis à d'autres DBMS) :
 

Code :
  1. create trigger forinsertrig1
  2. on salesdetail
  3. for insert
  4. as
  5. if (select count(*)
  6.     from titles, inserted
  7.     where titles.title_id = inserted.title_id) !=
  8.     @@rowcount
  9. /* Cancel the insert and print a message.*/
  10.   begin
  11.     rollback transaction
  12.     print "No, the title_id does not exist in
  13.     titles."
  14.   end 
  15. /* Otherwise, allow it. */
  16. else
  17.   print "Added! All title_id's exist in titles."


 
Ca devrait aller, non ?
 
 

v10ware a écrit :

Je vais peut-être gérer cette contrainte dans l'appli qui chapeaute la base si il n'y a pas de moyen simple d'écrire ça simplement, de toute façon.


L'idéal est de faire les deux - et d'expliquer pq à tes profs. Ceci dit, contrairement à ce qu'on apprend à l'école, il existe des DB sans aucune contrainte d'intégrité (pas de relations entre tables, que dalle), mais ce n'est pas très didactique, on va dire.
 
Bon, si c'est pour un cours de DB, tu serais sans doute mieux inspiré de travailler au niveau DB et de pondre un beau trigger bien robuste.  [:crosscrusher]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°1075219
v10ware
Posté le 08-05-2005 à 00:11:01  profilanswer
 

Je vais tenter de comprendre ton exemple, ça a l'air relativement abordable :jap:
 
Et effectivement, le cours porte sur la BD mais on s'est attardé d'avantage sur la conception (schéma E-A) que sur la gestion des contraintes en SQL, où ce fut assez basique (ON DELETE CASCADE, FOREIGN KEY et basta). Les profs nous laissant implémenter les contraintes un peu complexes dans l'appli java, je ne voulais pas pousser trop loin.
 
Merci pour tes réponses, il faut maintenant que je taquine postresql en priant pour qu'oracle se comporte de façon similaire :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Contraintes en SQL

 

Sujets relatifs
lexique SQLPb pour récuperer la valeur retournée par une SP SQL
Fonction de connexion à SQL SERVERMessage d'erreur - requete SQL (resolu)
problème SQL moteur de rechercheSql - newbie
Erreur de lecture fichier SQL [résolu]SQL : équivalent LIMIT ?
à l'aide Access/SQL/VBARequête SQL pour access
Plus de sujets relatifs à : Contraintes en SQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR