Oui donc je ne peux pas savoir en une requête sur une table (via mon API) si c'est un élève ou un prof (car je ne peux pas faire de jointure).
Par contre effectivement pas de problème en SQL direct.
Oui donc je ne peux pas savoir en une requête sur une table (via mon API) si c'est un élève ou un prof (car je ne peux pas faire de jointure).
Par contre effectivement pas de problème en SQL direct.
Bonsoir Steve,
On récapépète : allons-y pour les 3 tables, en notant l’ajout de la colonne TypeUtilisateur dans l’en-tête de la table UTILISATEUR.
TABLE UTILISATEUR
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE TABLE UTILISATEUR ( UtilisateurId INT NOT NULL, Nom VARCHAR(64) NOT NULL, Prenom VARCHAR(64) NOT NULL, Sexe CHAR(1) NOT NULL, TypeUtilisateur char(1) NOT NULL, CONSTRAINT UTILISATEUR_PK PRIMARY KEY (UtilisateurId), CONSTRAINT UTILISATEUR_SEXE CHECK (Sexe IN ('F', 'M'), CONSTRAINT UTILISATEUR_TYPE CHECK (TypeUtilisateur IN ('P', 'E')) ) ;
TABLE ELEVE
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE ELEVE ( UtilisateurId INT NOT NULL , Moyenne INT NOT NULL , CONSTRAINT ELEVE_PK PRIMARY KEY (UtilisateurId) , CONSTRAINT ELEVE_UTILISATEUR_FK FOREIGN KEY (UtilisateurId) REFERENCES UTILISATEUR (UtilisateurId) ON DELETE CASCADE ) ;
TABLE PROFESSEUR
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE PROFESSEUR ( UtilisateurId INT NOT NULL , DateEmbauche DATE NOT NULL , FonctionId INT NOT NULL , CONSTRAINT PROFESSEUR_PK PRIMARY KEY (UtilisateurId) , CONSTRAINT PROFESSEUR_UTILISATEUR_FK FOREIGN KEY (UtilisateurId)REFERENCES UTILISATEUR (UtilisateurId) ON DELETE CASCADE , CONSTRAINT PROFESSEUR_FONCTION_FK FOREIGN KEY (FonctionId) REFERENCES FONCTION (FonctionId) ) ;
On a créé une redondance, il faut donc la contrôler : on doit s’assurer que si c’est un élève qui se connecte, alors dans la table UTILISATEUR, l’utilisateur est bien du type élève (colonne TypeUtilisateur = 'E') et on doit le retrouver dans la table ELEVE. Le trigger associé à la table ELEVE évolue ainsi :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 CREATE TRIGGER ELEVE_PROF_XT ON ELEVE INSTEAD OF INSERT AS DECLARE @Count AS INT, @Err AS VARCHAR(128) ; SET @Count = (SELECT COUNT(*) FROM INSERTED AS x JOIN PROFESSEUR AS y ON x.UtilisateurId = y.UtilisateurId) IF @Count > 0 BEGIN SET @Err = 'Tentative dinsertion dun élève ayant même identifiant quun prof existant.' RAISERROR (@Err, 15, 1) END ELSE SET @Count = (SELECT COUNT(*) FROM UTILISATEUR AS x JOIN INSERTED AS y ON x.UtilisateurId = y.UtilisateurId WHERE x.TypeUtilisateur = 'E') IF @Count = 0 BEGIN SET @Err = 'Table UTILISATEUR : pour un élève lattribut TypeUtilisateur doit être égal à "E"' RAISERROR (@Err, 15, 1) END ELSE INSERT INTO ELEVE SELECT UtilisateurId, Moyenne FROM INSERTED ; GO
Même principe pour les profs.
Bonsoir Steve,
Quel retour en arrière ! C’est quoi ces services ? Ça date des systèmes pré-relationnels des années soixante-dix ? Avez-vous droit à l’intégrité référentielle ? Aux contraintes CHECK dans les CREATE TABLE ? Aux triggers ? Aux fonctions ? Aux primitives de l’algèbre relationnelle (UNION, INTERSECTION, DIFFERENCE) ? Aux sous-requêtes ?
Désolé je n'avais pas eu la notification de réponse.
Je parlais ici des API Azure standard, qui elles, ne gèrent que des tables.
Par contre je me suis lancé dans la réalisation d'API personnalisées et je peux lancer les requêtes SQL que je souhaite. J'ai donc pu appliquer le modèle de donnée "optimum" à ma BDD et accéder/MAJ mes données via mes API personnalisées !
Tout est nickel.
Merci encore pour vos réponses et votre aide !
Bonsoir Steve,
Ouf ! Bonne route
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager