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

 SGBD Discussion :

Compréhension des Formes Normales


Sujet :

SGBD

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 55
    Points
    55
    Par défaut Compréhension des Formes Normales
    Bonjour

    Je tente de mieux comprendre les 3 Formes Normales... et comme je débute cela n'est pas gagné...

    http://fr.wikipedia.org/wiki/Forme_n...ationnelles%29

    Quelqu'un pourrait-il m'expliquer comment cela fonctionne dans des mots que je puisse bien comprendre ?

    Exemple partiel pour Forme Normale 1...
    - Quand des données récurrentes sont répétées plusieurs fois ces dernières occupent de la place inutilement dans la base de données.

    Pour s'assurer que les Données soient toutes identifiables à l'identique ? c'est quelle Forme Normale ca ?

    ==> on gére alors ces données dans une table a part où l'on y aura mis une clé primaire integer qui sert de référence unique vers chacune de ces données répétitive et que l'on veut fiabiliser en s'assurer quelles soient toujours utilisables à l'indentique

    Etc...

    Cela serait bien aimable merci

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    Pour la redondance des données, en exemple ça donne :

    Si tu veux définir les sections dans lesquelles travaillent des employés, suppose que pour chaque employés tu enregistres le libellé de la section et le nom du responsable.

    Le jour où le responsable change, tu modifies les données de tous les employés de cette section. Tu pourrais aussi avoir des informations discordantes (manager différents pour même section).

    Pour cela, les entités que tu décris sont identifiés par une clef primaire, et toutes les caractéristiques de ces entités sont isolées dans une table séparée.

    Du coup, dans ta table des employés, tu as simplement besoin de faire référence à la clef primaire de la section correspondante : gain d'espace, gain en fiabilité des données, gain en performance lors des mises à jour.

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    il y a un très bon article illustré sur ce site : http://fsmrel.developpez.com/basesre...normalisation/

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Une autre approche de compréhension des formes normales peut être apportée par les règles suivantes :
    1) chaque table doit être en situation de ne pas avoir de NULL dans toutes ses colonnes, donc les information des tables doivent être propres à l'entité que la table concrétise
    2) la modification d'une information, ne doit pas entraîner la modification de plus d'une ligne dans une table
    3) les colonnes des tables ne doivent contenir que des informations atomiques (non sécables)
    Par extension de 3 : des colonnes similaires pouvant être regroupées au sein d'un tableau ne doivent jamais figurer directement dans la table.

    Sur 1 : un téléphone n'a rien à faire dans une table client ou personne, car il existe des personnes n'ayant pas de téléphone ! (les attributs doivent être propres à l'entité)
    Sur 2 : une civilité ne doit pas figurer en tant que colonne dans une table de personne; Ce doit être une table de référence. En effet, que se passera t-il si vous devez passer de Melle à Mme ? (une seule information modifiée => impacte des centaines de lignes... inacceptable !)
    Sur 3 : un numéro de sécurité social doit être découpé en plusieurs parties car il n'est pas atomique (contient des info de sexe, date de naissance et lieu de naissance).
    Sur 3 extension : TEL1, TEL2, FAX, GSM dans la même table est idiot, car nul n'est censé avoir impérativement (pas de NULL) 2 téléphone fixe un fax et un mobile ! Dans ce cas une table secondaire à double entrée, sera mille fois mieux (Type Tel et n°).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 63
    Points : 55
    Points
    55
    Par défaut
    Merci Beaucoup pour vos réponses et pour votre aide c'est beaucoup plus clair comme cela

    J'ai vu le tutoriel mais même s'il est très complet, il m'a tout de même semblé ardu, donc je préfère nettement vos explications

  6. #6
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 623
    Points : 1 370
    Points
    1 370
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Sur 2 : une civilité ne doit pas figurer en tant que colonne dans une table de personne; Ce doit être une table de référence. En effet, que se passera t-il si vous devez passer de Melle à Mme ? (une seule information modifiée => impacte des centaines de lignes... inacceptable !)
    Pourquoi est-ce que cela impacterai plusieurs lignes ?

    j'ai une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PERSONNES
    -----------
    civilite
    nom
    dateNaissance
    contenant 100 enregistrements.

    Si je dois changer une mademoiselle en madame, je modifie seulement une ligne non?

    Edit: Si j'enregistre les civilités dans une table de référence, est-ce que cela va beaucoup affecter les performances, puisqu'il me faudra une jointure pour récupérer le libellé de la civilité?

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Farid63 Voir le message
    Pourquoi est-ce que cela impacterai plusieurs lignes ?

    j'ai une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    PERSONNES
    -----------
    civilite
    nom
    dateNaissance
    contenant 100 enregistrements.
    Donc peut être 20 demoiselles

    Si je dois changer une mademoiselle en madame, je modifie seulement une ligne non?
    Si vous avez 20 demoiselles, il faudra changer 20 lignes

    Edit: Si j'enregistre les civilités dans une table de référence, est-ce que cela va beaucoup affecter les performances, puisqu'il me faudra une jointure pour récupérer le libellé de la civilité?
    Toujours les mêmes stupidités.... Avec ce raisonnement, mettez tout dans la même table !
    A lire : http://blog.developpez.com/sqlpro/p1...mances_petites

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  8. #8
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    sqlpro, mademoiselle "Virgule De Guillemet" change en madame "Virgule Talon" je ne voie pas comment 19 autres demoiselles sont obligées de suivre Achille?
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    À votre drapeau, je voit que vous n'êtes pas français.....

    récemment en France notre gouvernement de c#@?§$£**!!! a décidé (c'était extrêmement urgent vu la crise....) de supprimer la case à cocher "Mademoiselle" de tous les formulaires de l'administration, pour ne plus laisser que "Monsieur" ou "Madame"....
    Ceci afin de ne pas choquer la gente féminine et par souci d'égalité sexuelle... En effet, les hommes ne sont pas obligés d'indiquer qu'il sont puceau, par un titre spécifique...
    D'un seul coup, d'un seul, notre gouvernement à décidé de transformer toutes les demoiselles en Madame !

    Donc mademoiselle "Virgule De Guillemet" a été changée en Madame "Virgule De guillemet", bien qu'elle ne se soit pas mariée, et cela à effectivement entraîné les 19 autres demoiselles qui ont été obligées de suivre Achille !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 730
    Points
    56 730
    Billets dans le blog
    40
    Par défaut
    Citation Envoyé par alassanediakite Voir le message
    mademoiselle "Virgule De Guillemet" change en madame "Virgule Talon" je ne voie pas comment 19 autres demoiselles sont obligées de suivre Achille?
    @+
    Citation Envoyé par SQLpro Voir le message
    Donc mademoiselle "Virgule De Guillemet" a été changée en Madame "Virgule De guillemet", bien qu'elle ne se soit pas mariée, et cela à effectivement entraîné les 19 autres demoiselles qui ont été obligées de suivre Achille !
    Plaît-il ? 19 !!!

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 28/02/2007, 12h18
  2. [NetBeans] redimensioner auto des form
    Par Damien69 dans le forum NetBeans
    Réponses: 5
    Dernier message: 27/05/2004, 13h50
  3. [VB.NET]La bonne gestion des forms
    Par Wintermute dans le forum Windows Forms
    Réponses: 11
    Dernier message: 13/01/2004, 16h35
  4. [FLASH MX] Prob de compréhension des bouttons
    Par WriteLN dans le forum Flash
    Réponses: 13
    Dernier message: 16/10/2003, 17h01
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

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