{MySQL} aide pour base

Fermé
kaiser6684 Messages postés 7 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 août 2009 - 31 juil. 2009 à 11:16
imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 - 4 août 2009 à 10:17
Bonjour,

Mon problème est complexe,
je suis actuellement en alternance en bts informatique de gestion,
mon entreprise actuelle, gère la détaxe de pas mal de grosse enseigne comme Fnac, Virgin etc....
dans lesquelles sont installés des PC, imprimante, ecran et logicel à nous.
Mon employeur me demande de créer une base de données pour répertorier tout les informations requis de chaque magasins comme les paramètres de la détaxe du logiciel, les modeles des pc, imprimante, quantité etc....
les interventions sur les matériels, les appels reçus de leur part.

j'ai donc fait une base de données suivantes :

create database xxxx;

use xxxx;

create table magasins(
id_magasins int not null auto_increment primary key,
code_mag int not null,
numero_activation int not null,
nom_mag varchar(40) not null,
adresse_mag varchar(100) not null,
telephone_mag int not null,
contact_mag varchar(30) null,
site_name varchar(30) not null,
version_logiciel varchar(10) not null,
date_update date null,
tva_normal varchar(5) null,
tva_majore varchar(5) null,
tva_reduite varchar(5) null,
tva_autre varchar(5) null,
euro_minimum varchar(10) null,
charge_struct varchar(10) null,
sauts_1lignes int null,
printing_prog varchar(15) null,
alerte_qte_bdv int null,
tx_remb_normal varchar(5) null,
tx_remb_majore varchar(5) null,
tx_remb_reduite varchar(5) null,
tx_remb_autre varchar(5) null,
qte_archives int null,
path_transfert varchar(25) null,
sequence_mag int null,
tranche_first int null,
tranche_last int null,
commentaires varchar(200) null
) engine = InnoDB;

create table materiels(
id_materiels int not null auto_increment primary key,
modele varchar(50) not null,
date_installation date null,
ecran int null,
imprimante int null,
PC int null,
autres int null,
OS varchar(25) null,
id_magasins int,
index (id_magasins),
constraint fk_materiels_id_magasins foreign key(id_magasins) references magasins(id_magasins) on delete cascade
) engine = InnoDB;

create table interventions(
id_interventions int not null auto_increment primary key,
date_interventions date not null,
description varchar(255) not null,
id_materiels int,
index (id_materiels),
constraint fk_interventions_id_materiels foreign key (id_materiels) references materiels (id_materiels)
) engine = InnoDB;

create table appels(
id_Appels int not null auto_increment primary key,
interlocuteurs varchar(25) not null,
date_appels date not null,
id_interventions int,
index (id_interventions),
constraint fk_appels_id_interventions foreign key (id_interventions) references interventions (id_interventions)
) engine = InnoDB;

------------------------------------------------------------------------------------------------------------------------------

Mais le problème c'est que j'ai un gros soucis au point de vue materiels.
En effet, comment faire car pour la tour par exemple, il comprendra une OS que les ecrans n'auront pas.
Il y aura pas obligatoirement une imprimante par exemple.

J'ai pas énormément de connaissance en SQL, seulement ce que j'ai appris en cours.

Et maintenant, il souhaite une que l'on garde une historique des matériels même s'ils ont été échangé et des interventions et appels également.

Car mon idée était de supprimer tout les interventions, et appels liés à un matériels lorsque celui ci était supprimé.

Evidemment, je travail aussi sur l'interface web de ce programme mais pour ce côté là je n'ai pas beaucoup de difficulté.

Merci d'avance à tous ceux qui m'aideront!

Je vous met aussi le SQL que j'ai crée mais j'arrive pas à trouver d'autre idée pour le reste.

create database xxxx;

use xxxx;

create table magasins(
id_magasins int not null auto_increment primary key,
code_mag int null,
numero_activation int null,
nom_mag varchar(40) null,
adresse_mag varchar(100) null,
telephone_mag int null,
contact_mag varchar(30) null,
site_name varchar(30) null,
version_logiciel varchar(10) null,
date_update date null,
tva_normal varchar(5) null,
tva_majore varchar(5) null,
tva_reduite varchar(5) null,
tva_autre varchar(5) null,
euro_minimum varchar(10) null,
charge_struct varchar(10) null,
sauts_1lignes int null,
printing_prog varchar(15) null,
alerte_qte_bdv int null,
tx_remb_normal varchar(5) null,
tx_remb_majore varchar(5) null,
tx_remb_reduite varchar(5) null,
tx_remb_autre varchar(5) null,
qte_archives int null,
path_transfert varchar(25) null,
sequence_mag int null,
tranche_first int null,
tranche_last int null,
commentaires varchar(200) null
) engine = InnoDB;

create table materiels(
id_materiels int not null auto_increment primary key,
modele varchar(50) not null,
date_installation date null,
quantite int not null,
id_magasins int,
index (id_magasins),
constraint fk_materiels_id_magasins foreign key(id_magasins) references magasins(id_magasins)
) engine = InnoDB;

create table ecran(
id_materiels int not null primary key
) engine = InnoDB;

create table imprimante(
id_materiels int not null primary key
) engine = InnoDB;

create table PC(
id_materiels int not null primary key,
systeme_exploitation varchar(35) not null
) engine = InnoDB;

create table autre(
id_materiels int not null primary key
) engine = InnoDB;

create table interventions(
id_interventions int not null auto_increment primary key,
date_interventions date not null,
description varchar(255) not null,
id_materiels int,
index (id_materiels),
constraint fk_interventions_id_materiels foreign key (id_materiels) references materiels (id_materiels)
) engine = InnoDB;

create table appels(
id_Appels int not null auto_increment primary key,
interlocuteurs varchar(25) not null,
date_appels date not null,
id_interventions int,
index (id_interventions),
constraint fk_appels_id_interventions foreign key (id_interventions) references interventions (id_interventions)
) engine = InnoDB;
A voir également:

4 réponses

imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
1 août 2009 à 11:35
Sympa comme sujet ...

je serai toi, je découperai différemment la base ...
Le soucis étant que tu ne sais pas comment elle va évoluer, autant la prévoir évolutive.
Toutes les petites tables (écran, imprimante, pc, autre ...) ne sont pas très justifiées.

créé une table "Type de matériel"
id (int auto)
nom (varchar)

dans laquele tu aura :
1 PC
2 ecran
3 imprimante
...
comme ça évolutive à l'infini


ta table matériel :
id (int auto)
id_magasins (int)
id_type (int)
nom ....
...

Pour le status du matériel, pas de soucis non plus :
tu rajoute un champ "etat" dans lequel tu met une valeur coorespondant :
1 - actif
2 - remplacé
3 - supprimer ...

Tu peux même envisager d'avoir une table pour lier les états ... c'est toi qui voit.

Avec tout ça, tu fait de requette un peu plus compliqué, mais tu peux rechercher exactement ce que tu veux.

Si tu veux, tu peux aussi créer une liaison sur la table matériel pour lier plusieurs matériels entre eux :
rajoute un champ Parent qui est liée à l'id d'une autre fiche de la même table.
Par contre, ça te fait une table récursive, il faut le gérer en PHP ... mysql ne sait pas le faire tout seul.

Tu pourrai aussi utiliser une table de croisement, pour lier plusieurs matériels à une même intervention (par exemple) ...

0
kaiser6684 Messages postés 7 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 août 2009
3 août 2009 à 16:15
Merci beaucoup IMW,

je vais voir ça, en attendant j'ai beaucoup de chose à faire donc je peux pas m'y mettre tout de suite.

Une fois que j'ai vu ça je posterai un message pour dire si cela fonctionne bien ou pas.

encore merci de ton aide.
0
kaiser6684 Messages postés 7 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 4 août 2009
4 août 2009 à 09:59
Bonjour IMW,

j'ai essayé de faire ce que tu m'as dit et ça donne ça :

create table type_materiels(
id_type_materiels int not nul auto_increment primary key,
nom varchar(15) not null
) engine = InnoDB;

create table materiels(
id_materiels int not null auto_increment primary key,
modele varchar(50) not null,
date_installation date null,
OS varchar(25) null,
etat varchar(10) not null,
quantite int not null,
id_magasins int,
id_type_materiels int,
index (id_magasins),
constraint fk_materiels_id_magasins foreign key(id_magasins) references magasins(id_magasins),
constraint fk_materiels_id_type_materiels foreign key(id_type_materiels) references type_magasins(id_type_magasins)
) engine = InnoDB;

pourrais-tu me dire si c'est bon?

merci d'avance pour ton aide.
Je remercie également ceux qui pourrons m'apporter d'autres idées :)
0
imw Messages postés 233 Date d'inscription vendredi 17 juillet 2009 Statut Membre Dernière intervention 8 septembre 2011 42
4 août 2009 à 10:17
ca me parait pas mal ...
0