SGBD table avec des trous

SGBD table avec des trous - SQL/NoSQL - Programmation

Marsh Posté le 03-03-2006 à 17:10:10    

Bonjour,
 
Voilà je sui sur un nouveau projet : la gestion des pannes ! Une panne peut concernée une télé, un sèche linge, une machien à lavée,... J'ai crée une table panne, une table télé, car je veux des référence précises pour les télé, une table sèche ligne, une table machineà laver tous les 3 reliées à la table panne. Mais je vais avoir plein de trou dans ma table panne car une panne concerne un seul type d'appareil (ou télé ou sèche ligne, ...) est ce que cela vous choque t'il ?
 
Merci par avance !

Reply

Marsh Posté le 03-03-2006 à 17:10:10   

Reply

Marsh Posté le 03-03-2006 à 18:24:03    

boumbo73 a écrit :

est ce que cela vous choque t'il ?


Oui. A quoi ça correspond d'avoir une table "télé" ? Tu gères 45000 TV dans ta bdd ???
 
1) tu crées une table "electroménager" contenant

  • identifiant (unique)
  • libellé

Ta table contiendra tout ton électroménager donc tu auras des lignes de ce style
01 tele
02 machine à laveR
03 sèche linge
Tu peux rajouter des colonnes supplémentaires si t'en as envie
 
2) tu crées une table "panne" contenant

  • identifiant (unique)
  • date de la panne
  • identifiant de l'appareil en panne

Eventuellement d'autres trucs comme

  • date de la réparation
  • px de la réparation
  • nom du réparateur

etc...
 
Donc, si ta télé tombe en panne aujourd'hui et ton sèche linge est tombé en panne hier, ta table "panne" contiendra
01 04-03-02 03
02 04-03-03 01
etc...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-03-2006 à 19:48:59    

D'aoccord et merci mais le truc ce que je dois sauvegarder des éléments bien précis par électromnager par ex la tlé le type de télécommande, la machine à laver le kilo d'eau et de linge, ... c'est pour ca que j'ai fait un table télé, sèche linge,...

Reply

Marsh Posté le 04-03-2006 à 08:56:28    

boumbo73 a écrit :

D'aoccord et merci mais le truc ce que je dois sauvegarder des éléments bien précis par électromnager par ex la tlé le type de télécommande, la machine à laver le kilo d'eau et de linge, ... c'est pour ca que j'ai fait un table télé, sèche linge,...


ok. Tu as une table "télé" caractérisant les différentes TV que tu peux avoir, et une table "sèche-linge" caractérisant les différents sèches-linges". Mais il te faut quand-même une table "electroménager" contenant

  • identifiant
  • type de l'électroménager
  • identifiant de l'électroménager


Donc tu as une table "TV" contenant
01 45cm
02 70cm
03 plasma
 
Une table "machine" contenant
01 4kg frontal
02 7kg frontal
03 4kg tambour
04 7kg tambour
 
Et une table "électroménager" contenant
01 "T" 01
02 "M" 01
03 "M" 02
04 "T" 02
etc...
 
Si tu fais pas ça, tu seras embêté car il faudra que l'identifiant de la TV ne soit pas dans la table "sèche-linge" et inversement...
 
 


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 04-03-2006 à 18:02:49    

oui mais admettons je peux faire ma table panne et la relier a tele, sèche linge, ... et qd je saisie la panne je remplie la colonne concernée genre télé et puis sèche linge restera vide !

Reply

Marsh Posté le 04-03-2006 à 18:26:53    

je comprends pas pourquoi il y aurait des trous dans la table panne. Dans la table panne, tu as un champ ID de la panne auto_increment, un champ type qui indique le type d'electromenager, et un champ ID elecromenager qui renvoie à la table correspondant au bon type d'electromenager. Il est où le trou ?

Reply

Marsh Posté le 04-03-2006 à 19:08:33    

ben dans la table panne puisquelle directement reliée à télé, seche linge pas de table electroménager ... !!!

Reply

Marsh Posté le 04-03-2006 à 19:55:12    

et pourquoi il y aurait des trous dans la table panne avec ce que je t'ai dit ?
 
j'ai pas parlé de table electromenager, mais un champ qui precise le type d'electromenager dans la table panne


Message édité par Djebel1 le 04-03-2006 à 19:56:00
Reply

Marsh Posté le 04-03-2006 à 19:57:01    

boumbo73 a écrit :

oui mais admettons je peux faire ma table panne et la relier a tele, sèche linge, ... et qd je saisie la panne je remplie la colonne concernée genre télé et puis sèche linge restera vide !


Pourquoi tiens-tu absolument à faire une table contenant 3 colonnes où t'auras toujours 2 colonnes sur 3 de vides ??? Déjà conceptuellement c'est pas évolutif. Même si ça marche aujourd'hui parce que tu n'as que 3 types d'appareils possibles, si demain tu veux passer à 4, tu seras vraiment dans la m...
 
Tu fais une table "panne" qui contient simplement :
- identifiant unique (qui sert si t'as besoin que quelque chose d'autre puisse référencer la panne)
- date de la panne
- autres infos style "nom du réparateur, px de la réparation, etc..."
- identifiant de l'appareil en panne
- type de l'appareil en panne (style "T" ou "M" )
Avec ces 2 derniers champs, tu pourras toujours retrouver les caractéristiques de l'appareil qui était en panne. Et si demain tu passes à 4 ou 10 appareils, ben il te suffit de rajouter des types et basta.
!!!


Message édité par Sve@r le 04-03-2006 à 20:15:29

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 04-03-2006 à 19:58:26    

un trou je pense que c'est un champ avec les ID de la primary key qui ne se suivent pas ... et donc effectivement, pas de trous avec ce que toi et moi proposons

Reply

Marsh Posté le 04-03-2006 à 19:58:26   

Reply

Marsh Posté le 04-03-2006 à 20:01:56    

Djebel1 a écrit :

un trou je pense que c'est un champ avec les ID de la primary key qui ne se suivent pas


Non, je crois que j'ai compris son idée (évidemment il l'explique tellement bien...)
Il veut faire une table "panne" contenant
- identifiant de la panne
- identifiant de la TV
- identifiant de la machine
- identifiant du sèche linge
 
Et comme chaque panne ne concernera qu'un appareil, il aura à chaque fois 2 infos de vides sur les 3 pour chaque panne.
 
J'ai repris mon post précédent où ma question n'avait plus de raison d'être...
 

Djebel1 a écrit :

...avec ce que toi et moi proposons...


C'est quand-même assez trivial...


Message édité par Sve@r le 04-03-2006 à 20:10:43

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 04-03-2006 à 20:31:22    

oui, +1 sur toute la ligne

Reply

Marsh Posté le 05-03-2006 à 00:08:23    

oui voila c'est ca (cf Sve@r) et donc je vais avoir des trous dans ma table ! Est ce que cela vous choque t'il ?
Désolé si je mexprime mal !

Reply

Marsh Posté le 05-03-2006 à 01:18:17    

tu nous lis ou quoi ? Avec la solution qu'on te donne, tu n'auras pas 2 champs sur trois qui seront null ... donc pas de "trous" !!

Reply

Marsh Posté le 05-03-2006 à 11:20:56    

boumbo73 a écrit :

oui voila c'est ca (cf Sve@r) et donc je vais avoir des trous dans ma table ! Est ce que cela vous choque t'il ?
Désolé si je mexprime mal !


Oui, c'est choquant parce que totalement non viable à long terme. En programmation, tu seras sans cesse obligé de tester quel champ est rempli pour savoir quel appareil était en panne. T'auras donc à chaque fois une suite de 2 "if" imbriqués. Et si, une fois ton projet terminé on  te dit "maintenant on rajoute un 4° type d'appareil", faudra tout reprogrammer.
 
Again !!! (ctrl-c+ctrl-v)
Tu fais une table "panne" qui contient simplement :  
- identifiant unique (qui sert si t'as besoin que quelque chose d'autre puisse référencer la panne)  
- date de la panne  
- autres infos style "nom du réparateur, px de la réparation, etc..."  
- identifiant de l'appareil en panne  
- type de l'appareil en panne (style "T" ou "M" ou "S" )  
Avec ces 2 derniers champs, tu pourras toujours retrouver les caractéristiques de l'appareil qui était en panne avec un simple "switch/case". Et si demain tu passes à 4 ou 10 appareils, ben il te suffit de rajouter des types et basta.
 

Djebel1 a écrit :

tu nous lis ou quoi ? Avec la solution qu'on te donne, tu n'auras pas 2 champs sur trois qui seront null ... donc pas de "trous" !!


Exact.
1) Chaque ligne de "panne" aura tous ses champs remplis => pas de trou
2) Chaque ligne de "panne" te permettra de retrouver quel appareil était en panne => t'as tout ce qu'il te faut


Message édité par Sve@r le 05-03-2006 à 12:48:45

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-03-2006 à 15:28:32    

Ok d'accord !
Je serais le type d'appreil or j'aimerais connaitre le type exacte de l'appareil (télé samsumsg ref 3.21).Je vais donc rentrer tous mes appareils dans une table pour ensuite les entrées dans d'autre table (télé, ...) Par exemple un home cinéma je peux avoir une panne que sur une enceinte mais il faut que je sauvegarde le type d'enceinte qui va avec ce home cinema et que sauvegarder egalement ce genre d'enceinte dans la base !
Je ne sais pas si j'ai été très clair celà dit les aides qe vous m'apportez me sont appréciables !!!

Reply

Marsh Posté le 05-03-2006 à 15:33:09    

Bein soit tu crées une table enceintes et tu dis que les enceintes sont kaput, et tu t'en fous que c'etait livré avec une télé et une cafetière, soit tu te fais une table home cinéma, et reglé


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-03-2006 à 15:36:40    

et si je fais une table home cinéma je vais donc bien avoir des trous dans ma table panne car une panne ne concernera pas toujours un home cinéma !

Reply

Marsh Posté le 05-03-2006 à 17:09:06    

Bon basta, t'es le multi de qui? ça fait X messages qu'on t'explique que TU NE VAS PAS AVOIR DE TROU!
(et désolé pour ceux qui dormaient)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-03-2006 à 17:26:46    

boumbo73 a écrit :

Ok d'accord !
Je serais le type d'appreil or j'aimerais connaitre le type exacte de l'appareil (télé samsumsg ref 3.21).Je vais donc rentrer tous mes appareils dans une table pour ensuite les entrées dans d'autre table (télé, ...) Par exemple un home cinéma je peux avoir une panne que sur une enceinte mais il faut que je sauvegarde le type d'enceinte qui va avec ce home cinema et que sauvegarder egalement ce genre d'enceinte dans la base !


 
Tout dépend de la granularité que tu veux obtenir. Soit tu dis que les enceintes vont avec le HomeCinéma et si t'as une panne concernant les enceintes tu dis que la panne concerne l'ensemble, soit tu dissocies les enceintes du home et tu peux mettre en panne ce que tu veux.  
Si on ne connait pas l'ensemble de tes contraintes, on peut que tatonner pour te répondre. Donc maintenant tu as une table "home cinéma" et une table "enceintes". Et ta table "panne" contiendra toujours pareil
- identifiant
- date de la panne (+ autres infos subsidiaires)
- identifiant appareil en panne
- type appareil en panne (type pouvant être "TV" ou "ML" ou "SL" ou "HC" ou "EN" )
 
Si maintenant il te faut distinguer "enceinte gauche" de "enceinte droite" ou aller plus loin et distinguer dans les enceintes le bloc d'alimentation du bloc sonore, ben tu continues à décomposer la granularité de tes éléments dans ta bdd !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 05-03-2006 à 18:09:11    

+1
Mais le principe est exactement le meme que tu lui avais proposé avant.  
=> On ne fais pas X colonnes dans la table de panne , en sachant que pratiquement toutes seront vides, on fait plusieurs tables et apres on link les identifiants


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-03-2006 à 19:23:54    

Si je lie les identifiants de ttes les tables (télé, ...) à la table panne j'aurais forcement plein de trous !!!

Reply

Marsh Posté le 05-03-2006 à 20:10:25    

Non justement pas .
Ta table panne contiendra 1 champ "id_truc_en_panne" et 1 champ "type_de_truc_en_panne".
 
=> La tele de type 34 est en panne?
=> INSERT INTO panne (id_truc_en_panne, type_de_truc_en_panne) VALUES (34, 'tele');
 
Ceci est un exemple pour que tu piges le fonctionnement (il y a mieux mais c'est deja ça). Donc t'aura jamais de trou


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 05-03-2006 à 20:17:03    

et je vais anticiper la question suivante ! Ta chaine hifi 45 est en panne ? np !
 
 INSERT INTO panne (id_truc_en_panne, type_de_truc_en_panne) VALUES (45, 'chaine');  
 
(bon apres pour type_de_truc_en_panne vaut mieux mettre un tinyint, avec un chiffre correspondant à un type de matériel)

Reply

Marsh Posté le 05-03-2006 à 21:21:39    

Djebel1 a écrit :

et je vais anticiper la question suivante ! Ta chaine hifi 45 est en panne ? np !
 
 INSERT INTO panne (id_truc_en_panne, type_de_truc_en_panne) VALUES (45, 'chaine');


Et si la télé (qui a aussi l'identifiant 45 mais c'est un pur hasard) est en panne
INSERT INTO panne (id_truc_en_panne, type_de_truc_en_panne) VALUES (45, 'tele');
 
le couple "45 tele" n'étant pas le même que "45 chaine", tu pourras toujours retrouver les infos concernant l'appareil en panne dans la table de l'appareil.
Style :
"mais quelles sont les caractéristiques de cette télé qui est donc en panne didonc ?" => select * from tele where identifiant=45
et puis
"et quelles sont alors les caractéristiques de cette chaine qui est donc en panne didonc ?" => select * from chaine where identifiant=45


Message édité par Sve@r le 05-03-2006 à 21:22:52

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 06-03-2006 à 01:32:00    

@Djebel1, ma remarque "il y a mieux mais c'est deja ça" était justement la pour ça .. Disons qu'au point ou il en est , je crois qu'il vaut mieux aller au plus simple plutot que de chercher l'optimisation ...
 
Une fois qu'il aura compris les grandes lignes on passera a la prochaine chose


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-03-2006 à 07:40:19    

vi spa faux :D

Reply

Marsh Posté le 06-03-2006 à 08:55:07    

Voilà comment je voulais faire ma table panne comme ca :
 
- id_panne
- date_panne
- tele_panne
- seche ligne_panne
- telecommande_panne
 
Puis les tables :
télé :
- tele_id
- tele_ref
 
sèche linge
- sl_id
- sl_ref
 
...
 
Donc comme ca quand je selectionne ma télé, mon sèche linge, ... Je suis obligée de sauvegarder des éléements bien précis pour chaque appareil !!!
 

Reply

Marsh Posté le 06-03-2006 à 09:02:24    

Mon, j'abandonne.
Soit t'es le multi de qqn et tu t'amuses bien, soit tu n'en es pas un et .. pas de bol ..
 


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-03-2006 à 09:12:56    

Le multi de qq ? Merci quand même pour ton aide !

Reply

Marsh Posté le 06-03-2006 à 16:53:40    

boumbo73 a écrit :

Voilà comment je voulais faire ma table panne comme ca :
 
- id_panne
- date_panne
- tele_panne
- seche ligne_panne
- telecommande_panne


Vi, on a tous compris. Mais c'est pas bon pour plusieurs raisons :
1) t'auras toujours 2 colonnes de vides sur les 5
2) si tu dois programmer derrière des trucs se rapportant à ta panne, tu seras obligé de programmer style

if (tele_panne != NULL)
{
    ....
}
else
{
    if (seche_linge_panne != NULL)
    {
        ...
    }
    else
    {
        ...
    }
}


Ce qui est horrible d'un point de vue prog.  
 
3) Si demain, dans un mois ou un an tu rajoutes un nouvel appareil à prendre en compte dans tes pannes, tu seras obligé
- de reprendre entièrement ta table "panne"
- de reprendre entièrement tout le code de m.... ci-dessus et rajouter, à tous les endroits gérants les appareils en panne, un "if (telecommande_panne != NULL)".
 
Avec notre méthode que tu t'obstines à ne même pas essayer de comprendre
1) tu gères tous tes appareils en panne
2) tu n'as pas d'infos vides (pas de trou)
3) c'est facilement programmable, style

switch (truc_en_panne)
{
     case 1: // Télé
         ....; break;
     case 2: // Sèche-linge
        ....; break;
     case 3: // Télécommande
        ....; break;
}


Et si le traitement se fait dans un langage proche C ou PHP, on peut même remplacer ce branchement multiple par un tableau contenant tous les appareils possibles et faire une simple boucle de balayage du tableau. Voire créer une table des types d'appareils gérés et relier cette table à la table "panne".
       
4) c'est évolutif (on rajoute une valeur au tableau ou dans la table des types d'appareils)
 
Bon, soit tu fais semblant d'être neuneu, soit tu l'es réellement. Dans tous les cas, comme l'a dit "exox_ch", pas de bol.


Message édité par Sve@r le 06-03-2006 à 17:01:39

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 06-03-2006 à 16:55:13    

moi je vote fake

Reply

Marsh Posté le 06-03-2006 à 17:05:52    

Djebel1 a écrit :

moi je vote fake


Boaf, j'ai envoyé un message aux modérateurs...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 06-03-2006 à 17:14:57    

Oui ben pas besoin de rabaisser les gens ! Vou êtes doué dans tout vous ? Vous réussisez tout du premier coup !!!
 
Voilà mon résultat :
table panne avec  
- id_panne
- id_electro
 
une table electroménager
- id_electro
 
et après des table télé, sèche linge reliées à eletroménager :
télé :
- id_electro
- reference_télé
 
sèche linge
- id_electro
- reference_sl
- id_marque
- kg, ...
 
C'est ce qu'on appel un héritage ...

Reply

Marsh Posté le 06-03-2006 à 17:37:43    

boumbo >> t'es légèrement lourd sur ce coup !! tu as eu plein de solutions parfaitement viables dans ce topic, mais tu persistes à les ignorer et à vouloir implanter ta structure de table à 2 balles.
donc soit tu tiens compte de ce qu'on te dit, soit je ferme ton topic et je  t'envoie en prime faire un petit tour d'une semaine chez les teletubbies pour que tu apprennes à tenir compte des conseils qu'on te donne


Message édité par Harkonnen le 06-03-2006 à 17:37:58

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-03-2006 à 17:49:24    

ok ok ! pas besoin de s'enerver ! Par contre on peut se faire traiter de neuneu ... la c'est pas grave !  ...

Reply

Marsh Posté le 06-03-2006 à 18:23:18    

oui enfin bon, faut comprendre aussi hein ! tu restes sourd à toutes propositions, ça use à force


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 06-03-2006 à 18:36:36    

boumbo73 a écrit :

Oui ben pas besoin de rabaisser les gens ! Vou êtes doué dans tout vous ? Vous réussisez tout du premier coup !!!
 
Voilà mon résultat :
table panne avec  
- id_panne
- id_electro
 
une table electroménager
- id_electro
 
et après des table télé, sèche linge reliées à eletroménager :
télé :
- id_electro
- reference_télé
 
sèche linge
- id_electro
- reference_sl
- id_marque
- kg, ...
 
C'est ce qu'on appel un héritage ...


Non [:pingouino]
 
Essaie de réaliser qu'elle ne sert strictement à rien ta table "electroménager" là [:pingouino]
 
Sve@r t'a donné la réponse dès son 2e post bon sang [:pingouino]
 
Table panne
    colonne ID (de la panne)
    date
    id_appareil
    Autres (description, noms du réparateur, coût, date de réparation, état de la réparation, ...)
 
Table appareil
    colonne ID (de l'appareil)
    type d'appareil (télé, sèche linge, autre, le nom de la table précise de ton appareil en fait)
    ID de l'appareil dans sa table spécialisée
 
Et ensuite une table pour chaque type d'appareil avec un ID et les diverses informations nécessaires dans tes modèles
 
Voila, point barre [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-03-2006 à 18:53:47    

aahhhh d'accord ! Vu comme ca je comprend mieux ! lol !
Merci de votre aide ! En plus grâce à cela je vais pouvoir relier des éléctroménagers entre eux, ex : télé avec télécommande !!!!
Merci pour tout votre aide !

Reply

Marsh Posté le 06-03-2006 à 20:36:30    

laule


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed