CREATE TABLE TYPE_ELEMENT
(
TypeElementId INT NOT NULL
, TypeElementLibelle VARCHAR(16) NOT NULL
, CONSTRAINT TYPE_ELEMENT_PK PRIMARY KEY (TypeElementId)
) ;
CREATE TABLE ELEMENT
(
ElementId INT NOT NULL
, TypeElementId INT NOT NULL
, ElementTexte VARCHAR(64) NOT NULL
, CONSTRAINT ELEMENT_PK PRIMARY KEY (ElementId)
, CONSTRAINT ELEMENT_TYPE_ELEMENT_FK FOREIGN KEY (TypeElementId)
REFERENCES TYPE_ELEMENT (TypeElementId) ON DELETE CASCADE
) ;
CREATE TABLE COMPOSITION
(
ElementComposantId INT NOT NULL
, ElementComposeId INT NOT NULL
, CONSTRAINT COMPOSITION_ELEMENT_COMPOSANT_FK FOREIGN KEY (ElementComposantId)
REFERENCES ELEMENT (ElementId) ON DELETE CASCADE
, CONSTRAINT COMPOSITION_ELEMENT_COMPOSE_FK FOREIGN KEY (ElementComposeId)
REFERENCES ELEMENT (ElementId)
) ;
CREATE TABLE REGLE
(
RegleId INT NOT NULL
, ElementId INT NOT NULL
, RegleTexte VARCHAR(64) NOT NULL
, NbPhrases INT NOT NULL
, CONSTRAINT REGLE_PK PRIMARY KEY (RegleId)
, CONSTRAINT REGLE_ELEMENT_FK FOREIGN KEY (ElementId)
REFERENCES ELEMENT (ElementId)
) ;
CREATE TABLE DIFFICULTE
(
DifficulteId INT NOT NULL
, DifficulteTexte VARCHAR(32) NOT NULL
, CONSTRAINT DIFFICULTE_PK PRIMARY KEY (DifficulteId)
) ;
CREATE TABLE PHRASE
(
RegleId INT NOT NULL
, PhraseId INT NOT NULL
, DifficulteId INT NOT NULL
, Position INT NOT NULL
, Texte VARCHAR(64) NOT NULL
, CONSTRAINT PHRASE_PK PRIMARY KEY (RegleId, PhraseId)
, CONSTRAINT PHRASE_REGLE_FK FOREIGN KEY (RegleId)
REFERENCES REGLE (RegleId)
, CONSTRAINT PHRASE_DIFFICULTE_FK FOREIGN KEY (DifficulteId)
REFERENCES DIFFICULTE (DifficulteId)
) ;
CREATE TABLE CORRIGE
(
RegleId INT NOT NULL
, PhraseId INT NOT NULL
, CorrigeTexte VARCHAR(64) NOT NULL
, CONSTRAINT CORRIGE_PK PRIMARY KEY (RegleId, PhraseId)
, CONSTRAINT CORRIGE_PHRASE_FK FOREIGN KEY (RegleId, PhraseId)
REFERENCES PHRASE (RegleId, PhraseId) ON DELETE CASCADE
) ;
CREATE TABLE UTILISATEUR
(
UtilisateurId INT NOT NULL
, UtilisateurNom VARCHAR(32) NOT NULL
, CONSTRAINT UTILISATEUR_PK PRIMARY KEY (UtilisateurId)
) ;
CREATE TABLE CHOISIR
(
UtilisateurId INT NOT NULL
, RegleId INT NOT NULL
, Statut VARCHAR(24) NOT NULL DEFAULT 'à acquérir'
, Compteur INT NOT NULL DEFAULT 0 – nombre de fois où Raoul a bien répondu à toutes les phrases de la règle
, CONSTRAINT CHOISIR_PK PRIMARY KEY (UtilisateurId, RegleId)
, CONSTRAINT CHOISIR_UTILISATEUR_FK FOREIGN KEY (UtilisateurId)
REFERENCES UTILISATEUR (UtilisateurId) ON DELETE CASCADE
) ;
CREATE TABLE REPONDRE
(
UtilisateurId INT NOT NULL
, RegleId INT NOT NULL
, PhraseId INT NOT NULL
, Fois INT NOT NULL
, Position INT NOT NULL
, CONSTRAINT REPONDRE_PK PRIMARY KEY (UtilisateurId, RegleId, PhraseId, Fois)
, CONSTRAINT REPONDRE_CHOISIR_FK FOREIGN KEY (UtilisateurId, RegleId)
REFERENCES CHOISIR (UtilisateurId, RegleId) ON DELETE CASCADE
, CONSTRAINT REPONDRE_PHRASE_FK FOREIGN KEY (RegleId, PhraseId)
REFERENCES PHRASE (RegleId, PhraseId)
) ;
INSERT INTO TYPE_ELEMENT (TypeElementId, TypeElementLibelle) VALUES
(1, 'Partie'), (2, 'Sous-partie'), (3, 'Rubrique') ;
-- SELECT * FROM TYPE_ELEMENT ;
INSERT INTO ELEMENT (ElementId, TypeElementId, ElementTexte) VALUES
(1, 1, 'Formes et accords du verbe')
, (2, 1, 'Formes et accords du nom, de l''adjectif du verbe')
, (3, 1, 'Orthographe lexicale, signes graphiques et syntaxe')
, (4, 1, 'Ces mots que l''on confond')
, (5, 2, 'Le verbe : ses formes')
, (6, 2, 'Syntaxe')
, (7, 3, 'L''infinitif')
, (8, 3, 'Les noms : leur féminin, leur pluriel')
;
-- SELECT * FROM ELEMENT ;
INSERT INTO COMPOSITION (ElementComposantId, ElementComposeId) VALUES
(5,1), (6, 3), (7, 5), (8, 2)
;
-- SELECT * FROM COMPOSITION ;
INSERT INTO DIFFICULTE (DifficulteId, DifficulteTexte) VALUES
(1, 'Facile'), (2, 'Assez facile'), (3, 'Piège classique'), (4, 'Niveau Mérimée') ;
-- SELECT * FROM DIFFICULTE ;
INSERT INTO REGLE (RegleId, ElementId, RegleTexte, NbPhrases) VALUES
(1, 4, 'Le pluriel des noms : cas généraux', 5)
, (2, 4, 'est-ce que', 15)
, (3, 4, 'a ; à', 2)
, (4, 4, 'confusions', 6)
;
-- SELECT * FROM REGLE ;
INSERT INTO PHRASE (RegleId, PhraseId, DifficulteId, Position, Texte) VALUES
(1, 1, 1, 5, 'Le petit chat est morts')
, (1, 2, 2, 5, 'Il a un petit soucis')
, (1, 3, 1, 3, 'Des yeux marrons')
, (1, 4, 2, 4, 'Il est huit heure')
, (1, 5, 3, 0, 'Huit cent deux kilos')
, (3, 1, 2, 0, 'Je vais à Paris')
, (3, 2, 2, 0, 'Pierre a faim')
, (3, 3, 4, 0, 'Ce crayon est a moi')
, (4, 1, 1, 2, 'Il et fort et agile')
, (4, 2, 1, 0, 'Elle est grande')
, (4, 3, 4, 0, 'Il aime le cuissot de chevreuil')
, (4, 4, 4, 5, 'Il aime aussi le cuissot de veau')
, (4, 5, 3, 0, 'C''est une imbécillité')
;
SELECT * FROM PHRASE ;
INSERT INTO CORRIGE (RegleId, PhraseId, CorrigeTexte) VALUES
(4, 1, 'Il est fort et agile')
, (1, 1, 'Le petit chat est mort')
, (4, 4, 'Il aime aussi le cuisseau de veau')
, (1, 2, 'Il a un petit souci')
, (3, 3, 'Ce crayon est à moi')
;
SELECT * FROM CORRIGE ;
INSERT INTO UTILISATEUR (UtilisateurId, UtilisateurNom) VALUES
(1, 'Fernand'), (2, 'Raoul'), (3, 'Paul')
;
-- SELECT * FROM UTILISATEUR ;
-- Raoul choisit la règle 1. Son statut pour cette règle est celui par défaut ('à acquérir').
-- Le nombre de fois (Compteur) où il a satisfait à l'ensemble des phrase de cette règle est égal à 0 par défaut.
INSERT INTO CHOISIR (UtilisateurId, RegleId) VALUES
(2, 1)
;
SELECT *, 'on amorce. Le statut doit être à ''à acquérir'' et Compteur = 0' FROM CHOISIR ;
INSERT INTO REPONDRE (UtilisateurId, RegleId, PhraseId, Fois, Position) VALUES
(2, 1, 1, 1, 5)
, (2, 1, 1, 2, 5)
, (2, 1, 1, 3, 5)
, (2, 1, 1, 4, 5)
, (2, 1, 1, 5, 5)
, (2, 1, 1, 6, 5)
, (2, 1, 2, 1, 5)
, (2, 1, 2, 2, 5)
, (2, 1, 2, 3, 0) -- erreur de Raoul qui n'a donc pas tout acquis 3 fois
, (2, 1, 3, 1, 3)
, (2, 1, 3, 2, 3)
, (2, 1, 3, 3, 3)
, (2, 1, 4, 1, 4)
, (2, 1, 4, 2, 4)
, (2, 1, 4, 3, 4)
, (2, 1, 5, 1, 0)
, (2, 1, 5, 2, 0)
, (2, 1, 5, 3, 0)
;
SELECT *, 'Le statut doit encore être à ''acquisition en cours'' et Compteur = 2' FROM CHOISIR ;
SELECT * FROM REPONDRE ;
SELECT *, '' AS 'CHOISIR' FROM CHOISIR ;
-- Cette fois-ci Raoul ne se plante pas
INSERT INTO REPONDRE (UtilisateurId, RegleId, PhraseId, Fois, Position) VALUES (2, 1, 2, 4, 5) ;
SELECT *, '' AS 'CHOISIR' FROM CHOISIR ;
A vous de secouer tout ça. J’espère qu’il ne reste pas trop de défauts dans la cuirasse...
Partager