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

 MySQL Discussion :

Création et commencement d'une base


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Points : 19
    Points
    19
    Par défaut Création et commencement d'une base
    Bonjour à tous,

    Je me lance dans une création d'une base mysql (novice) pour travailler mes fichiers CSV. j'ai commencé par suivre le cours complet du site 'developpez.net.
    je vous explique le principe ce que je souhaite faire.
    D'abord je récupère un fichier CSV que j'intègre dans une table --OK pour 700 000 lignes

    `no` `fichier` `dt` `ch1` `ch3` `ch5` `ch7` `ch9`
    1 191018095110ug 18/09/2019 09:51:15 6.8 63.6 67.8 1.1 0.5
    2 191018095110ug 18/09/2019 09:51:20 6.8 63.8 67.9 1.1 0.5
    3 191018095110ug 18/09/2019 09:51:25 6.8 63.2 68 1.1 0.5
    4 191018095110ug 18/09/2019 09:51:30 6.8 66.6 68.1 1.1 0.5
    5 191018095110ug 18/09/2019 09:51:35 6.8 64.2 68 1.1 0.5
    ...

    ensuite je veux pour chaque ligne de CH3, CH5,CH7 et CH9 réaliser une première série de calcul que je fait avec une vue. voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE OR REPLACE VIEW V_191018095110ug
    AS SELECT round(CH1, 2) as pression,
     round(CH3*400*SQRT(3)*0.88/1000, 2) as PComp1,
     round(CH5*400*SQRT(3)*0.88/1000, 2) as PComp2,
     round(CH7*400*SQRT(3)*0.88/1000, 2) as PComp3,
     round(CH9*400*SQRT(3)*0.88/1000, 2) as PComp4,
    FROM 191018095110ug;
    ensuite je refait des calcul avec ma vue et j'arrive a afficher les données mais pas à les stocker voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    SELECT PComp1,PComp2,PComp3,PComp4,
    	PComp1+PComp2+Pcomp3+PComp4 as TotPui,
    	@fctcomp1 := CASE
                    WHEN PComp1<10 THEN ''
    		when PComp1>=10 and PComp1<66 then '0'
    		when PComp1>=66 then '1'
    		end as fctcomp1,
    	@fctcomp2 := CASE
                    WHEN PComp2<7 THEN ''
    		when PComp2>=7 and PComp2<30 then '0'
    		when PComp2>=30 then '1'
    		end as fctcomp2,				
    	@fctcomp3 := CASE
                    WHEN PComp3<10 THEN ''
    		when PComp3>=10 and PComp3<78 then '0'
    		when PComp3>=78 then '1'
    		end as fctcomp3,				
    	@fctcomp4 := CASE
                    WHEN PComp4<5 THEN ''
    		when PComp4>5 and @PComp4<35 then '0'
    		when PComp4>35 then '1'
    		end as fctcomp4,
    	@dcomp1 := case
    		WHEN @fctcomp1 = '1' then '732'
    		WHEN @fctcomp1 = '0' then '0'
    		WHEN @fctcomp1 = '' then ''
    		End as dcomp1,
    	@dcomp2 := case
    		WHEN @fctcomp2 = '1' then '345,6'
    		WHEN @fctcomp2 = '0' then '0'
    		WHEN @fctcomp2 = '' then ''
    		End as dcomp2,
    	@dcomp3 := case
    		WHEN @fctcomp3 = '1' then '817.8'
    		WHEN @fctcomp3 = '0' then '0'
    		WHEN @fctcomp3 = '' then ''
    		End as dcomp3,		
    	@dcomp4 := case
    		WHEN @fctcomp4 = '1' then '100'
    		WHEN @fctcomp4 = '0' then '0'
    		WHEN @fctcomp4 = '' then ''
    		End as dcomp4,
    		@dcomp1+@dcomp2+@dcomp3+@dcomp4 as Totdeb,
    		round(((PComp1+PComp2+PComp3+PComp4)*1000)/(@dcomp1+@dcomp2+@dcomp3+@dcomp4),2) as NRJ
    FROM V_191018095110ug;

    En fait je souhaiterai avoir toutes ses données sur une seule table (ou plusieurs) afin de d'effectuer les calculs min, avg, max et sum pour chaque colonne. Voir les données me rassure pour vérifier que cela ce passe bien mais en réalité cela me sert à pas grand chose, ce qui compte ce sont les calculs min, avg, max et sum pour chaque colonne et les valeurs Totdebavec les dates.
    j'ai essayé de faire tous les calculs sur une vue, mais je peux pas utiliser les variables utilisateurs.
    Est ce que il faut faire plusieurs tables ? est ce que je suis sur le bon chemin?
    c'est quelque chose que je vais devoir refaire a chaque import de nouveau fichier CSV (avec une procédure stocké).

    je sais pas si je suis assez explicite dans l'explication de mes demandes.

    je vous remercie par avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    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 759
    Points : 52 540
    Points
    52 540
    Billets dans le blog
    5
    Par défaut
    Votre table est mal modélisée et viole la première forme normale par apocope.

    Vous devez modéliser 2 tables comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE TABLE T_FICHIER
    (
    no      INT NOT NULL PRIMARY KEY,
    fichier VARCHAR(256) NOT NULL
    dt      DATETIME NOT NULL);
     
     
    CREATE TABLE T_FICHIER
    (
    no    INT NOT NULL FOREIGN KEY REFERENCES T_FICHIER (no),
    indice   INT NOT NULL,
    valeur  FLOAT NOT NULL,
    PRIMARY KEY (no, indice));
    Vos requêtes vont se simplifier et vos performances s'améliorer

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

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par SQLpro Voir le message
    Votre table est mal modélisée et viole la première forme normale par apocope.
    La table de tiago77 est mal modélisée, et la solution que tu proposes est évidemment la bonne.

    Par contre la première forme normale est respectée (cf. Database Design and Relational Theory - Normal Forms and All That Jazz). Quant à l’apocope en question, qu’est-elle censée abréger ?
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 759
    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 759
    Points : 52 540
    Points
    52 540
    Billets dans le blog
    5
    Par défaut
    Ch1, Ch2, Ch3... est une forme éludée, édulcorée, contournée.... de tableau
    APOCOPE : Abrègement d’un mot par la suppression des dernières lettres
    CH...

    [MESSAGE PRIVÉ à fsmrel]Au fait je t'ai envoyé un email privé... l'as tu reçu ?

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

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Bonsoir à tous,

    je vous remercie pour votre retour.

    CH1, CH2 est l'abréviation de CHANNEL1, CHANNEL2, ...

    je vais essayer de travailler sur la piste de SQLpro. Mais a priori la requête me renvoie une erreur " ERROR 1064 (42000): Erreur de syntaxe près de 'FOREIGN KEY REFERENCES T_FICHIER (no),".
    Par contre ça marche comme ça.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE T_FICHIERS(
    no    INT NOT NULL, 
    indice   INT NOT NULL,
    valeur  FLOAT NOT NULL,
    PRIMARY KEY (no, indice),
    CONSTRAINT fk_no FOREIGN KEY (no) REFERENCES T_FICHIER(no));
    Dans la 2ème table tu crée une colonne "indice" qui correspond à "fichier" de la table T_FICHIER ?

    je suis désolé mais le terme "apocope" m'est inconnu. merci pour la définition.
    Mais comment dois je nommer mes champs "CH1", "CH2", ... pour éviter l'apocope ? CHANNEL1, CHANNEL2? mais change quoi par rapport à CH1, CH2 ?

    merci

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    En fait, avec la modélisation de SQLpro, les données se présentent ainsi :

    FICHIER {no    fichier           dt                 }
             1     191018095110ug    18/09/2019 09:51:15
             2     191018095110ug    18/09/2019 09:51:20
             3     191018095110ug    18/09/2019 09:51:25
             4     191018095110ug    18/09/2019 09:51:30
             5     191018095110ug    18/09/2019 09:51:35
    
    CANAL {no    indice    valeur}
           1     1         6.8
           1     3         63.6
           1     5         67.8
           1     7         1.1
           1     9         0.5
    
           2     1         6.8
           2     3         63.8
           2     5         67.9
           2     7         1.1
           2     9         0.5
    
           3     1         6.8
           3     3         63.2
           3     5         68
           3     7         1.1
           3     9         0.5
    
           4     1         6.8
           4     3         66.6
           4     5         68.1
           4     7         1.1
           4     9         0.5
    
           5     1         6.8
           5     3         64.2
           5     5         68
           5     7         1.1
           5     9         0.5
    
    
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    OK j'ai compris.

    merci a vous deux. je clôture la discussion.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    Encore une question sur le montage de ces deux tables.

    Est ce que je dois le faire directement en CSV et l'injecter dans les tables ou est ce que il est possible de le faire avec une requête SQL ?

    j'ai regardé sur le net mais la fonction PIVOT n'est pas exploitable avec MYSQL.
    il y aurait une piste avec la fonction CONCAT().

    Pouvez vous m'aider avec un lien ou un mot clé ?

    merci d'avance

  9. #9
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2018
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Juin 2018
    Messages : 30
    Points : 19
    Points
    19
    Par défaut
    je pense que j'ai trouvé la solution.

    je partage le code pour les prochains.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
     
    Select no,
    '1' as indice,
    CH3 as valeur
    From 191018095110ug
    Union ALL
    Select no,
    '2' as indice,
    CH5 as valeur
    From 191018095110ug
    Union ALL
    Select no,
    '3' as indice,
    CH7 as valeur
    From 191018095110ug
    Union ALL
    Select no,
    '4' as indice,
    CH9 as valeur
    From 191018095110ug
    order by no,indice;
    merci

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

Discussions similaires

  1. Création et Gestion d'une base de données
    Par processeur dans le forum Général Python
    Réponses: 7
    Dernier message: 14/09/2009, 16h39
  2. Création d'accés dynamique à une base
    Par Soronite dans le forum Java EE
    Réponses: 2
    Dernier message: 26/04/2008, 18h15
  3. Réponses: 3
    Dernier message: 11/02/2008, 10h05
  4. création histogramme à partir d'une base sql
    Par coco38 dans le forum Langage
    Réponses: 7
    Dernier message: 07/04/2007, 11h57
  5. Requete sql pour création de table dans une base access
    Par Ben156 dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/01/2006, 22h12

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