web-dev-qa-db-fra.com

Quelle est la différence entre 3NF et BCNF?

Quelqu'un peut-il s'il vous plaît expliquer la différence entre 3NF et BCNF pour moi? Ce serait formidable si vous pouviez aussi donner quelques exemples. Merci.

33
cactusboat

La différence entre 3NF et BCNF est subtile.

3NF

Définition

Une relation est dans 3NF si elle est dans 2NF et si aucun attribut non principal n’est transitoirement dépendant de la clé primaire. En d'autres termes, une relation R est dans 3NF si, pour chaque dépendance fonctionnelle X ⟶ A dans R, au moins l'une des conditions suivantes est remplie:

  1. X est une clé ou une super-clé dans R
  2. A est un attribut principal dans R

Exemple

Compte tenu de la relation suivante:

EMP_DEPT (prénom, numéro d'employé, date de naissance, adresse, numéro de département, nom de département)

Un employé ne peut travailler que dans un seul service et chaque service compte plusieurs employés.

La clé de candidat est employeeNumber.

Considérez les dépendances fonctionnelles suivantes:

  1. employeeNumber ⟶ firstName, dateOfBirth, adresse, departmentNumber
  2. departmentNumber ⟶ departmentName

Compte tenu de la définition ci-dessus, il est possible de conclure que la relation EMP_DEPT n'est pas dans 3NF car la deuxième dépendance fonctionnelle ne remplit aucune des 2 conditions de 3NF:

  1. departmentNumber n'est pas une clé ou une super-clé dans EMP_DEPT
  2. departmentName n'est pas un attribut principal dans EMP_DEPT

BCNF

Définition

Une relation R est dans BCNF si elle est dans 3NF et pour chaque dépendance fonctionnelle X ⟶ A dans R, X est une clé ou une super-clé dans R. En d'autres termes, la seule différence entre 3NF et BCNF est que, dans BCNF, elle n'est pas présente. la deuxième condition du 3NF. Cela rend la BCNF plus stricte que la 3NF car toute relation dans BCNF sera dans 3NF, mais pas nécessairement toutes les relations dans 3NF seront dans BCNF.

Exemple

Compte tenu de la relation suivante:

STUDENT_COURSE (studentNumber, socialSecurityNumber, courseNumber)

Un étudiant peut assister à de nombreux cours et dans un cours, il peut y avoir de nombreux étudiants.

Les clés du candidat sont:

  1. socialSecurityNumber, courseNumber
  2. studentNumber, courseNumber

Considérez les dépendances fonctionnelles suivantes:

  1. studentNumber ⟶ socialSecurityNumber
  2. socialSecurityNumber ⟶ studentNumber

Compte tenu de la définition ci-dessus, il est possible de conclure que STUDENT_COURSE n'est pas dans BCNF car au moins studentNumber n'est pas une clé ou une super-clé dans STUDENT_COURSE.

45
Mosty Mostacho