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 :

Gestion de l'heritage


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 67
    Points
    67
    Par défaut Gestion de l'heritage
    Salut, petite question

    Ma problématique est de gérer l'héritage.
    Exemple : 1 classe Document avec une propriété Titre, 1 classe Livre avec une propriété Auteur qui hérite de document, et 1 classe Journal avec une propriété ville qui hérite aussi de document.

    Mes use cases ne considèrent pas le livre (par exemple) sans considérer la notion de document. Un livre EST à chaque instant un document. Du coup, d'après ce que disent certaines théories sur la manière de modéliser la même chose en relationnel, l'une des solutions est la suivante :
    Document (Id_Doc, Id_Type, Titre, Auteur, Ville)
    TypeDocument (Id_Type, Libelle)

    Encore une fois, ceci est UNE possibilité, et il en existe plusieurs en concurrence, mais pour faire votre choix, je vous renvoie vers des spécialistes comme Scott Ambler, et autres... Ce n'est pas l'objet du débat.

    Maintenant la question :
    En quelle forme normale ma base est-elle ?

    Merci

    ...Et serait-ce possible de ne pas chipoter sur la ville ou l'auteur (qui pourrait etre des données "de référence") ?
    Ce qui m'intéresse c'est le fait que chacune de ses données peut-être null, selon le type de document.

    Donc quelle forme normale, et évidemment, POURQUOI ?

    Merci

  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 115
    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 115
    Points : 31 617
    Points
    31 617
    Billets dans le blog
    16
    Par défaut La carpe et le lapin
    Citation Envoyé par Jay13mhsc Voir le message
    d'après ce que disent certaines théories sur la manière de modéliser la même chose en relationnel, l'une des solutions est la suivante :
    Document (Id_Doc, Id_Type, Titre, Auteur, Ville)
    TypeDocument (Id_Type, Libelle)
    La solution (sic) que vous présentez est à rejeter. En effet, elle revient à amalgamer dans la table Document des données qui n’ont rien à voir entre elles, à savoir des auteurs de livres et des villes couvertes par des journaux. C’est le mariage de la carpe et du lapin. Et last but not least, NULL s’invite à la fête.

    Au niveau relationnel, il est préférable de voir les choses différemment :

    1) Soit vous définissez deux tables :
    Table Livre {IdLivre, TitreLivre, Auteur, ...}
    Key {IdLivre}

    Table Journal {IdJnal, TitreJournal, Ville, ...}
    Key {IdJnal}
    2) Soit vous préférez rester dans une logique de spécialisation et d’héritage :
    Table Document {IdDoc, Titre, ...}
    Key {IdDoc}

    Table Livre {IdDoc, Auteur, ...}
    Key {IdDoc}
    Foreign Key {IdDoc} References Document

    Table Journal {IdDoc, Ville, ...}
    Key {IdDoc}
    Foreign Key {IdDoc} References Document

    Et vous définissez ensuite deux vues permettant à l’utilisateur de manipuler des entités Livre et Journal :

    View Livre2 {Document JOIN Livre}
    Key {IdDoc}

    View Journal2 {Document JOIN Journal}
    Key {IdDoc}
    En l’état, c'est-à-dire en l’absence d’autres attributs qui pourraient influer, les tables et vues que je vous propose sont en 5e forme normale.


    Citation Envoyé par Jay13mhsc Voir le message
    En quelle forme normale ma base est-elle ?
    La normalisation ne s’applique pas à une base de données, mais aux tables qui en sont les éléments (qu’il s’agisse des tables de base ou des tables dérivées que sont les vues).

    Vu sa structure (deux attributs seulement), il est facile de montrer que la table TypeDocument est en 3e forme normale : en effet, les déterminants des seules dépendances fonctionnelles qu'elle comporte sont des surclés. Pour affirmer qu’elle est en 5e forme normale, il suffit d’utiliser un théorème de Fagin et Date, selon lequel lorsqu’une table est en 3NF, si chacune de ses clés candidates ne comporte qu’un seul attribut, alors cette table est en 5NF.

    Pour la table Document, la présence systématique de NULL ne simplifie pas la tâche (si l’on à affaire à un livre, la colonne Ville est à NULL et si l’on a affaire à un journal, c’est la colonne Auteur qui est à NULL, conséquence du mariage de M. Lapin et de Mme Carpe).

    Dans le cas général, NULL empêche de prouver qu’une table est normalisée en ce sens que certains théorèmes fondamentaux ne fonctionnent plus. C’est le cas par exemple du théorème de Heath, selon lequel si la table T(A, B, C) satisfait à la dépendance fonctionnelle A → B, alors T peut être décomposée sans perte selon ses projections T1(A, B) et T2(A, C). (A, B et C représentent ici des ensembles d’attributs de T). Même conséquence funeste pour un théorème de Fagin qui est une extension du précédent quand on raisonne non plus en termes de dépendances fonctionnelles, mais multivaluées.

    J’utiliserai donc des valeurs par défaut à la place de NULL.

    Dans ces conditions, en considérant que {IdDoc} et {Titre} sont des clés candidates et en considérant que {Auteur} et {Ville} (ainsi que leurs combinaisons) ne peuvent pas faire l’objet de telles clés, on montre facilement que la table Document est en 3NF, puis on montre qu’elle est en 5NF, toujours à l’aide du théorème de Fagin et Date.

    Conclusion :

    Les deux tables que vous avez présentées sont en 5e forme normale, mais elles sont bonnes pour la poubelle.

  3. #3
    Membre actif
    Étudiant
    Inscrit en
    Avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    ça, c'est de la réponse !

    En utilisant win'design pour creation d'un script avec heritage :
    Un autre exemple :

    ENFANT et MEMBRE héritent de la classe PERSONNE

    PERSONNE (id_personne, nom_personne)

    MEMBRE (id_personne, no_carte)

    ENFANT (id_personne, date_naissance)



    A noter que le script SQL généré par win'design est un peu pourri puisque il m'avait créé MEMBRE (id_personne, no_carte, nom_personne) et ENFANT(id_personne, date_naissance, nom_personne)...
    @+

  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 115
    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 115
    Points : 31 617
    Points
    31 617
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Tidus159 Voir le message
    A noter que le script SQL généré par win'design est un peu pourri puisque il m'avait créé MEMBRE (id_personne, no_carte, nom_personne) et ENFANT(id_personne, date_naissance, nom_personne)...
    Vous n'avez pas montré le contenu de ce script, mais j'intuite qu'il est irréprochable du point de vue relationnel. Cela dit, si j’en crois la FAQ Merise, l’AGL doit vraisemblablement vous proposer au moins un script alternatif qui pourrait mieux vous convenir.

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

Discussions similaires

  1. Heritage multiple gestion
    Par sohafarhat dans le forum NetBeans
    Réponses: 0
    Dernier message: 19/06/2009, 11h34
  2. [Heritage] Gestion des constructeurs
    Par Clorish dans le forum Langage
    Réponses: 12
    Dernier message: 28/03/2007, 20h23
  3. Réponses: 4
    Dernier message: 04/07/2002, 13h31
  4. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 15h11
  5. gestion d'un joystick ...
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 23/05/2002, 13h53

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