Bases des bases de données

La clé primaire d'une table Commande(NumCommande, NumArticle, Quantite, NumClient, NomClient) est {NumCommande, NumArticle}, et ses dépendances fonctionnelles sont {NumCommande, NumArticle} → Quantite, NumCommande → NumClient et NumClient → NomClient. Quel est le résultat correct de la normalisation de cette table jusqu'à la troisième forme normale (3NF) ?

  1. ALigneCommande(NumCommande, NumArticle, Quantite, NumClient), Client(NumClient, NomClient)
  2. BLigneCommande(NumCommande, NumArticle, Quantite), Commande(NumCommande, NumClient), Client(NumClient, NomClient)
  3. CLigneCommande(NumCommande, NumArticle, Quantite), Commande(NumCommande, NumClient, NomClient)
Afficher la réponse et l'explication

Réponse : B. LigneCommande(NumCommande, NumArticle, Quantite), Commande(NumCommande, NumClient), Client(NumClient, NomClient)

La deuxième forme normale est l'état d'une table en première forme normale dans laquelle aucune colonne ne dépend d'une partie seulement de la clé primaire (pas de dépendance fonctionnelle partielle). NumCommande → NumClient est une dépendance fonctionnelle partielle, car NumClient est déterminé par NumCommande seul, qui n'est qu'une partie de la clé primaire ; la table d'origine est donc en première forme normale mais pas en deuxième forme normale. Placer les colonnes déterminées par NumCommande dans Commande(NumCommande, NumClient, NomClient) donne la deuxième forme normale. La troisième forme normale (3NF) est l'état d'une table en deuxième forme normale dans laquelle aucune colonne n'est déterminée par l'intermédiaire d'une colonne autre que la clé primaire (pas de dépendance fonctionnelle transitive). Commande contient encore la dépendance fonctionnelle transitive NumCommande → NumClient → NomClient ; on sépare donc aussi Client(NumClient, NomClient). Les 3 tables LigneCommande(NumCommande, NumArticle, Quantite), Commande(NumCommande, NumClient) et Client(NumClient, NomClient) sont alors en troisième forme normale. Les joindre sur NumCommande et NumClient restitue la table d'origine.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases des bases de données

  1. La clé primaire d'une table Employe(NumEmploye, Nom, CodeService, NomService) est NumEmploye, et chaque colonne contient une seule valeur. Les dépendances fonctionnelles sont NumEmploye → Nom, NumEmploye → CodeService et CodeService → NomService. Quelle proposition indique correctement la forme normale de cette table ?
  2. Dans une base de données utilisée surtout pour la lecture et l'agrégation, des tables issues de la normalisation sont parfois délibérément fusionnées en une seule, de sorte que les mêmes données sont stockées en double (dénormalisation). Quelle combinaison associe correctement un avantage et un inconvénient de cette conception ?
  3. Dans un diagramme E-R, il existe une relation plusieurs-à-plusieurs entre étudiants et cours : un étudiant suit plusieurs cours, et un cours est suivi par plusieurs étudiants. Quelle est la manière appropriée de mettre en œuvre cette relation avec des tables d'une base de données relationnelle ?
  4. Sur une table Compte, on démarre une transaction et l'on exécute un UPDATE qui retire 300 du solde du compte A et un UPDATE qui ajoute 300 au solde du compte B. On exécute ensuite ROLLBACK au lieu de COMMIT. Qu'advient-il de la table Compte ?
  5. Parmi les propriétés ACID qu'une transaction doit posséder, laquelle garantit qu'un virement qui débite le compte A et crédite le compte B est soit effectué entièrement, soit pas du tout, même si une panne survient en cours de route ?