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

  1. #1
    Nouveau membre du Club
    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
    Points : 33
    Points
    33
    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 : 44
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    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 sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    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
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  4. #4
    Nouveau membre du Club
    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
    Points : 33
    Points
    33
    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 sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    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.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  6. #6
    Nouveau membre du Club
    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
    Points : 33
    Points
    33
    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.

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir sushis,


    Vous vous êtes lancé dans les dépendances fonctionnelles, c’est très bien. Mettons en évidence la table CLIENT servant de référence :




    je raisonne comme ceci:
    { ClientNo } -> { ClientNo } // je sais qu'il faut le mettre mais je ne comprend le sens de cette relation ClientNo dépend de ClientNo ? )
    Il s’agit d’une DF triviale, elle est toujours vraie. On s’en sert essentiellement pour les définitions, démontrer les théorèmes ou au besoin qu’un ensemble d’attributs est clé candidate.


    { ClientNo } -> { Cname } // cname dépend de ClientNo
    Donc vous traduisez de manière formelle la contrainte suivante :
    Pour une valeur de l’attribut ClientNo, il y a une seule valeur de l’attribut Cname.

    On a ici l’amorce de l’ensemble (très précieux) F des DF non triviales de la table CLIENT :
    F = {{ClientNo} -> {Cname}}


    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).
    Si vous codez en SQL :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE CLIENT
    (
            ClientNo             CHAR(4)       NOT NULL
          , Cname                VARCHAR(64)   NOT NULL
          , PropertyNo           VARCHAR(64)   NOT NULL
          , Padress              VARCHAR(64)   NOT NULL
        , CONSTRAINT CLIENT_PK PRIMARY KEY (ClientNo) 
    ) ;

    Et si vous effectuez un 1er INSERT (correspondant à la 1re ligne de votre exemple) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO CLIENT (ClientNo, Cname, PropertyNo, Padress) VALUES ('CR76', 'John Kay', 'PG4', '6, rue de toto') ;
    Alors tout se passe bien, mais si vous effectuez un INSERT pour la 2e ligne de votre exemple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO CLIENT (ClientNo, Cname, PropertyNo, Padress) VALUES ('CR76', 'John Kay', 'PG16', '7, rue de titi') ;
    Alors votre SGBD rejette l’INSERT. Exemple de message de rejet :

    Violation de la contrainte PRIMARY KEY 'CLIENT_PK'. Impossible d'insérer une clé en double dans l'objet 'CLIENT'.

    Donc {ClientNo} ne peut pas être clé primaire, ce n’en est possiblement qu’un sous-ensemble.


    Si Cname était unique, ça en aurait fait la clé alternative c'est ça?
    Oui, mais Cname n’est pas unique puisque la valeur 'John Kay' apparaît dans deux lignes...


    { PropertyNo } -> { PAdress }
    PropertyNo identifie de manière unique une adresse
    En énonçant cette DF, vous fournissez un élément important, permettant d’enrichir l’ensemble F des DF de la table CLIENT, qui devient :
    F = {{ClientNo} -> {Cname}, {PropertyNo} -> {Padress}}


    PropertyNo identifie de manière unique une adresse, c'est donc une clé primaire.
    Ce n'est certainement pas la clé primaire de la table CLIENT, il y a seulement une DF {PropertyNo} -> {Padress}.

    Quoi qu’il en soit, on est en mesure de trouver les clés candidates de la table CLIENT. Une observation importante les concerne ici :
    Si un attribut n’est présent dans aucun dépendant (partie droite) d’une DF de l’ensemble F, alors il participe à une clé candidate.
    Ainsi dans votre exemple, les attributs ClientNo et PropertyNo doivent participer à au moins une clé candidate de CLIENT.

    Partant de là, la paire {ClientNo, PropertyNo} est-elle clé candidate ?

    Si la définition donnée de la clé candidate vous gêne, on va faire référence à la remarque accompagnant sa définition, où K représente une clé candidate :

    la DF : K -> {A} est vérifiée pour chaque attribut A de R.

    Donc pour être clé candidate, la paire {ClientNo, PropertyNo} doit vérifier {ClientNo, PropertyNo} -> {A} pour chaque attribut A de CLIENT. Qu'en est-il ?

    On montre que :

    {ClientNo, PropertyNo} -> {ClientNo} : c'est en vertu du 1er axiome d’Armstrong (cf. le paragraphe traitant des axiomes d’Armstrong).

    {ClientNo, PropertyNo} -> {PropertyNo} : grâce là encore au 1er axiome d’Armstrong.

    {ClientNo, PropertyNo} -> {Cname} : en effet, il suffit d’appliquer les axiomes d’Armstrong d’augmentation et de décomposition à la DF {ClientNo} -> {Cname} appartenant à F.

    {ClientNo, PropertyNo} -> {Padress} : en effet, il suffit d’appliquer les axiomes d’Armstrong d’augmentation et de décomposition à la DF {PropertyNo} -> {Padress} appartenant à F.

    La DF {ClientNo, PropertyNo} -> {A} est vérifiée pour chaque attribut A de CLIENT : la paire {ClientNo, PropertyNo} est donc clé candidate, (et clé primaire pour vous faire plaisir).

    La table CLIENT est-elle en 2NF ?

    Admettons que la paire {ClientNo, PropertyNo} soit la seule clé candidate. Pour que la table CLIENT soit en 2NF, il ne doit pas y avoir d’attribut n’appartenant pas à la clé {ClientNo, PropertyNo} qui soit dépendant d’un sous-ensemble strict de cette clé. Or l’attribut Cname n’appartient pas à la clé mais est dépendant du sous-ensemble strict {ClientNo} du fait de la DF {ClientNo} -> {Cname} : il s'ensuit que la table CLIENT n’est pas en 2NF.

    Par application du théorème de Heath à la DF {ClientNo} -> {Cname}, vous pouvez décomposer la table CLIENT {ClientNo, Cname, PropertyNo, Padress} en deux tables :
    CLI1 {ClientNo, Cname} et CLI2 {ClientNo, PropertyNo, Padress}.
    Je vous laisse le soin de prouver que CLI1 est en 3NF (elle est même en 6NF !) et que CLI2 a pour clé {ClientNo, PropertyNo} et viole la 2NF.


    A suivre...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  8. #8
    Nouveau membre du Club
    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
    Points : 33
    Points
    33
    Par défaut
    Ok,

    Alors en suivant la définition 3NF de ton tuto:

    Une relation R est en troisième forme normale si elle est en deuxième forme normale et si chaque attribut n'appartenant à aucune clé candidate ne dépend directement que des clés candidates de R.

    Donc pour la table CLI1 (ou relation CLI1) on a: CLI1 = { ClientNo->Cname } avec ClientNo unique clé candidate (donc clé primaire) et unique attribut non clé candidate et dépend de ClientNo.

    On a démontre que la table est en 2NF et qu'il n'y a aucun attribut n'appartenant à aucune clé candidate donc CLI1 est en 3NF.

    Ensuite, pour CLI2 n'est pas en 2NF car l'attribut {Padress} n’appartient pas à la clé {ClientNo, PropertyNo} mais est dépendant du sous-ensemble strict {PropertyNo} car {PropertyNo} -> {Padress}. Si je suis le théorème de Heath, je peux décomposer CLI2 en 2 tables:

    Soit CLI21= {ClientNo, PropertyNo} et CLI22= {PropertyNo, Padress} où la clé candidate est {ClientNo, PropertyNo} pour CLI21 et {PropertyNo} pour CLI22.

    Ok, merci pour ta réponse, le truc c'est que je n'ai pas besoin de CLI22, en fait la relation entre CLI1 et CLI22 est un client qui peut avoir plusieurs propriété mais une propriété ne peut avoir plusieurs clients (relation 1:N) alors qu'avec cette table CLI21 on est dans une relation (N:N).

    J'ai l'impression de m'embourber, pour moi CLI21 doit disparaître et on doit rajouter l'attribut ClientNo dans PropertyNo et on a cette DF:

    PropertyNo -> ClientNo et ClientNo est une clé étrangère (clé candidate de CLI1).

    Enfin bref, je cite les définitions de la 2NF et la 3NF:

    2NF: "Une relation R est en deuxième forme normale si elle est en première forme normale et si chaque attribut n'appartenant à aucune clé candidate est en dépendance totale de chaque clé candidate de R. "

    3NF: "Une relation R est en troisième forme normale si elle est en deuxième forme normale et si chaque attribut n'appartenant à aucune clé candidate ne dépend directement que des clés candidates de R."

    En gros, il ne faut pas qu'il y est de dépendance transitive en 3NF donc que des dépendance directe. C'est pour ça que souvent lorsque je normalise une table de 1NF en 2NF, elle n'a souvent pas de dépendance transitive et est donc automatiquement en 3NF.

    Je crois que je commence à saisir la différence. Bon faut que je m'attaque au BNCF et au 4NF. Je n'irai pas au dessus (5NF et >).

    Merci pour ton aide.

  9. #9
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir sushis,


    Citation Envoyé par sushis Voir le message
    il n'y a aucun attribut n'appartenant à aucune clé candidate donc CLI1 est en 3NF.
    Hum… Une double négation valant affirmation, vous êtes en train de dire que chaque attribut de CLI1 appartient à une clé candidate, or Cname n’appartient à aucune clé candidate. Si CLI1 est en 3NF, c’est parce qu’elle est en 2NF qu’on y trouve aucune dépendance fonctionnelle transitive.


    Citation Envoyé par sushis Voir le message
    CLI2 n'est pas en 2NF car l'attribut {Padress} n’appartient pas à la clé {ClientNo, PropertyNo} mais est dépendant du sous-ensemble strict {PropertyNo} car {PropertyNo} -> {Padress}.
    Oui. Attention, on n’écrit pas « l'attribut {Padress} » mais « l'attribut Padress » car l’emploi des accolades et réservé aux ensembles, et un attribut n’est pas un ensemble.


    Citation Envoyé par sushis Voir le message
    CLI2 n'est pas en 2NF car l'attribut {Padress} n’appartient pas à la clé {ClientNo, PropertyNo} mais est dépendant du sous-ensemble strict {PropertyNo} car {PropertyNo} -> {Padress}. Si je suis le théorème de Heath, je peux décomposer CLI2 en 2 tables:

    Soit CLI21= {ClientNo, PropertyNo} et CLI22= {PropertyNo, Padress} où la clé candidate est {ClientNo, PropertyNo} pour CLI21 et {PropertyNo} pour CLI22.
    Oui.


    Citation Envoyé par sushis Voir le message
    une propriété ne peut avoir plusieurs clients
    Donc vous ajoutez une règle de gestion jusqu’ici parfaitement inconnue et ça évidemment des conséquences sur l’ensemble F des dépendances fonctionnelles, qui était le suivant :

    F = {{ClientNo} -> {Cname}, {PropertyNo} -> {Padress}}

    Et qui devient :

    F = {{ClientNo} -> {Cname}, {PropertyNo} -> {Padress}, {PropertyNo} -> {ClientNo}}

    Autrement dit, du fait de la dépendance fonctionnelle {PropertyNo} -> {ClientNo}, la paire {ClientNo, PropertyNo} n’est plus qu’une surclé réductible, et la clé de la table CLIENT se réduit tout bonnement au singleton {PropertyNo} !

    Dans ces conditions, et sous réserve que vous ne révéliez pas d’autres règles de gestion propres à mettre en évidence de nouvelles dépendances fonctionnelles, la table CLIENT est en 2NF. Elle n’est pas en 3NF car il existe la DF transitive
    {ClientNo} -> {Cname} dont le déterminant n’est pas clé candidate pour la table CLIENT. On applique donc le théorème de Heath, et on obtient les décompositions CLI’1 et CLI’2 :

    CLI’1 {ClientNo, Cname}

    CLI’2 { PropertyNo, ClientNo, Padress}

    Et je vous laisse le soin de démontrer si elles sont en 3NF ou seulement en 2NF.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  10. #10
    Nouveau membre du Club
    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
    Points : 33
    Points
    33
    Par défaut
    Voilà une vidéo qui répond clairement à ma question:


    Je vais créer un nouveau sujet où je normalise une table de 1NF en 4NF parce que je ne suis pas certains d'avoir tout saisit (surtout pour le BCNF et la 4NF).

    Merci pour ton aide!

  11. #11
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Attention ! Le gars qui cause reprend des définitions fausses ou incomplètes des formes normales, et des idioties concernant par exemple la dénormailsation (jointure anti performante : il n'a manifestement jamais prototypé les perfornances). Si je l'avais sous la main, je lui passerais un bon savon...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  12. #12
    Nouveau membre du Club
    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
    Points : 33
    Points
    33
    Par défaut
    La dénormalisation est la partie qui ne m’intéresse pas, le reste c'est à peu près ce que j'ai lu en cours. Je vais me baser sur ces exemples et sur ton tutoriel pour la définition complète.

    Merci pour ton aide!

    Labor omnia vincit improbus

+ 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