La seconde forme normale ( 2NF ) est un niveau de normalisation des bases de données défini par l'informaticien britannique Edgar F. Codd . Une relation (ou une table , en SQL ) est en 2NF si elle est en première forme normale (1NF) et ne contient aucune dépendance partielle. Une dépendance partielle se produit lorsqu'un attribut non premier (c'est-à-dire un attribut n'appartenant à aucune clé candidate ) dépend fonctionnellement d'un sous-ensemble propre des attributs constituant une clé candidate . Pour être en 2NF, une relation doit avoir tous ses attributs non premiers dépendant de l'ensemble complet des attributs de chaque clé candidate.
Par exemple, une relation avec la clé composite {Pays, District} violerait la 2NF si un attribut était ajouté dont la signification ne dépendrait pas à la fois du pays et du district auquel il s'applique. Un attribut « ResponsablePays » varierait d'un pays à l'autre et fournirait des informations spécifiques à chaque pays, mais pas à chaque district ; il ne dépendrait donc que de la moitié de la clé composite. Ceci présenterait plusieurs inconvénients, notamment la duplication inutile de chaque responsable pour chaque district de son pays.
La normalisation en 2NF vise à réduire la redondance et à rendre la structure d'une base de données plus claire et flexible en l'organisant selon les dépendances fonctionnelles. La 2NF et la troisième forme normale (3NF) ont été définies dans l'article de Codd intitulé « Further Normalization of the Data Base Relational Model » en 1971 , un an après la définition de la 1NF par Codd dans « A Relational Model of Data for Large Shared Data Banks » en 1970. Toutes les formes normales font partie intégrante du modèle relationnel de conception de bases de données de Codd.
Exemple
Conception qui enfreint la 2NF
La relation suivante, en première forme normale (2NF), contient une clé composite : {Manufacturer, Model}. L’ attribut non premier ManufacturerCountry dépend fonctionnellement de l’attribut Manufacturer (chaque Manufacturer étant associé à un ManufacturerCountry distinct), mais pas de l’attribut Model. Par conséquent, ManufacturerCountry ne dépend que d’un sous-ensemble propre de la clé {Manufacturer}, ce qui le rend partiellement dépendant de la clé et contrevient à la 2NF.
Conception conforme à la 2NF
Pour mettre une relation déjà en 1NF en accord avec la 2NF, tout attribut dépendant seulement d'une partie d'une clé composite doit être extrait et placé dans une relation distincte où les attributs dont il dépend constituent l'intégralité d'une clé candidate . Comme illustré ci-dessous, l'attribut ManufacturerCountry peut être retiré de la relation « brushbrush » d'origine et placé dans une nouvelle relation où l'attribut Manufacturer constitue la clé primaire complète. Le nouvel attribut Country dépend ainsi de la clé complète et non plus seulement d'une partie, transformant la dépendance partielle précédente en dépendance totale et plaçant les deux relations en 2NF.