problème de contrainte

problème de contrainte - SQL/NoSQL - Programmation

Marsh Posté le 14-09-2008 à 18:11:44    

station (   nomStation  ,  capacite ,   lieu ,   region ,   tarif )
activite(   nomStation ,   libelle ,   prix )
 
a partir de ces deux tables je voudrais appliquer une contrainte lors de la création de la table activité qui dit;
 
le prix de chaque activité doit être supérieur à zéro et inférieur au tarif de chaque station.
 
 
j'implémente ma bd sur sql server 2000
veuillez m'excuser car je suis débutant en bd  
comment faire  et merci de bien vouloir m'aider
   

Reply

Marsh Posté le 14-09-2008 à 18:11:44   

Reply

Marsh Posté le 15-09-2008 à 11:34:59    

Question : Qu'est-il prévu si le prix est inférieur ?
 
- Message d'alerte dans un fichier.
- ou boite d'alerte sur l'écran de l'utilisateur
- ou boite d'alerte sur l'écran d'un administrateur
- ou rejet de la saisie sans rien dire
- ou autre ?
 
Le plus simple est d'inclure cette condition dans le programme de saisie, aevc une petite vérification de la validté des données lors de l'appui sur le bouton "OK" ou "Enregistrer".
 
Un principe, que privilégie beaucoup d'informaticiens dont votre serviteur, consiste à séparer les données et les traitements. Autrement dit, à ne pas mettre de contraintes dans la base données, mais plutôt dans les programmes d'accès à la base. Cela offre plus de souplesse. Par exemple, cela permet de charger la tables des activités sans être bloqué parce que la table des stations n'existerait pas encore ou serait temporairement mauvaise. Faire ces chargements est utile pour faire des tests, ou pour récupérer une situation antérieure en cas de problème. Cela permet aussi d'avoir des alertes personnalisées.

Reply

Marsh Posté le 15-09-2008 à 17:35:50    

1/ Il manque un "ID" dans la table station
2/ La référence à la station depuis la table Activite ne sera pas "nomstation", mais "stationId" qui est une foreign key vers station.id
 
Ensuite, tu peux faire comme le dit olivthill depuis le programme. Perso, j'aime moyen si réellement une valeur inconsistante met en péril l'intégrité desdonnées (à toi de savoir si c'est grave ou non qu'il soit possible de passer outre cette limite), ou alors avec deux triggers :
=> Un premier sur activite before insert, update, qui va effectuer la vérification de la valeur de activite.prix
=> Un second sur station before update qui va effectuer la vérification de la valeur dans les lignes de la table activite liées à ton station.id
 
Les deux triggers lèveront une exception qui sera trappable depuis ton programme. Ainsi, si une personne bidouille la base directement en SQL ou par un autre moyen que ton programme, elle ne pourra pas passer outre la contrainte.


Message édité par MagicBuzz le 15-09-2008 à 17:36:20
Reply

Marsh Posté le 15-09-2008 à 17:37:24    

ps : renomme tes deux topics, parceque ce matin quand j'ai jeté un oeil à l'autre j'ai cru à un double poste, et j'ai même pas regardé celui-ci

Reply

Marsh Posté le 16-09-2008 à 14:35:10    

Merci à vous mais le tp est réalisé étape par étape. A cette étape le prof demande à ce ke nous utilisions la contrainte check. Sion OlivThil peux peux me donner plus d'infos sur la programmation de cette contrainte dans le programme? Merci à vous tous.

Reply

Marsh Posté le 16-09-2008 à 14:41:54    

je suis en pleine réinstallation de SQL Server, mais j'ai jamais entendu parler de contrainte CHECK qui permet d'interroger une requête (et encore moins sous SQL Server 2000...) :??:
 
dans tous les cas, va sur la MSDN pour voir la syntaxe de CHECK (mais pour moi le plus évolué que tu puisses faire, c'est comparer avec un champ de la même table, sur la ligne checkée)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed