2

J'ai une question rapide sur la normalisation (3NF). Si j'ai une table qui est définie comme ...Dépendances circulaires dans 3NF

client (nom d'utilisateur , nom, prénom, âge, sexe, race)

Et nom d'utilisateur détermine firstName, lastName, l'âge, le sexe, la race

Mais .. pour les besoins du raisonnement, nous pouvons également supposer que firstName, lastName peut être utilisé pour identifier de manière unique une ligne dans la table, donc firstName, lastName détermine nom d'utilisateur, l'âge, le sexe, la race

La table est en 3NF car certains attributs non-premiers (prénom, nom) peuvent être utilisés pour déterminer d'autres attributs dans la table, mais PK (nom d'utilisateur) peut déterminer les attributs non principaux qui sont ensuite utilisés pour déterminer d'autres attributs les attributs. Je comprends que ce n'est pas dans BCNF en raison de ce problème de dépendance circulaire, mais j'espère que c'est au moins en 3NF.

Merci d'avance pour toute aide.

+1

* "certains attributs non-premiers (prénom, nom de famille)" * Ce sont les attributs premiers. –

+0

ils ne sont pas premiers s'ils ne font pas partie de la clé, correct? Ou sont-ils non premiers s'ils ne font pas partie de la clé candidate? – Feek

+3

Les PK n'ont pas d'importance. CKs font. Ils sont premiers parce qu'ils sont dans un CK. – philipxy

Répondre

4

Les circularités ne sont pas pertinentes, et elles se trouvent dans BCNF et dans toutes les NF inférieures. Une définition de BCNF est que tous les déterminants des FD non triviaux sont des super-clés. S'il y a plusieurs CK (clés candidates), qu'il en soit ainsi. Les CK détermineront les attributs des autres CK, car un CK détermine chaque attribut.

Les PK ne sont pas pertinents pour la normalisation (et toutes les autres relations relationnelles), les CK sont importants. Un PK est juste un CK que vous avez décidé d'appeler un PK.

Il y a deux CK ici, {username} et {firstName, lastName}. Les attributs principaux, c'est-à-dire ceux dans les CK, sont nom d'utilisateur, prénom & lastName.