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 :

  1. 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.

  2. Recensement

    Comptage de tous les habitants d'un pays.

    Cette requête doit être performante.

  3. 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.

  4. 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.