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 :

Conception table base de données


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut Conception table base de données
    Salut à tous

    Je suis en dilemme avec ce que je veux faire.

    Alors voilà, mon système possède une une table EtudiantsLogiciels et Logiciel

    EtudiantLogiciel
    codePermanent PK
    noLogiciel PK
    version

    Logiciel
    noLogiciel PK
    typeLogiciel
    nom

    C'est 2 tables sont en relation avec le noLogiciel.

    Je veux ajouter une seconde table LogicielDiplome qui comporte les même éléments que Logiciel

    LogicielDiplome
    noLogiciel PK
    typeLogiciel
    nom

    Cette table serait aussi en référence avec EtudiantsLogiciels.

    Le problème, est lorsque que je vais insérer dans la table EtudiantLogiciel, il va avoir une erreur de contrainte parce le noLogiciel n'existera pas dans une des 2 tables référencées.

    Donc, auriez-vous une idée de conception que je pourrais adopter ?

    Merci

  2. #2
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    J'ai pas tout suivit...

    Donc tu as noLogiciel de la table "EtudiantLogiciel" qui doit :
    - soit référencer Logiciel
    - soit référencer LogicielDiplome

    C'est ça ?

    Et bien vu que Logiciel et LogicielDiplome ont la même structure, tu ne crées qu'une table, dans laquelle tu rajoutes une colonne "diplome" de type booléen.

    Ton problème est résolu, et tu sais toujours différencier les logiciel des logicieldiplomes.

    Cependant, je ne comprends rien à ton modèle, il me paraît très étrange (à mon avis, c'est absolument pas ça que tu veux faire en réalité !)
    On ne jouit bien que de ce qu’on partage.

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    Mon but est de ne pas mettre les 2 tables dans une table. Je veux qu'il soit séparer les 2 !

  4. #4
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    La solution de StringBuilder te permet de contourner ton problème de clé et d'éviter la multiplication des tables et des données identiques.

    Une autre solution serait de mettre une clé primaire complétement différente de noLogicielpour chaque table.
    ~ Lola ~

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    J'avais pas toute mis les colonne.

    Voilà la solution que j'envisageais.


    Logiciels
    noLogiciel PK
    typeLogiciel
    nom

    LogicielEtudiant
    noLogiciel PK
    noDepartement

    LogicielDiplome
    noLogiciel
    clefPortfolio

    Mes 2 dernières tables héritent de Logiciels. Par la suite, je prend l'information dans Logiciels et je l'a mets dans EtudiantLogiciel.

    Qu'en pensez vous ? Trop compliquer pour rien où c'est une bonne approche ?

  6. #6
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Honnêtement, je ne comprends absolument pas ce que tu veux faire.

    Oublie le nom de tes tables et de tes champs.

    Exprime en langage humain ce que tu gères, tes règles de gestions, et la solution envisagée.

    Car visiblement tu es adepte de cet article (notamment le chapitre "Naming"), vu le nom de tes tables et champs qui induit totalement en erreur.

    Ici, ce que je comprends :
    - Logiciel contient X champs
    - LogicielEdudiant permet d'associer Y nouveaux champs à l'identifiant de Logiciel, mais à chaque fois une unique ligne (donc une référence de type 0,1)
    - LogicielDiplome permet d'associer Z lignes de W champs à l'identifiant de Logiciel, mais n'a pas de clé (référence de type 0,n)

    Donc en gros :
    - Le logiciel numéro 1 s'appelle "HelloWord" (table Logiciel)
    - Le logiciel numéro 1 a été fait par Frédéric (table LogicielEtudiant)
    - Le logiciel numéro 1 a comme diplômes le BAC, le MASTER et le BEP (table LogicielDiplome)

    Outre la modélisation, qui n'est pas forcément complètement stupide, mise à part l'absence de PK dans la table LogicielDiplome, je n'arrive toujours pas à comprendre ce que tu vas bien mettre comme données là dedans, et encore moins ce que tu vas pouvoir en faire...
    On ne jouit bien que de ce qu’on partage.

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    En fait, noLogiciel pour LogicielsDiplome sera PK

    Le système auparavant déjà implémenté utilisait seulement 2 tables. Soit Logiciel et EtudiantLogiciel

    Quand l'étudiant entrait ses logiciels dans le système, on ajoutait celle-ci à la table EtudiantLogiciel de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    codePermanent	noLogiciel	version
    GINE26038905	4	
    GINE26038905	5	
    GINE26038905	38	
    GINE26038905	39	
    GINE26038905	40	
    GINE26038905	41	
    GINE26038905	81
    Dans la table Logiciel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    noLogiciel	typeLogiciel	noDepartements	nom
    1	1	8	Windows
    2	1	8	Mac OS
    3	1	8	Linux
    4	2	8	Microsoft Office
    5	2	8	OpenOffice
    Maintenant, dans la table Logiciel, pour mes diplômés, je ne veux pas la colonne noDepartement. Je ne veux pas l'utiliser puisqu'elle fait référence à une autre table. Je veux par contre la colonne clefPortfolio qui fera référence à une table différente.

    Voilà la différence !

  8. #8
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    De ce que je comprends :
    - Logiciel : Table de référence des logiciels
    - LogicielEtudiant : Table de correspondance entre la table Logiciel et la table Etudiant (donc noLogiciel n'est pas PK, mais FK vers Logiciel, et la PK est constituée du couple noLogiciel et codePermanent)

    Ensuite, il me manque clairement une règle de gestion.

    Je note beaucoup de doublons dans la table LogicielEdutiant sur la colonne "Departement".
    => Es-tu sûr que cette donnée doit être gérée dans cette table ? J'ai plutôt l'impression que le département dépends de l'étudiant, non ?

    Idem pour la gestion des diplômes : c'est pas plutôt une propriété de l'étudiant qu'une propriété de la relation entre l'étudiant et ses logiciels ? Je trouve ça étrange, je n'arrive pas à trouver de cas où ça peut avoir un sens.

    Par exemple, c'est la liste des logiciels utilisé par un étudiant dans le cadre de la préparation de tel ou tel diplôme : à ce moment, Windows, par exemple, pourra être utilisé par un même étudiant pour préparer plusieurs diplômes. Idem pour Word, qui sont des logiciels "de base", dont on a toujours besoin quoi qu'on fasse.

    Donc c'est pas ça, ou alors ta solution n'est pas bonne.

    Si c'est bien ça, alors voici ce que je te propose :

    Gras souligné : PK, obligatoirement un ID numériquer auto-incrément pour des raisons de performances
    Souligné : Clé alternative (peut être composite)
    Italique : Clé étrangère (nom de la table référencée entre parenthèses)

    Etudiant
    --------
    etudiant_id
    noPermanent
    nom
    prenom

    Logiciel
    --------
    logiciel_id
    type (TypeLogiciel)
    nom

    Diplome
    -------
    Diplome_id
    noCertif

    EtudiantDepartement
    --------------------
    EtudiantDepartement_id
    etudiant_id (Etudiant)
    departement_id (Departement)

    EtudiantLogiciel
    ---------------
    EtudiantLogiciel_id
    etudiant_id (Etudiant)
    logiciel_id (Logiciel)
    version

    EtudiantLogicielDiplome
    ----------------------
    EtudiantLogicielDiplome
    EtudiantLogiciel_id (EtudiantLogiciel)
    Diplome_id (Diplome)

    Alternative 1 : si le département est lié à l'utilisation des logiciels, de la même façon que le diplôme (avec N département pour un même couple logiciel/étudiant)

    Suppression de EtudiantDepartement
    Création de :

    LogicielEtudiantDepartement
    --------------------
    LogicielEtudiantDepartement_id
    logicieletudiant_id (LogicielEtudiant)
    departement_id (Departement)

    Alternative 2 : si le département est lié à l'utilisation des logiciels, avec un seul département par couple logiciel/étudiant, alors on peut faire :

    Suppression de EtudiantDepartement
    Création de :

    LogicielEtudiantDepartement
    --------------------
    LogicielEtudiantDepartement_id
    logicieletudiant_id (LogicielEtudiant)
    departement_id (Departement)
    On ne jouit bien que de ce qu’on partage.

  9. #9
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    Désolé StringBuilder, je suis heure du Québec et j'étais partie sur une solution.

    Comme je travaille avec NHibernate, j'ai fais de l'héritage.

    J'ai donc ma table Logiciel avec comme enfant LogicielsDiplomes et LogicielsEtudiants

    À partir des données de l'enfant, je l'ai mets dans EtudiantsLogiciels.

    Qu'est-ce que t'en penses ?

    Tu veux avoir plus de détails ?

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par punisher999 Voir le message
    Désolé StringBuilder, je suis heure du Québec et j'étais partie sur une solution.

    Comme je travaille avec NHibernate....
    C'est le meilleur moyen de faire la pire merde !!!

    A lire sur les performances des ORM : http://ormeter.net/
    Vous y constaterez que nhibernate est 24 fois plus lente pour l'update et en moyenne 5 fois plus lents que les autres systèmes...
    A lire sur les méfaits des ORM qui sont la lie de la terre (les spécialiste disent que c'est comme la guerre du Vietnam : de l'enlisement pure dans les contre performances et pour finir dans des choses non maintenables...)
    A lire : http://sqlpro.developpez.com/cours/b...s-epaisses.pdf

    C'est pour cela que vous ne comprenez rien à ce que vous faites....

    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/ * * * * *

  11. #11
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Ben faut surtout voir si ta solution répond à ton problème.

    Car je le répète, j'ai répondu pas mal dans l'expectative, dans la mesure ou je n'ai absolument pas compris ce que tu cherchais à faire

    Indépendamment de ça, je ne connais pas NHibernate, je ne veux pas savoir ce que c'est que de l'héritage dans un SGBDR, et que pour moi c'est au framework de s'adapter au modèle et non l'inverse (sinon on a ce qu'on mérite, de la merde)

    Plus sérieusement, oublie ton NHibernate et tes histoires d'héritage.

    Modélise ton bousin en suivant les règles de la modélisation.

    Et quand t'auras un modèle qui tiens la route, tu pourras éventuellement l'adapter et dénormaliser pour faire rentrer des carrés dans des ronds. Mais ne cherche pas à faire des carrés avec des ronds, t'y arrivera pas, c'est pas dans ce sens qu'il faut travailler !
    On ne jouit bien que de ce qu’on partage.

  12. #12
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    En effet, j'ai peut-être plusieurs concept à revoir. Mais l'idée est là quand même !.

  13. #13
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    Il est conseillé de travailler avec le framework DataObject ?

  14. #14
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 149
    Points : 7 392
    Points
    7 392
    Billets dans le blog
    1
    Par défaut
    Franchement, surtout si ton projet est petit (ce qui m'a l'air d'être le cas), laisse tomber le framework.

    Quand t'as deux développeurs qui se courent après dans une application qui fait 10 000 lignes à tout péter, je vois pas à quoi ça sert de rajouter un framework qui fait 10 millions de lignes, impose tout un tas de contraintes, et au final est mal utilisé car à la fois mal connu et détourné car trop strict.
    On ne jouit bien que de ce qu’on partage.

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 60
    Points : 64
    Points
    64
    Par défaut
    il es tsurtout conseillé de prendre un crayon , power designer (ou autre) et de faire une modélisation qui tient la route avant toute choses.

    j'arrive un peu tard sur ce topic , mais je rejoinds totalement StringBuilder.

    quel est votre besoin ? une table étudiant , une table logiciel et entre les deux une troisième table d'association à l'air de convenir mais nous ne pouvons pas le deviner pour vous. définissez votre besoin. quel est le but ? que voulez vous gérer ?

    ( le besoin ne peux pas être de faire une table pour chaque champ , c'est pas autorisé par la convention de Genève... )

  16. #16
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    277
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 277
    Points : 56
    Points
    56
    Par défaut
    Merci de vos conseils

    Vous pouvez fermer le topic

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

Discussions similaires

  1. Connaitre la taille d'une table / base de données
    Par Empty_body dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 27/04/2007, 12h02
  2. [Conception]Identifiant base de données access
    Par del__k dans le forum Access
    Réponses: 2
    Dernier message: 13/04/2007, 12h01
  3. [Conception]cohérence Base de données Access 2003
    Par hugue dans le forum Modélisation
    Réponses: 4
    Dernier message: 25/03/2007, 18h06
  4. [Conception] Cache base de donnée Versus cache FTP ?
    Par genova dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/09/2005, 18h39
  5. Conception de Base de données (AutoIncrément oui ou non)
    Par matgel dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 16/04/2004, 08h47

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