Big Brother is Watching You
[45 minutes]
Soit une base de données composée d'une seule table destinée à recevoir un enregistrement pour chaque personne vivante au monde. Le schéma de la base est le suivant :
Habitant (#Numero, Nom, Prenom, N°Rue, Rue, Quartier, Ville, Etat, Pays, DateNaissance, PaysNaissance, VilleNaissance)
On dispose également des informations concernant les questions qui seront posées à cette base ainsi que les performances attendues quand aux réponses à ces questions :
Recherche d'individus
Sélection d'enregistrements étant donné un nom et un pays, projection sur les noms et prénoms et tri alphabétique sur les prénoms.
Cette requête doit être le plus performante possible.
Recensement
Comptage de tous les habitants d'un pays.
Cette requête doit être performante.
Informations sur un individu
Sélection d'un enregistrement étant donné un numéro et projection de l'ensemble des informations.
Si cette requête est performante, tant mieux, mais elle n'est pas exécutée très souvent et la réponse peut généralement attendre.
Statistiques
Calcul de l'age moyen de la population mondiale étant donné une tranche d'age.
Aucune performance n'est attendue de cette requête qui s'exécute assez rarement et toujours en tâche différée.
Question
Écrivez en SQL les questions qui seront posées à la BD.
Indice
On pose :
[X] désigne le paramètre X
Now() est une fonction qui renvoie la date du jour
Question
Proposez des solutions pour optimiser l'implémentation physique de cette base de données.
Indice
Proposez :
un partitionnement horizontal
un partitionnement vertical
deux index
une vue matérialisée
Question
Réécrivez les requêtes avec le nouveau schéma de la base.