Si je comprends bien, la troisième forme normale (3NF) signifie essentiellement qu'il devrait y avoir exactement une clé.
Les n ° 2NF, 3NF et Boyce Codd Normal Form (BCNF) traitent des dépendances fonctionnelles . Une table en 2NF signifie qu'il n'y a pas de dépendances de clés partielles où une colonne non clé dépend d'un certain sous-ensemble approprié d'une clé multi-colonnes. Des tables telles que celle de notre exemple sont déjà en 2NF car chaque clé candidate est une seule colonne. Une table en 3FN signifie que chaque colonne non-clé est également ne dépend pas fonctionnellement sur une autre colonne non-clé, et créant ainsi une dépendance transitive. Peu importe qu'il y ait une ou cent clés candidates. En fait, c'est BCNF, et non 3NF, qui est la forme normale "finale" en ce qui concerne les dépendances fonctionnelles. En effet, une table peut être en 3NF mais pas en BCNF car il peut y avoir plusieurs clés candidates qui se chevauchent. Ainsi, lorsque nous utilisons le terme 3NF pour signifier «entièrement normalisé» en ce qui concerne les dépendances fonctionnelles, ce que nous voulons vraiment dire, c'est BCNF.
Si une table avec, par exemple, une colonne d'identification à incrémentation automatique a également une colonne connue pour être unique et non nulle, par exemple le numéro de sécurité sociale, cette autre colonne pourrait être utilisée comme clé.
Non seulement cela pourrait l'être, mais cela doit l' être si nous voulons nous assurer que les données stockées dans la base de données restent cohérentes avec les règles que nous avons identifiées dans le monde réel!
Ignorant les problèmes pratiques / commerciaux (par exemple, risque pour la sécurité / la confidentialité lors du passage du SSN en tant que clé / FK), du point de vue de la conception d'un schéma, une telle table ne serait-elle pas en 3NF car il y a effectivement 2 clés?
Comme expliqué ci-dessus, le fait que la table soit ou non en 3NF (ou plus important encore en BCNF) est orthogonal au nombre de clés candidates qu'elle contient.
La réponse varierait-elle selon qu'il y avait une clé unique dans l'autre colonne? Si oui, pourquoi?
Non, tout simplement parce que déterminer si la table est ou non dans 3NF n'a rien à voir avec le nombre de clés candidates qu'elle possède. Au lieu de cela, il a tout à voir avec le fait de s'assurer que toutes les colonnes non clés dépendent entièrement de ces clés candidates.
Mais cela ne mettre un point intéressant. Notez qu'une clé unique lorsqu'elle est définie comme une contrainte dans un SGBD n'est pas la même chose qu'un identificateur unique défini comme une règle métier dans un modèle commercial conceptuel. Peut-être que dans notre monde, nous connaissons toujours le SSN de la personne et qu'il sert donc de clé candidate pour une personne, et peut-être que nous introduisons également une clé de substitution dans le schéma logique que nous appelons l' ID de personne . Notre modèle commercial comprend la règle stipulant que le SSN est un identifiant unique pour une personne dans notre monde. Cela implique une dépendance fonctionnellede tous les attributs descriptifs de cet attribut d'identité. Cette règle ne change pas simplement parce que nous avons oublié ou choisi de ne pas informer le SGBD. C'est précisément pourquoi il est essentiel que la contrainte soit déclarée - afin que le SGBD puisse garantir que les données stockées sont conformes aux règles du modèle d'entreprise! Si nous n'avons pas créé cette contrainte unique sur SSN, nous pouvons maintenant créer par inadvertance plusieurs lignes pour la même personne avec le même SSN; chaque ligne ayant un identifiant de personne différent!
Une excellente introduction à ces sujets est la série de bases de données pratiques de Fabian Pascal et la conception de bases de données et la théorie relationnelle de Chris Date , dont découle cette réponse. Bien que chaque article de Fabian soit une lecture incontournable, l'article # 1 (qui définit clairement la différence entre les niveaux conceptuel, logique et physique) et l'article # 4 (qui définit clairement les différents types de clés) abordent spécifiquement cette question. De même, le livre entier de Chris est une lecture incontournable tandis que la partie II est la section consacrée à la normalisation en ce qui concerne la dépendance fonctionnelle.