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 :

Modèle base de données, gestion de matériel


Sujet :

Schéma

  1. #1
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut Modèle base de données, gestion de matériel
    Bonjour à tous,

    Je me pose une question sur la manière dont je dois créer ma base de donnée pour un projet. Il s'agit de faire de la gestion de matériel.
    Voila comment je vois cela :



    - Un Material peut avoir un seul Hardware ( exemple : Laptop, Desktop, Cellphone...)
    - Un Hardware peut avoir une ou plusieurs Spec (par exemple : Modele, serials number etc...)
    - Un Material peut avoir une SpecValue par Spec pour son type de HardWare.

    Voici quelque donnée afin de vous aidez à comprendre :




    J'ai deux questions la dessus :

    - Est-ce que ce modele de donnée vous semble correcte ?

    - Si oui, comment récupérer toutes les infos pour un IdType donné, en une seule ligne par IdMaterial ?

    J'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT     tblMaterial.IdMaterial, tblSpecValue.SpecValue, tblMaterial.MaterialName
    FROM         tblMaterial INNER JOIN
                          tblSpecValue ON tblMaterial.IdMaterial = tblSpecValue.IdMaterial INNER JOIN
                          tblSpec ON tblSpecValue.IdSpec = tblSpec.idSpec INNER JOIN
                          tblHardware ON tblMaterial.IdType = tblHardware.IdType AND tblSpec.IdType = tblHardware.IdType
    WHERE     (tblHardware.IdType = '1')
    Mais cela me ressort les infos en plusieurs colonnes.

    Je ne sais pas si je suis sur la bonne voie, merci d'avance à ceux qui vont m'éclairer

    Cordialement.

    DeWaRs

  2. #2
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Bonjour,

    - Un Material peut avoir un seul Hardware ( exemple : Laptop, Desktop, Cellphone...)
    - Un Hardware peut avoir une ou plusieurs Spec (par exemple : Modele, serials number etc...)
    - Un Material peut avoir une SpecValue par Spec pour son type de HardWare.
    A priori, quand je regarde les règles de gestion pour ton modèle, si je m'en tiens juste à cela, je comprends que un HARDWARE et un MATERIEL représentent le même concept.
    Et là, je ferai un modèle à deux entités. Une entité HARDWARE et une autre entité SPECS. Et entre les deux, il y a une relation MANY-TO-MANY.

    - Est-ce que ce modèle de donnée vous semble correcte ?
    Comme il s'agit d'une modélisation, tout dépends de la définition et de la compréhension que tu as des objets du monde réel que tu modélises.

    - Si oui, comment récupérer toutes les infos pour un IdType donné, en une seule ligne par IdMaterial ?
    Je pense le modèle final te donnera trois tables au lieu de quatre. Et ta table MATERIAL et ta table HARDWARE étant confondues.

    Tu auras ainsi une chaine plus courte pour la recherche de l'info.

  3. #3
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Tout d'abord, merci de ta réponse.

    Citation Envoyé par yimson Voir le message
    Bonjour,

    A priori, quand je regarde les règles de gestion pour ton modèle, si je m'en tiens juste à cela, je comprends que un HARDWARE et un MATERIEL représentent le même concept.
    Et là, je ferai un modèle à deux entités. Une entité HARDWARE et une autre entité SPECS. Et entre les deux, il y a une relation MANY-TO-MANY.
    Hardware et Material sont bien deux entitées distinctes, le Hardware correstpond à un type de matériel (un LAPTOP, un DESKTOP etc...) alors qu'un Material correspond a un materiel de ce type. Par exemple un materiel peux un Lenovo T510, qui est de type LAPTOP. Je veux garder cette granularité pour mes futurs filtres.

    Vois-tu ou je veux en venir ?

    Je vais essayé de concaténé la table hardware et la table Spec, voir ce que cela donne.

    Cordialement.

    DeWaRs

  4. #4
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Bonjour Dewars
    Ton pseudo me fait penser à un dessin animé.

    Hardware et Material sont bien deux entitées distinctes, le Hardware correspond à un type de matériel (un LAPTOP, un DESKTOP etc...) alors qu'un Material correspond a un materiel de ce type. Par exemple un materiel peux un Lenovo T510, qui est de type LAPTOP. Je veux garder cette granularité pour mes futurs filtres.
    Je voyais Lenovo T510 tel que tu l'a présenté comme une valeur de SPEC notamment le modèle ou la marque.

  5. #5
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par yimson Voir le message
    Bonjour Dewars
    Ton pseudo me fait penser à un dessin animé.
    C'est plutôt une marque de Whisky mais bon, pourquoi pas

    Citation Envoyé par yimson Voir le message
    Je voyais Lenovo T510 tel que tu l'a présenté comme une valeur de SPEC notamment le modèle ou la marque.
    Effectivement, c'est le cas (pas dans mon modèle actuel mais dans la logique des choses ...)
    Mais je n'arrive pas a modéliser cette idée... 3 Tables : Hardware, Spec et SpecValue ?

    Cordialement

    DeWaRs

  6. #6
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Ouais;

    Trois tables HARDWARE (Id, Nom, ...), SPEC(Id, IdHardware, Type, Nom, ...), SPECVALUE(Id SpecValue, IdSpec, Value, ...)

    Un HARDWARE peut avoir plusieurs SPEC.
    Une SPEC peut avoir plusieurs SPECVALUE.

  7. #7
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Citation Envoyé par yimson Voir le message
    Ouais;

    Trois tables HARDWARE (Id, Nom, ...), SPEC(Id, IdHardware, Type, Nom, ...), SPECVALUE(Id SpecValue, IdSpec, Value, ...)

    Un HARDWARE peut avoir plusieurs SPEC.
    Une SPEC peut avoir plusieurs SPECVALUE.
    Mais avec ce modele, je perd un cran de granularité. Comment je fait pour selectionner tous mes LAPTOP par exemple.

  8. #8
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Mais avec ce modele, je perd un cran de granularité. Comment je fait pour selectionner tous mes LAPTOP par exemple.
    LAPTOP est un HARDWARE. Tu recupères tous les LAPTOP dans la table HARDWARE. Et ses caractéristiques dans la table SPEC, et les valeurs des SPEC dans la table SPECVALUES

  9. #9
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Desolé, je reviens a la charge car, soit je n'ai pas compris (très probable), soit il y a une incomprehension quelque part.
    En fait je ne vois pas, avec tes explications, comment recuperer les valeurs distinctes pour differents laptop (par exemple...) .

    A mon avis, ce n'est pas possible avec seulement 3 tables ...

    Merci de votre aide.

    DeWaRs

  10. #10
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Tu ne proposes rien comme requête? As-tu implémenté le modèle?
    Auquel cas propose une requête

  11. #11
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Bonjour Dewars

    Comme promis, voici une proposition , je pense, serait une évolution vers a solution ou ....

    1er constat :
    Au modèle que tu m'a proposé sur le Chat, j'ai ajouté une clé étrangère dans la table tblMaterial qui fait référence à la table tblHardware. Ça donne le code suivant pour cette table là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE tblMaterial ( 
    	IdMaterial int NOT NULL, 
    	MaterialName varchar(10) NULL,
        IdType int NOT NULL,
        CONSTRAINT tblMaterial_pk PRIMARY KEY (IdMaterial),
        CONSTRAINT tblMaterial_id_positive CHECK (IdMaterial > 0),
        CONSTRAINT tblMaterial_unique UNIQUE (IdMaterial),
        CONSTRAINT tblMaterial_fk FOREIGN KEY (IdType) REFERENCES tblHardware
    );
    2ème constat :
    Ton modèle est permissif aux redondances de données. Voir requêtes suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO tblSpec(IdSpec, IdType, SpecName) VALUES (1, 1, 'SerialNumber');
    INSERT INTO tblSpec(IdSpec, IdType, SpecName) VALUES (2, 1, 'HostName'); 
    INSERT INTO tblSpec(IdSpec, IdType, SpecName) VALUES (3, 1, 'Price'); 
    INSERT INTO tblSpec(IdSpec, IdType, SpecName) VALUES (4, 2, 'IMEI'); 
    INSERT INTO tblSpec(IdSpec, IdType, SpecName) VALUES (5, 2, 'SerialNumber'); 
    INSERT INTO tblSpec(IdSpec, IdType, SpecName) VALUES (6, 2, 'Price');
    Ligne 1 et Ligne 5, ce qui me faisait dire dans mes précédents posts que le modèle à quatre tables n'est pas l'idéal. Mais on peut gérer avec cela.

    Proposition de requête :
    Pour répondre a ton besoin
    Pour un hardware donné, par exemple un LAPTOP, récupérer la liste des Specvalues de chaque IDMaterial
    Je propose la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Temp.HardWareName, Temp.MaterialName, a.specvalue
    	--, a.idspecvalue, a.idspec, a.idmaterial 
    FROM tblSpecValue a
    JOIN ( SELECT c.HardWareName, b.idmaterial, b.MaterialName, b.IdType
    		FROM tblMaterial b
    		JOIN tblHardware c ON c.IdType = b.IdType 
    				AND c.HardWareName like '%LAPTOP%'
    	) Temp ON Temp.idmaterial = a.idmaterial;
    Tu peux comprendre cette requête, c'est pas compliqué.

    NB: J'ai exporté ton script dans POSTGRESQL. Ces scripts sont compatibles Postgresql et "à priori" pourraient marcher aussi sur un SGBD qui supporte le SQL Standard.

    Tu as en pièce jointe les scripts complets et les sorties de résultats avec le client psql.

    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  12. #12
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Whaou ! Chapeau !! je test tout cela ASAP et je reviens vers toi.

    Merci encore !

    DeWaRs

  13. #13
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Bon, j'ai regarder, je comprend mais ... C'est n'est pas encore ce que je veux au niveau de la requete. Par contre, le modele semble bon.

    Je voudrais faire en une requete quelque chose comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (SELECT idSpec FROM tblSpec where IdType = '1') FROM tblSpecValue
    En gros, je recupere dans un premier temps tous les IdSpec pour un IdType donner, puis je selectionne les specvalues pour ces IdSpec .

    Je sais pas si c'est clair (ca l'est dans ma tete, et c'est deja pas mal) et si c'est faisable ...

    Cordialement.

    DeWaRs

  14. #14
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Bonjour mon ami (Le whysky)

    Je pense que là tu ne pose pas bien le probème. As tu regardé la sortie sur le fichier image, c'est bien la sortie que tu m'a présenté sur le Chat.

    Écris clairement ce que tu veux en littéral ou alors un jeu de données. Il faut aussi noter que dans ma requête tu peux remplacer LAPTOP par l'identifiant en adaptant la requête.

    Je reste disponible

  15. #15
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Hello,

    Je n'ai malheureusement pas conserver notre echange via le chat, mais, pour le jeux de donnée present dans la database, je voudrais le resultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    HARDWARE | MATERIALNAME | HOSTNAME | SerialNumber | Price  ---> Nom de colonne
    LAPTOP   | LAPTOP N1    | MYCOMP1  | 12dx12       | 1252
    LAPTOP   | LAPTOP N2    | MYCOMP2 | sqa4568a     | 1252
    LAPTOP   | LAPTOP N3    | MYCOMP3  | dsasdsadsad  | 1555
    Imaginons que par la suite je rajoute une spec "Modele" à l'hardware "LAPTOP", et un nouveau material avec les specvalue MYCOMP4, xcsa45a, 1555, Lenovo T500 j'aurais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    HARDWARE | MATERIALNAME | HOSTNAME | SerialNumber | Price | Modele  ---> Nom de colonne
    LAPTOP   | LAPTOP N1    | MYCOMP1  | 12dx12       | 1252  | NULL
    LAPTOP   | LAPTOP N2    | MYCOMP2 | sqa4568a     | 1252  | NULL
    LAPTOP   | LAPTOP N3    | MYCOMP3  | dsasdsadsad  | 1555  | NULL
    LAPTOP   | LAPTOP N4    | MYCOMP4  | xcsa45a  | 1555  | Lenovo t500
    Je ne sais pas si c'est plus clair maintenant... Je l'espere ...

    Cordialement.

    DeWaRs

  16. #16
    Membre éclairé
    Avatar de yimson
    Homme Profil pro
    Consultant Big Data
    Inscrit en
    Janvier 2009
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant Big Data
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 215
    Points : 747
    Points
    747
    Par défaut
    Adaptes juste la requête que je t'ai proposée.
    Il ya des champs en commentaires.

  17. #17
    Membre actif Avatar de DeWaRs
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Décembre 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 291
    Points : 269
    Points
    269
    Par défaut
    Hello,

    Non, meme avec les champs en commentaire, ce n'est pas bon.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    LAPTOP	LAPTOP N1	12dx12	2	1	1
    LAPTOP	LAPTOP N1	MYCOMP1	3	2	1
    LAPTOP	LAPTOP N1	1252	4	3	1
    LAPTOP	LAPTOP N2	sqa4568a	5	1	2
    LAPTOP	LAPTOP N2	MYCOMP2	6	2	2
    LAPTOP	LAPTOP N2	1252	8	3	2
    LAPTOP	LAPTOP N3	dsasdsadsad	10	1	3
    LAPTOP	LAPTOP N3	MYCOMP3	12	2	3
    LAPTOP	LAPTOP N3	1555	13	3	3
    En gros, le nombre de colonnes doit etre variable dans ma requete, en fonction du hardware, je recupere la liste des specs, puis les specvalue associées a ces specs, grouper par material...

    C'est compliquéééééééé !!!


    Cordialement

    DeWaRs

Discussions similaires

  1. ma base de donnée gestion d'un stock
    Par flooo dans le forum Modélisation
    Réponses: 7
    Dernier message: 15/03/2022, 00h19
  2. Base de données Gestion commerciale
    Par skrounch dans le forum Access
    Réponses: 5
    Dernier message: 07/03/2007, 16h28
  3. Réponses: 5
    Dernier message: 02/06/2006, 14h53
  4. Réponses: 1
    Dernier message: 17/06/2004, 17h44

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