IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Différence entre 2NF et 3NF


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut Différence entre 2NF et 3NF
    Bonjour,

    J'ai beau lire plusieurs exemples sur la 2ème forme normale et la 3ème forme normale, je ne saisis pas la différence entre les 2.

    A chaque fois que je fais un exercice sur la normalisation de données je passe directement de 1NF à 3NF.

    Je prend pour exemple cette table non normalisée (0NF):



    Cette table n'est pas en 1NF car elle ne représente pas les données sous "forme atomique" (il y a sur la même ligne 2 adresses pour un client).

    Voici la table en 1NF maintenant:



    Voilà, maintenant pourquoi est-ce que ce n'est pas en 2NF, moi je raisonne comme ça, on voit qu'il y a de la redondance (il y a plusieurs fois le cName d'un client), sinon si je suis la définition:

    cName dépend de ClientNo (qui est la clé primaire), mais propertyNo et pAdress ne dépendent pas de ClientNo, c'est la raison pour laquelle on n'est pas en 2NF.

    Voici ma table en 2NF:



    Voilà, là pour moi c'est aussi en 3NF (ClientNo est clé étrangère dans l'autre table).

    Alors, j'aimerai savoir dans mon exemple dans quel cas, mon shéma pourrait être en 2NF mais pas en 3NF histoire de bien saisir la différence entre ces différentes formes de normalisation.

    En espérant que vous puissiez m'aider,

    Cordialement,

    sushis

  2. #2
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Par défaut
    Bonjour,

    Vous avez oublié les tables

    J'en profites pour glisser ce très bon tuto d'fsmrel...

    Cordialement
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  3. #3
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 218
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Pour parler de la 2NF et de la 3NF, il faut d’abord avoir défini les clés de la table. Dans le cas de votre table, {ClientNo} n’est pas clé puisqu’il y a deux lignes ayant même valeur pour ClientNo :




    Donc, commencez par définir (au moins) une clé. Et suivez le conseil de Chtulus

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    La table est en 1NF c'est normal qu'il y ait de la redondance (2 fois la même clé).

    Si vous regardez ma table en 2NF il n'y a plus de redondance.

    J'ai relu le cours et l'exemple de passage de 2NF à 3NF montre ceci:

    2NF:



    3NF:



    En fait, la table propriétaire est découpée en 2 avec la table propriétaire et propriété à louer.

    Ce que je ne comprends pas, c'est qu'il a redondance dans la 2NF (le propriétaire est affiché 2 fois), je ne comprends pas pourquoi le "modèle" est en 2NF.

    Merci pour le cours je vais lire ça.

  5. #5
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 218
    Billets dans le blog
    16
    Par défaut
    Bonsoir sushis,

    Je répète que vous mettez la charrue avant les bœufs. Vous n’avez toujours pas défini les clés candidates de la table :



    Les énoncés de la 2NF à la 5NF sont construits sur la base des clés candidates, donc vous ne pourrez tirer aucune conclusion sur la normalisation de cette table qui pour l'instant n'est qu'un sac (bag) tant que vous n’aurez pas énuméré ces clés. Ainsi, vous n’êtes pas encore en mesure de prouver formellement que les tables de votre message précédent sont en 2NF ou 3NF.
    Avant de monter les murs de l’édifice, commencez par les fondations en étudiant d’abord les dépendances fonctionnelles, lesquelles traduisent de façon formelle les règles de gestion auxquelles participent les attributs des variables relationnelles (informellement tables). Ensuite passez à l’étude des clés.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2009
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2009
    Messages : 52
    Par défaut
    Ok, pour la définition des clés je raisonne comme ceci:

    { ClientNo } -> { ClientNo } // je sais qu'il faut le mettre mais je ne comprends pas le sens de cette relation ClientNo dépend de ClientNo ? )

    { ClientNo } -> { Cname } //cname dépend de ClientNo

    J'ai lu le concept de clé candidate, moi j'ai toujours une approche SQL sinon j'ai plus de mal à comprendre.

    ClientNo identifie de manière unique un client, c'est donc pour la clé primaire (et donc la clé candidate). Rien ne suppose que Cname soit unique, alors je ne l'inclus pas dans l'ensemble de la clé.

    Si Cname était unique, ça en aurait fait la clé alternative c'est ça? Et dans le contexte modèle relationnel, la clé candidate serait: { ClientNo, Cname }.
    Toujours avec une approche SQL, ça voudrait dire pour moi que ClientNo serait clé primaire et Cname serait UNIQUE.

    Ensuite:

    { PropertyNo } -> { PropertyNo }

    { PropertyNo } -> { PAdress }

    PropertyNo identifie de manière unique une adresse, c'est donc une clé primaire.

    Alors pour respecter la 2NF, on sépare la table en 2 et on lie les 2 tables grâce à la clé étrangère dans la table "Property".

    Mais, elle est aussi en 3NF...

    Si je reprends l'exemple que j'ai envoyé plus tôt ce matin, je ne comprends pas pourquoi on est en 2NF alors qu'il y a redondance dans la table propriétaire.

    Merci beaucoup pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre un "bidouilleur" et un Pro ?
    Par christ_mallet dans le forum Débats sur le développement - Le Best Of
    Réponses: 290
    Dernier message: 28/11/2011, 10h53
  2. Réponses: 5
    Dernier message: 11/12/2002, 12h31
  3. Différence entre TCP, UDP, ICMP
    Par GliGli dans le forum Développement
    Réponses: 1
    Dernier message: 13/09/2002, 08h25
  4. Différences entre jmp, jz, jnz, etc
    Par christbilale dans le forum Assembleur
    Réponses: 3
    Dernier message: 05/07/2002, 15h09
  5. Réponses: 3
    Dernier message: 07/05/2002, 16h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo