Vous êtes sur la page 1sur 4

Open sidebar

Création de la base de données.

ELKESS MOHAMMED AMINE


donnez la syntaxe de la requête de sélection avec les différentes clauses. (2pt)
Partie Pratique (38/40 points)
Dans l’objectif de créer une application pour la gestion des projets au sein d’une
entreprise de développement informatique on vous propose le schéma relationnel
suivant :

Service (Num_serv, Nom_serv, Date_creation)

Employe (Matricule, Nom, Prenom, DateNaissance, Adresse, Salaire,Grade, Num_serv#)

Projet (Num_prj, Nom_prj, Lieu, nbr_limite_taches,Num_serv#)

Tache (Num_tach, Nom_tache, date_debut, date_fin, cout, Num_prj#)

Travaille (Matricule#,Num_tache#, Nombre_heure)

un projet est réalisé en plusieurs étapes (Tache) selon le processus de conception


choisi ; une tache est réalisée par un ou plusieurs employés chaqu’un avec une
masse horaire définit (nombre_heure).

Remarque :

souliginé : Clé primaire


# : clé étrangère
Avec les contraintes suivantes :

La contrainte CK_Employe_dateNaissance : l’âge de l’employé doit être supérieur à


18.
La contrainte CK_Tache_duree : une tache a une durée minimale de 3 jours (Durée =
Date_fin – Date_debut)
La contraint CK_Tache_cout : le côut miniaml d’une tache est de 1000DH par jour.
( cout >= (Date_fin – Date_debut)j x1000 )

N.B :

Les clés primaires sont incrémentées automatiquement sauf le numéro de la tache.


le nom du projet doit être codé en français et sensible à la casse.
Questions :

Créer la base de données (10pts):


donner le script permettant de créer la base de données gestion_projet avec le
schéma relationnel précédant. (9pts)
ajouter le champ calculé âge à la table Employé. (1pt)
Créer les requêtes de sélection (19pts):
Afficher les employés dont le nom commence avec « El » et ne se termine pas par une
lettre entre a et f, trier la liste par date de naissance.
Afficher les noms des taches (en majuscule) qui prendrons fin ce mois ci.
Compter le nombre de grades différents de l’entreprise.
Afficher les employés qu’ont participé à un projet affecter à un service différent
où il travaille.
Afficher les projets avec une tache de durée inférieure à 30jours et une autre
supérieure à 60jours (Durée d’une tache = Date de Fin – date de début)
Afficher la masse horaire travaillée cette année (travaille débuter et terminer
cette année) par projet (Masse horaire = somme (nombre_heure))
Afficher le matricule et le nom des employés qui ont participé à la réalisation de
plusieurs projets.
Afficher le matricule, le nom, la date d’anniversaire et l’adresse des employés qui
vont fêter leur anniversaire la semaine prochaine.
Afficher le(s) projet(s) qui se composent du plus grand nombre de taches.
Afficher la durée de réalisation par projet (La durée de réalisation d’un projet =
la date de fin de la dernière tache de ce projet – la date de début de la première
tache du projet (utiliser Min et Max))
Créer les requêtes de mise à jour (3pts):
Modifier les salaires des employés selon la règle suivante (1pt5):
sans modification pour les employés âgés de moins de 58 ans,
augmentation de 0.5% pour les employés âgés entre 58 et 60 ans,
augmentation de 5% pour les employés âgés de plus que 60 ans.
Supprimer les taches non réalisées (une tache non réalisée est une tache dont la
date de fin est dépassée sans qu’elle contienne un travail) (1pt5).
Gérer la sécurité de la base de données (6pts):
Créer les deux profils de connexion suivants (1pt) :
profil SQL server : CnxGestionnaire
profil Windows : ChefProjet-PC\ChefProjet
Créer un utilisateur au niveau de la base de données gestion_projet pour chaque
profil (1pt) :
Gestionnaire
ChefProjet
Attribuer les autorisations suivantes aux utilisateurs concernés (4pts) :
Gestionnaire :
le droit de mise à jour (insertion, modification et suppression) de toutes les
tables sauf la table « employé ».
ChefProjet
le droit de suppression de toutes les tables sauf la table « Employé »
le droit de modification du champ « adresse » de la table « Employé » (coupler avec
un vue)

Script de création de la base de données (10pts):

sql
Copy code
CREATE DATABASE gestion_projet;

USE gestion_projet;

CREATE TABLE Service (


Num_serv INT IDENTITY(1,1) PRIMARY KEY,
Nom_serv VARCHAR(50) NOT NULL,
Date_creation DATE NOT NULL
);

CREATE TABLE Employe (


Matricule INT IDENTITY(1,1) PRIMARY KEY,
Nom VARCHAR(50) NOT NULL,
Prenom VARCHAR(50) NOT NULL,
DateNaissance DATE NOT NULL CHECK(DATEDIFF(YEAR, DateNaissance, GETDATE()) >=
18),
Adresse VARCHAR(100) NOT NULL,
Salaire FLOAT NOT NULL,
Grade VARCHAR(10) NOT NULL,
Num_serv INT NOT NULL FOREIGN KEY REFERENCES Service(Num_serv)
);

CREATE TABLE Projet (


Num_prj INT IDENTITY(1,1) PRIMARY KEY,
Nom_prj VARCHAR(50) NOT NULL,
Lieu VARCHAR(50) NOT NULL,
nbr_limite_taches INT NOT NULL,
Num_serv INT NOT NULL FOREIGN KEY REFERENCES Service(Num_serv)
);

CREATE TABLE Tache (


Num_tach INT PRIMARY KEY,
Nom_tache VARCHAR(50) NOT NULL,
date_debut DATE NOT NULL,
date_fin DATE NOT NULL CHECK(DATEDIFF(DAY, date_debut, date_fin) >= 3),
cout FLOAT NOT NULL CHECK(cout >= (DATEDIFF(DAY, date_debut, date_fin) *
1000)),
Num_prj INT NOT NULL FOREIGN KEY REFERENCES Projet(Num_prj)
);

CREATE TABLE Travaille (


Matricule INT NOT NULL FOREIGN KEY REFERENCES Employe(Matricule),
Num_tache INT NOT NULL FOREIGN KEY REFERENCES Tache(Num_tach),
Nombre_heure FLOAT NOT NULL,
PRIMARY KEY (Matricule, Num_tache)
);

-- Ajout du champ calculé âge à la table Employe


ALTER TABLE Employe ADD Age AS DATEDIFF(YEAR, DateNaissance, GETDATE());

Requêtes de sélection (19pts):

Afficher les employés dont le nom commence avec « El » et ne se termine pas par une
lettre entre a et f, trier la liste par date de naissance.
sql
Copy code
SELECT *
FROM Employe
WHERE Nom LIKE 'El%' AND Nom NOT LIKE '%[a-f]'
ORDER BY DateNaissance;
Afficher les noms des taches (en majuscule) qui prendrons fin ce mois ci.
scss
Copy code
SELECT UPPER(Nom_tache) AS Nom_tache_majuscule
FROM Tache
WHERE MONTH(date_fin) = MONTH(GETDATE()) AND YEAR(date_fin) = YEAR(GETDATE());
Compter le nombre de grades différents de l’entreprise.
sql
Copy code
SELECT COUNT(DISTINCT Grade) AS Nombre_grades_different
FROM Employe;
Afficher les employés qu’ont participé à un projet affecter à un service différent
où il travaille.
sql
Copy code
SELECT DISTINCT e.*
FROM Employe e
INNER JOIN Travaille t ON e.Matricule = t.Matricule
INNER JOIN Tache ta ON ta.Num_tach = t.Num_tache
INNER JOIN Projet p ON p.Num_prj = ta.Num_prj
WHERE e.Num_serv <> p.Num_serv;
Afficher les projets avec une tache de durée inférieure à 30jours et une autre
supérieure à 60jours (Durée d’une tache = Date de Fin – date de début)
sql
Copy code
SELECT p.*
FROM Projet p
WHERE EXISTS

ChatGPT Mar 14 Version. Free Research Preview. Our goal is to make AI systems more
natural and safe to interact with. Your feedback will help us improve.

Vous aimerez peut-être aussi