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 :

Conseil sur modélisation


Sujet :

Schéma

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut Conseil sur modélisation
    Bonjour,

    j'aimerais votre avis sur ces 2 options de modélisation que j'ai trouvé :
    Voici les tables concernés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    T_PIECE(id,nom,coul,design..)
    T_Kit(id,nom)
    T_LIGNE_KIT(#idkit,#idpiece,nbpiece)
    
    PROJET(id,nom,datedeb...)
    
    POSTE(id,#idProjet#,refPieceKit,estunkit,qte ...)
    Un kit contient de 1 à N différentes pieces.
    Les 3 premières tables sont des tables de référence, qui inidiquent le matériel dispo dans l'etablissement.
    Cet établissement effectue donc différents projets en meme temps. Donc lorque l'on va utiliser une piece ou un kit pour un projet, il devient un POSTE. La table poste va donc contenir les liste de toutes les pieces et Kits impliqués dans les projet, et je pense que grace à la clef étrangére(idprojet) je peux a tout moment recupérer les pieces et Kit concernés par un projet en particulier.

    Mon problème est de savoir comment gérer les kits quand ils sont impliqués dans un projet. D'après vous un champs booléen 'estunkit' suffirait il ? Ou serait il préférable de créer un table poste mais pour les kits ? Ce qui m'obligerait a voir 2 tables pour gérer les Pieces et Kits impliqués dans les projets.

    J'espère ne pas avoir été trop confus dans mes explications,
    Merci d'avance.

    Tankian.

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    A vue de nez tu as plusieurs solutions (problème d'héritage) :
    1) la tienne : POSTE (IdPoste, #IdProjet, IdPieceouKit, estunkit...)
    mon avis : la pire ;-) parce que tu ne peux pas définir d'intégrité référentiel.
    2) POSTE (IdPoste, #IdProjet, #IdPiece, #IdKit, ... ) (l'un des deux (IdKit, IdPiece) étant NULL, la clé primaire ne peux les contenir)
    3) POSTEKIT (#IdProjet, #IdKit, ... )
    POSTEPIECE (#IdProjet, #IdPiece, ... )
    4) POSTE (IdPoste, #IdProjet, toutes les informations communes)
    POSTEKIT (IdPoste, #IdKit, ... )
    POSTEPIECE (IdPoste, #IdPiece, ... )
    5) Tu définis des kits constitués d'une seule pièce, comme cela POSTE ne contient que des kits (redondance pour chaque pièce)
    J'ai une préférence pour la 3 ou la 4 en fonction du nombre de données communes ; plus clairement : je n'aime pas du tout la 2 et encore moins la 1, la 5 est une pirouette.
    Dans les solutions 3 et 4 tu peux toujours reconstruire l'ensemble des postes par des vues (union)

    [edit] Correction de quelques bêtises sur le cas 4[/edit]

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut
    Merci beaucoup.

    Ce MCD (car il est plus vaste) me pose beaucoup de problème et les différentes solutions que tu me proposes pour la gestion de cette contrainte m'aident beaucoup.
    En fait au départ j'avais fait mon MCD comme ta solution 4 le proposait, cela dit, j'ai peur de me retrouver avec 2 numéros de poste identique (sur POSTEKIT et POSTEPIECE). Je m'explique, au niveau de la base de données, on sait que le poste est identifiable via l'id + le ref soit du kit ou de la piece (en fonction de la table) mais pour l'utilisateur, le numéro qui doit s'afficher à l'écran est : Projet + Famille + numéro
    Projet c'est la ref projet
    Famille est un numéro choisit parmis 10 différents (donc redondant)
    numéro : je dois incrémenter les poste de 0 à N suivant chaque projet.

    Donc une fois que la personne saisie ses postes, en faisant un select sur tous les postes des 2 tables elle se retrouve forcément avec 2 postes ayant le meme numéro, certains désigant des kits, d'autres des pieces...

    Du coup je dois trouver une astuce évitant ce pb.

    En tout cas merci beaucoup de ton aide

    Bonne journée

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    J'ai rectifié le cas 4 (erreurs et présentation ), tel qu'il est cela devrait résoudre ton problème (il ne peut y avoir deux postes avec le même N° pour un même projet).

    J'ai déclaré dans la table POSTE (IdPoste, IdProjet) comme clé primaire, ce qui te permet de renuméroter à partir de 1 pour chaque Projet.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut
    Ah oui exact, le cas 4 remplit toutes les contraintes que j'avais
    Cela dit, idPoste de la table POSTE() est une clef numérique que je dois incrémenter manuellement afin de pouvoir repartir de 0 qd on saisie les postes d'un nouveau projet ?

    Merci pour ton aide précieuse [/b]

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Citation Envoyé par Tankian
    Cela dit, idPoste de la table POSTE() est une clef numérique que je dois incrémenter manuellement afin de pouvoir repartir de 0 qd on saisie les postes d'un nouveau projet ?
    Oui, c'est l'inconvénient, d'un autre côté locker tous les postes d'un même projet le temps de les créer ne devrait pas poser trop de problèmes.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut
    Oui oui c'est sur...
    Je pense que c'est de toute façon la solution la plus adaptée.

    Une dernière fois merci.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 182
    Par défaut
    Je pense que de toute façon c'est la solution la plus adaptée aux contraintes de gestion.

    Une dernière fos merci pour ton aide.

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

Discussions similaires

  1. Conseils sur la persistance
    Par le Daoud dans le forum Persistance des données
    Réponses: 3
    Dernier message: 14/12/2004, 14h34
  2. [JSP-Servlet] Conseils sur façon de coder
    Par gunnm dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 09/12/2004, 21h57
  3. cherche conseil sur livre pour jbuilder
    Par med1 dans le forum JBuilder
    Réponses: 3
    Dernier message: 09/06/2004, 14h33
  4. [débutant] conseils sur contraintes et alter table
    Par maysa dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 26/05/2004, 10h03
  5. Recherche Livre / Conseils sur la conception de Base
    Par Yeuma dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 02/01/2004, 15h25

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