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

Schéma Discussion :

Définition de la première forme normale (FN1) [Normalisation]


Sujet :

Schéma

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut Définition de la première forme normale (FN1)
    Bonjour,

    La définition de la première forme normale est la suivante: une table est en première forme normale si tous ses attributs sont simples et non décomposables.
    l'exemple donné est le suivant:
    table VOL; ses attributs sont les suivants:
    N°vol
    Codeaéroport
    Codeaéroportarrivée
    Heuredécollage
    Heureatterrissage
    Jours
    ici, "jours" n'est pas simple, alors on créera une nouvelle entité ppur représenter la multiciplicité des jours de vol ce qui donne
    VOL
    N°Vol
    Codeaéroport
    Codeaéroportarrivée
    Heuredécollage
    Heureatterrissage

    JOURNESS_VOL
    N°Vol
    jour

    A-t-on mis l'attribut 'jour' au pluriel car dans la réalité un même numéro de vol peut correspondre à plusieurs jours alors qu'il ne peut correspondre qu'à une seule heure de décollage et d'atterrissage?
    Je ne comprends pas en quoi le fait d'avoir crée une nouvelle table JOURNEES_VOL permet de comprendre qu'à un numéro de vol donné peuvent correspondre plusieurs jours différents de vol, puisque c'est l'intention de la création de cette table.
    Merci beaucoup de votre aide.

    Cordialement.
    Nathalie
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Group et Ungroup
    Dans le cadre du Modèle Relationnel de Données, une des conditions que doit remplir une relation pour mériter son appellation est que chacun des tuples qui la composent contienne exactement une valeur pour chacun de ses attributs. En conséquence de quoi, une relation respecte de facto ce que vous appelez la première forme normale. Une table au sens SQL doit suivre le Modèle et donc respecter la règle mentionnée.

    Toujours dans le cadre du Modèle Relationnel de Données, l’attribut Jours n’a pas besoin de faire l’objet d’une relvar (variable relationnelle, terme plus précis que celui de table, qui signife à la fois variable et valeur), dans la mesure où l’attribut Jours est du type RELATION {NoVol, Jour}. Les opérateurs relationnels GROUP et UNGROUP vous permettent de représenter et produire des relations comme cela vous convient. Ainsi, l’opérateur UNGROUP vous permet de créer une (valeur de) relation JOURNEE_VOL à partir d’une (valeur de) relation VOL.

    Si on part de votre relvar JOURNEE_VOL {NoVol, Jour}, l’expression

    JOURNEE_VOL GROUP {Jour} AS Jours

    produit une relation qui peut être une valeur prise par VOL dont l’en-tête correspond alors à ceci :

    {NoVol, CodeAeroport, CodeAeroportArrivee, HeureDecollage, HeureAtterrissage, JOURS {Jour}}

    Et l’opérateur UNGROUP vous permet de retrouver JOURNEE_VOL :

    VOL UNGROUP JOURS
    =>
    {NoVol, Jour}

    Au vu de tout cela, que l’on ait mis "jour" au pluriel n’est pas choquant, Jours est un attribut à valeur relation (RVA = Relation-Valued Attribute).

    Voilà pour la théorie. Maintenant, si l’on descend au ras des pâquerettes, étant donné que SQL n’adhère pas précisément au Modèle relationnel, vous pouvez, par précaution, utiliser la définition que vous donnez de la première forme normale, à ceci près que vous devez expliquer en toute rigueur ce que veut dire "simple" et ce que veut dire "non décomposable", termes qui en l’occurrence sont bien flous.

    Au moins vous n’avez pas fait comme beaucoup, qui en rajoutent et commencent ainsi leur définition :

    « Pour être en première forme normale, une relation doit posséder une clé, ... »

    Ceux-là n’ont rien compris à l’essence du Modèle relationnel, car par définition une relation a une clé (composée ne serait-ce que de l’ensemble de ses attributs), sinon la chose ne serait pas une relation mais un sac (bag).

    Pour en revenir à l’utilisation soit de la relvar JOURNEE_VOL soit de l’attribut JOURS : je suis plutôt favorable à la relvar. En effet, si l’on a besoin des requêtes :

    1. « Quels sont les vols qui ont lieu le mardi ? »
    2. « Quels sont les jours du vol IT5425 ? »

    Les requêtes correspondantes ont une formulation non symétrique :

    1. ((VOL UNGROUP JOURS) WHERE Jour = "mardi") {NoVol}.
    2. ((VOL WHERE NoVol = "IT5425") UNGROUP JOURS) {Jour}

    Elles sont en outre plus compliquées que leur contrepartie qui est symétrique dans le cadre d’une modélisation traditionnelle :

    1. (JOURNEE_VOL WHERE Jour = "mardi") {NoVol} qui est la projection sur NoVol de la restriction sur Jour
    2. (JOURNEE_VOL WHERE NoVol = "IT5425") {Jour} qui est la projection sur Jour de la restriction sur NoVol.

    Maintenant, des goûts et des couleurs, c’est vous qui voyez...
    (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.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut pb à propos de la première forme normale
    Bonjour ,

    Je vous remercie de votre explication très intéressante
    Cependant je n'ai pas bien compris comment il est possible de comprendre qu'à partir de la création d'une table JOURNEES_VOL(N°vol, jour), il est possible de déduire qu'à un numéro de vol peuvent correspondre plusieurs jours, car la valeur de 'jour' ne peut être qu'unique , si l'on considère que N° vol est la clé primaire de la table JOURNEES_VOL

    Je ne comprends donc pas comment on peut répondre à la question
    « Quels sont les jours du vol IT5425 ? »
    Pouvez vous m'aider à y voir plus clair.
    Je vous en remercie beaucoup.

    Sinon, pouriez vous me conseiller quelques exercices de modélisation intéressants à faire du fait de leur complexité , qui permettraient de bien intégrer tous les aspects de la modélisation conceptuelle.

    Je vous en remercie beaucoup encore.

    Cordialement
    Nathalie
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

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

    Il y a un peu plus de trente ans, je prenais régulièrement l’avion pour Genève, avec la compagnie Swiss Air et le lundi matin j’avais droit au vol SR1234 (je dis 1234 parce que depuis j’ai oublié la valeur réelle...) qui avait lieu le lundi, le mercredi et le vendredi. L’avion (souvent le même), décollait toujours d’Orly Ouest à 9h et arrivait à Genève-Cointrin 45 minutes plus tard. Je partais donc le lundi matin et un autre vol me permettait de regagner Orly le vendredi soir.

    Vous pourriez me dire qu’un tel vol est un cas particulier, mais dans le cadre de la discussion il est intéressant et on peut le généraliser d’un point de vue base de données, en considérant tous les vols pour lesquels le décollage à lieu à une heure donnée, à tel endroit, pour telle destination avec arrivée à telle heure, tout cela plus d’une fois par semaine.

    Citation Envoyé par harbonne
    la valeur de 'jour' ne peut être qu'unique, si l'on considère que N° vol est la clé primaire de la table JOURNEES_VOL
    Certes, mais qui a dit que la clé primaire de la table JOURNEE_VOL {NoVol, Jour} était constituée uniquement de NoVol ? Étant donné que pour une valeur de NoVol on peut avoir plus d’une valeur de Jour, la clé nécessairement est constituée du couple {NoVol, Jour}. Je rappelle qu’une clé candidate K d’une table R est un ensemble d’attributs de l’en-tête de R, vérifiant les deux contraintes suivantes :
    1) Unicité : deux tuples (lignes) distincts de R ne peuvent pas prendre la même valeur pour K.
    2) Irréductibilité : il n’existe pas de sous-ensemble strict de K vérifiant la contrainte d’unicité.

    Le couple {NoVol, Jour} est bien clé candidate de JOURNEE_VOL. Par contre, le sous-ensemble {NoVol} ne l’est pas puisque la contrainte d’unicité ne serait plus respectée.

    Citation Envoyé par harbonne
    pouriez vous me conseiller quelques exercices de modélisation intéressants à faire du fait de leur complexité, qui permettraient de bien intégrer tous les aspects de la modélisation conceptuelle.
    Ciel ! Vous voulez de la complexité...
    Je pense qu’en cherchant sur ce forum, vous trouverez des sujets d’inspiration. Vous pouvez aussi aborder la modélisation de votre entreprise (au moins le cœur, c'est-à-dire les personnes), ou de tout autre sujet qui vous tient à cœur.
    (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.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut a propos de première forme normale
    Bonjour,
    Je vous remercie de votre réponse.

    Puisqu'il est necessaire de créer une nouvelle table JOURNEES_VOL, pouvez vous me dire si l'association qui existe entre la table VOL et la table JOURNEES_VOLestbien celle -ci: à un vol correspond 1 ou plusieurs journées_vol et une journée_vol correspond à un et seul vol.

    Comment concevez vous que je puisse inserer des données dans la table journées_vol au niveau de l'application.

    Plus généralement, quand on crée des tables de jointure, qui possèdent comme identifiant les deux identifiants de chacune des tables concernée par la relation de type n:n, j'ai du mal à concevoir comment , au niveau de l'application créee on peut insérer des données dans ces tables de jointure.

    J'ai personellement crée une base de données avec plusieurs tables dont des tables de jointure, mais je n'utilise pas du tout ces tables de jointure pour insérer des données au niveau de l'application.

    Je vous remercie encore beaucoup de votre aide.
    Cordialement.
    Nathalie
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  6. #6
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Puisqu'il est necessaire de créer une nouvelle table JOURNEES_VOL, pouvez vous me dire si l'association qui existe entre la table VOL et la table JOURNEES_VOLestbien celle -ci: à un vol correspond 1 ou plusieurs journées_vol et une journée_vol correspond à un et seul vol.
    C'est exact.

    Comment concevez vous que je puisse inserer des données dans la table journées_vol au niveau de l'application.
    Lors du renseignement des informations du vol, le formulaire doit permettre la création d'une liste de jours associés à ce vol. Lors de la sauvegarde, le vol est enregistré dans la table VOL avec un identifiant. Cet identifiant, associé à la liste des jours saisis, permet de renseigner la table Journee_VOL.


    Plus généralement, quand on crée des tables de jointure, qui possèdent comme identifiant les deux identifiants de chacune des tables concernée par la relation de type n:n, j'ai du mal à concevoir comment , au niveau de l'application créee on peut insérer des données dans ces tables de jointure.
    Un peu de la même manière. Admettons un formulaire A qui permet la création et la sauvegarde d'objet A, et pareillement avec B.

    L'utilisateur crée trois objet A : A1, A2 et A3, idem avec B1, B2 et B3.

    Ensuite, un forulaire porpose la liste de tous les A présents en base (potentiellement avec un filtre pour faciliter la saisie), et de manière identique la liste des B.
    L'utilisateur peut donc selectionner un A et un B, et cliquer sur un bouton "mettre en relation" : ce bouton insère en base, dans la table de relation, les identifiants des deux objet A et B.

    Attention : en règle générale, on essaie de ne pas trop penser à l'implémentation lors de la conception. Mais dans ce cas général, il vaut mieux savoir vers où on va .

    mais je n'utilise pas du tout ces tables de jointure pour insérer des données au niveau de l'application.
    C'est possible, mais alors comment fais tu pour relier tes données ?
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    958
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 958
    Points : 141
    Points
    141
    Par défaut définition de la 14ère forme normale
    Bonsoir et merci beaucoup de votre aide.

    Tout est bien clair maintenant.
    Je dis des bêtises lorsque je dis que je n'utilise pas les tables de jointure.
    Je les utilise bien , elles sont même indispensables.

    Existe -t-il une règle quant à leur nombre trop important dans un modèle logique telle que un grand nombre de tables de jointures est le signe que le modèle conceptuel n'est pas assez bien conçu.

    sinon, et j'en aurasi fini, lorsqu'on utilise la notion de relation pour désigner une table dans un modèle logique de données, il s'agit de la définition mathématiques du terme relation.
    J'ai un peu de mal à faire le lien avec la notion de relation en mathématiques telle qu'elle m'a été expliquée au niveau de ce lien
    http://fr.wikiversity.org/wiki/Relat...%C3%A9finition

    Merci beaucoup de votre aide.

    Cordialement.
    Nathalie
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. [SHADOKS]

  8. #8
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Existe -t-il une règle quant à leur nombre trop important dans un modèle logique telle que un grand nombre de tables de jointures est le signe que le modèle conceptuel n'est pas assez bien conçu.
    Non, je ne pense pas... Après, c'est sur que si toutes tes tables ont 6 relations plusieurs à plusieurs, certainement que tu as une erreur de conception, mais ce n'est pas encore sur.

    Le mieux est de poster ton MCD, on en discutera (surtout au niveau des cardinalités).


    Soit E un ensemble.
    E = les tables
    Une relation sur E est une partie R de E2
    une relation sur tes tables est une partie de tables² soit une fonction R:une_table->une_autre_table

    Si , on écrit xRy, et on dit que x et y sont en relation par R.
    Si tu as R(une_table) = une_autre_table, alors elles sont en relation.

    Pour la suite de la définition, il faut reprendre petit à petit.

    Désolé, j'ai très certainement enfreint la stricte rigueur mathématique, mais c'est dans le but de mieux faire comprendre.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  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 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonjour,

    Je dis des bêtises lorsque je dis que je n'utilise pas les tables de jointure.
    Je les utilise bien, elles sont même indispensables.
    Bon, la mayonnaise prend.


    Existe -t-il une règle quant à leur nombre trop important dans un modèle logique telle que un grand nombre de tables de jointures est le signe que le modèle conceptuel n'est pas assez bien conçu.
    Je confirme ce que dit Hed62, il n’y a pas de règle. Un nombre élevé de tables de jointure (issues de associations M:N du niveau conceptuel) exprime une richesse fonctionnelle plus qu’autre chose. Lors de mes crapahuts dans les modèles, il m’est arrivé de compter plus de mille de ces tables, pour tel ou tel gros projet. Tout est donc relatif et il ne faut pas se laisser impressionner. Quoi qu’il en soit, plus on normalise (2NF, 3NF, etc.), plus le nombre de tables augmente, mais plus on évacue les redondances et leurs méfaits. Cela dit, la normalisation n’est pas une panacée, mais elle concourt à la robustesse et à l’intégrité de la base de données, ainsi qu’à son évolutivité. Je me souviens avoir été draconien sur le plan de la normalisation pour une base de données relationnelle, mais bien française, fin des années quatre-vingts : elle a pu ensuite être étendue à l’échelon européen et aux dernières nouvelles, elle est en train de l’être à l’échelon mondial. Je ne jurerai pas non plus que mes successeurs ont scrupuleusement respecté mes consignes de l'époque, mais le noyau a dû rester ce qu’il était...


    lorsqu'on utilise la notion de relation pour désigner une table dans un modèle logique de données, il s'agit de la définition mathématiques du terme relation.
    J'ai un peu de mal à faire le lien avec la notion de relation en mathématiques
    Voici ce qu’écrivait Ted Codd, en 1969 puis en 1970, quand il présenta le Modèle Relationnel de Données :
    The term relation is used here in its accepted mathematical sense. Given sets S1, S2, ... , Sn (not necessarily distinct), R is a relation on these n sets if it is a set of n-tuples each of which has its first element from S1, its second element from S2, and so on ([Note de bas de page] : More concisely, R is a subset of the Cartesian product S1 X S2 X ... Sn). We shall refer to Si as the jth domain of R. As defined above, R is said to have degree n. Relations of degree 1 are often called unary, degree 2 binary, degree 3 ternary, and degree n n-ary. For expository reasons, we shall frequently make use of an array representation of relations, but it must be remembered that this particular representation is not an essential part of the relational view being expounded. An array which represents an n-ary relation R has the following properties:
    (1) Each row represents an n-tuple of R.
    (2) The ordering of rows is immaterial.
    (3) All rows are distinct.
    (4) The ordering of columns is significant—it corresponds to the ordering S1, S2,... , Sn of the domains on which R is defined (see, however, remarks below on domain-ordered and domain-unordered relations).
    (5) The significance of each column is partially conveyed by labeling it with the name of the corresponding domain.
    Etc. Peu après, Codd a rectifié le tir concernant les points (4) et (5) : en utilisant le concept d’attribut pour nommer les colonnes prenant chacune leurs valeurs dans un domaine de référence (qu’on appelle aujourd’hui type), et la contrainte relative à l'ordre des colonnes disparut.

    La définition mathématique du terme relation à laquelle vous faites allusion peut parfaitement s’exprimer dans le cadre du Modèle Relationnel de Données. La relation est en l’occurrence binaire. Si R est une telle relation, vous pouvez parfaitement la contraindre à respecter la réflexivité, la symétrie et la transitivité. Soit R une variable relationnelle (en abrégé relvar), c'est-à-dire une variable dont les valeurs sont des relations, en écrivant dans le style du langage D de Date et Darwen :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    VAR R BASE RELATION {X  T, Y  T} KEY {X, Y} ;
    CONSTRAINT REFLEXIVE (EXTEND (R{X}) ADD (X AS Y)) ||≤|| R ;
    CONSTRAINT SYMETRIC (R RENAME (X AS Z, Y AS X, Z AS Y)) = R ;
    CONSTRAINT TRANSITIVE (((R JOIN (R RENAME (Y AS Z, X AS Y))) {Y, Z}) RENAME (Z AS Y)) ||≤|| R ;
    X et Y sont les attributs de R. T est le domaine (ou type) de X et Y (E dans l'exemple que vous citez). EXTEND et RENAME sont des opérateurs de l’algèbre relationnelle. R{X} dénote la projection. Le symbole ||≤|| désigne l’opération d’inclusion de relation.

    La 1re ligne est facile à traduire en SQL, mais les suivantes le sont manifestement moins...

    Cela peut donc vous paraître hermétique et je n’en dirai pas plus, mais, si votre curiosité est piquée, je vous renvoie aux ouvrages de Chris Date, notamment à celui-ci, dont j’ai extrait l’exemple (page 381) :

    C. J. Date - Logic and Databases: The Roots of Relational Theory
    (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 Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Normalisation (FN1)
    Une relation (Table) est en NF1 si tous ses attributs sont atomiques (Non décomposable).
    D'après plusieurs chercheurs l'atomicité d'un attribut dépend a sa catégorie (Groupe de données) C.a. dire, si la structure des données d'un attribut (champ) est complexe par nature (Exemple: le type de données Date (j/m/a) ) c une catégorie de données complexe et décomposable.
    Prenant un exemple La relation Vol(N°vol, Codeaéroport, Codeaéroportarrivée, Heuredécollage, Heureatterrissage, dateduVol)
    Est ce que le fait d'avoir l'attribut "dateduVol" (de type Date) dans une relation la rendre non au NF1?
    d'après moi, la réponse à cette question dépendra de notre besoin d'utilisation des données de cette attribut.
    1 - Si l'utilisation de l'attribut "DateduVol" nécessite de décomposer les données en jour, mois et année notre Relation n'est pas en NF1, car l'attributs "DateduVol" est lui même compose une autre relation (table) dont ces attributs sont (Jour, Mois, année)
    2 - Si l'utilisation de l'attribut "DateduVol" ne nécessite , en aucun cas, sa décomposition donc, "DateduVol" représente une seule entité qui est la date pendant laquelle le vole aura lieu (exemple : 06-02-2015), dans ce cas Notre utilisation n'est pas concernée par la complexité des données alors, notre relation est en NF1.
    Bref, si l'attribut "DateduVol" soit nommé "Jour" ou "jours" cela ne changera rien dans la logique de la relation.

  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 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par haroun70 Voir le message
    Une relation (Table) est en NF1 si tous ses attributs sont atomiques (Décomposable).
    On a l’impression que selon vous les termes « atomique » et « décomposable » sont synonymes : il s’agit sans doute d’un lapsus...

    Peu importe. S’intéresser à l’atomicité des attributs est louable en soi, mais ne concerne pas précisément la première forme normale, inventée en 1970 par Ted Codd, et dont l’objet était alors de contraindre les relations à être conformes à la logique du 1er ordre (voyez son article fondateur, A Relational Model of Data for Large Shared Data Banks). La définition que vous donnez est celle qui est recopiée consciencieusement par tous les étudiants depuis près de 40 ans, mais elle est trop vague, discutable (et donc discutaillée !) Elle est obsolète et a été ainsi reformulée par C. J. Date (reportez-vous par exemple à Database Design and Relational Theory - Normal Forms and All That Jazz) :

    Soit une relation r d’attributs A1, ..., An, de types respectifs T1, ..., Tn. r est en première forme normale (1NF) si et seulement si, pour chaque tuple t appartenant à r, la valeur de Ai dans t est du type Ti (i = 1, ..., n).

    Ainsi, chaque relation est en fait en 1NF ⁽¹⁾.

    Peu importe le type de l’attribut Ai, qu’il s’agisse du type ENTIER, CARACTERE, DATE, TIMESTAMP, POLYGONE, voire RELATION (voyez ici), exemple :

    Code D : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    VAR F_EXT BASE RELATION 
        {
          Four_No     INTEGER,
          Four_Nom    CHAR,
          Statut      INTEGER, 
          Ville       CHAR,
          Piece_Qte   RELATION { Piece_No INTEGER, Quantite INTEGER }
        } KEY {Four_No} ;

    La variable relationnelle F_EXT respecte de facto la 1NF (et cela vaut pour chaque valeur prise par cette variable, c'est-à-dire chaque relation en l'occurrence).

    Pour reprendre le cas de l’attribut DateduVol, supposons qu'il soit du type DATE : quel besoin de le décomposer ? En effet, pour accéder à l’année, au mois et au jour, il suffit d’utiliser les fonctions ad-hoc dont ce type est doté (et cela vaut pour tout type). Qui plus est, si on décomposait DateduVol en DateduVolAnnee, DateduVolMois, DateduVolJour, il faudrait programmer soi-même les contraintes garantissant que les résultats produits par la combinaison de ces attributs seront bien des dates, surcharge de travail pénible, mais rendue obligatoire suite à une atomisation malvenue (et étrangère à la 1NF...)

    ___________

    ⁽¹⁾ Pour les tables SQL, ça n’est pas le cas, car elles ne sont pas assujetties à respecter les propriétés des relations :

    — Contrairement aux relations, les tables peuvent contenir des lignes en double ;

    — Contrairement aux relations, les tables peuvent contenir le marqueur NULL ;

    — Au nom du principe de fermeture, le résultat d’une opération algébrique portant sur une relation est une relation. De même, le résultat d’une opération algébrique portant sur une table est une table.

    Exemple : Si A1 est le nom d’une colonne de la table T1, le résultat de :

    SELECT A1, A1 FROM T1

    est une table d’en-tête (A1, A1), mais ça n’est pas une relation, parce que les doublons sont interdits dans l’en-tête d’une relation (la fermeture algébrique ne vaudrait plus) ;

    — Etc.
    (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.

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

Discussions similaires

  1. [Normalisation] La première forme normale
    Par seabs dans le forum Schéma
    Réponses: 12
    Dernier message: 09/03/2011, 17h24
  2. [Normalisation] définition de la deuxième forme normale (FN2)
    Par rudi22 dans le forum Schéma
    Réponses: 2
    Dernier message: 25/12/2009, 22h38
  3. Réponses: 6
    Dernier message: 09/09/2008, 16h17
  4. 1ere ,2eme ...forme normal
    Par Melvine dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 24/05/2005, 23h05
  5. explication de définition-formes normales
    Par new_wave dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 25/01/2005, 13h40

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