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

Outils MySQL Discussion :

Transformation d'affichage et colonne virtuelle (virtualité) dans phpmyadmin [MySQL-5.7]


Sujet :

Outils MySQL

  1. #1
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut Transformation d'affichage et colonne virtuelle (virtualité) dans phpmyadmin
    Bonjour,

    pas certain d'être sur le bon forum (maintenance mysql plutôt qu'outils mysql ?) ...
    Voici mon souci :

    Dans une table, je veux créer une colonne qui reprends la valeur d'une autre colonne de la table (un peu comme si je voulais une colonne qui fait la somme de des valeurs de deux autres colonnes, mais en moins simple car je travaille sur une string et une fonction).
    Voyons ce que j'ai tenté :

    j'ai une colonne A (varchar) contenant une chaine "patience est longueur de temps"
    je veux une colonne B contenant ( -- ou affichant --, à voir plus tard) une sous-chaîne de A qui serait substring("patience est longueur de temps",'1',expression)
    expression: devrait être j'imagine une autre fonction renvoyant comme valeur l'index de l'espace (ou du premier espace ici puisque plusieurs) dans la chaîne - 1.
    En dur j'écrirais substring("patience est longueur de temps",'1','8') afin d'obtenir ce que je souhaite, c'est à dire 'patience' (heum).
    Alors dans le champ virtualité de la structure de ma table: j'ai sélectionné STORED (car je préfère storer si possible) avec comme valeur `A` (nom du champ dont je veux traiter la valeur.
    dans le champ Type MIMI j'ai mis text/plain et dans Transformation d'affichage j'ai mis Substring (fonction mysql proposée) et dans Option de transformation d'affichage je bloque. Si je mets '1','8' ça marche. Mais c'est pas le but
    Pas le but car je n'aurais un résultat similaire (correct) que dans le cas d'un insert où A prendra la valeur "craquage neuronal fort probable". Que si le premier mot est de longueur 8.

    J'attends que quand je fait INSERT INTO matable (`A`) VALUES ('help est un mot anglais qui signifie un peu au secours') automatiquement si je parcoure la matable, j'ai bien:
    3 enregistrements avec en colonne A:
    patience est longueur de temps
    craquage neuronal fort probable
    help est un mot anglais qui signifie un peu au secours

    et en colonne B:
    patience
    craquage
    help


    Alors quels sont les paramétrages corrects ? Est-ce que j'étais sur la bonne voie ? Dois-je aussi utiliser les champs "Transformation de Saisie" et "Options de transformation de saisie" ? Comment passer l'index de l'espace en paramètre dynamiquement, etc ...
    Je nage. Merci de m'expliquer.

  2. #2
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut Peut-être ai-je mal posé le problème ...
    Ou : Comment obtenir pour valeur dans 'B' une sous-chaîne de la valeur dans 'A' ? Le tout au niveau de la structure de la table puisque le champ "Virtualité" de la structure me permet de définir quelle colonne de la table afficher dans cette colonne que je tente de paramétrer ('B').
    Et en l'occurrence j'ai besoin de récupérer le premier mot de 'A' -> dans 'B' (selon un délimiteur ici l'espace, mais possiblement un tiret).
    Personne ?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Voici : select substring_index ("patience et longueur de temps", " ", 1).

    Notez : patience ET longueur de temps et non pas patience est longueur de temps

  4. #4
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    oui merci j'étais en effet sur la piste de substring_index. Bien, mais mon souci, c'est de renseigner ça dans la structure de la table, en paramétrant les colonnes 'Virtualité', 'Transformation d'affichage' , 'Option de transformation d'affichage' (voir même si nécessaire 'Transformation de saisie' , 'Option de transformation de saisie').
    Je cherche comment ça fonctionne et la doc est ridiculement pauvre sur le sujet (la plupart des docs ne faisant que décrire avec des mots ce qu'on voit affiché avec nos yeux ...), sans expliquer ni donner d'exemple sur comment ça fonctionne ...
    Mon problème, c'est dans la structure de la table, avec les possibilités qu'offrent ces champs virtualité et transformation

    NB: ha !!! je me disais aussi ! je l'ai toujours représenté avec ET, mais récemment je me suis fait la réflexion que ET ne voulez rien dire, vu que j'ai toujours entendu dire (grand-père) "patience [et] longueur de temps" puis fin de la phrase, comme s'il manquait quelque chose pour que ça prenne sens, ou comme si en fait il fallait comprendre [est]

  5. #5
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    en effet
    Patience et longueur de temps font plus que force ni que rage.
    Jean de la Fontaine (connais même pas mes classiques)

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Ce n'est pas très clair. Je reformule donc pour voir si j'ai compris le besoin :

    Une table contient différentes colonnes permettant de paramétrer le découpage d'un contenu d'une valeur source pour la transformer en valeur cible.

    Si c'est bien ça, il faudra que vous communiquiez
    • la structure de la table de paramétrage (idéalement le script "CREATE TABLE") ;
    • un extrait du contenu (quelques lignes de cette table de paramétrage) ;:
    • un extrait du jeu de données (les valeurs sources à découper) ;
    • quelques exemples de résultats attendus (les valeurs cibles obtenues) et ce, pour plusieurs cas de paramétrage de la première table.

  7. #7
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    Une table contient différentes colonnes permettant de paramétrer le découpage d'un contenu d'une valeur source pour la transformer en valeur cible.
    non c'est pas ça, cependant je vais préparer ce que vous demandez ou approximativement, un moment je reviens poster ...
    Visiblement vous n'utilisez pas les champs virtuality et phpmyadmin (virtualité pourtant à mon avis des pas une fonctionnalité propre à phpmyadmin, ça m'interloque de rien trouver sur le sujet).

  8. #8
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Donc voici la base et la table (toute simple pour l'exemple) et pour mieux comprendre :

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    -- phpMyAdmin SQL Dump
    -- version 4.9.7
    -- https://www.phpmyadmin.net/
    --
    -- Hôte : localhost
    -- Généré le : lun. 18 jan. 2021 à 13:38
    -- Version du serveur :  10.3.27-MariaDB-0+deb10u1
    -- Version de PHP : 7.3.19-1~deb10u1
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
     
    --
    -- Base de données : `test`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `matable`
    --
     
    CREATE TABLE `matable` (
      `id` int(11) NOT NULL,
      `col_A` varchar(200) NOT NULL,
      `col_B` varchar(50) GENERATED ALWAYS AS (`col_A`) STORED
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
     
    --
    -- Index pour les tables déchargées
    --
     
    --
    -- Index pour la table `matable`
    --
    ALTER TABLE `matable`
      ADD PRIMARY KEY (`id`);
     
    --
    -- AUTO_INCREMENT pour les tables déchargées
    --
     
    --
    -- AUTO_INCREMENT pour la table `matable`
    --
    ALTER TABLE `matable`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
    COMMIT;
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Ceci dit c'est incomplet puisque je n'obtiens pas ce que je veux, c'est ça que je veux paramétrer.

    Maintenant j'insère trois enregistrements pour l'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO `matable`(`col_A`) VALUES 
    ("Patience ET longueur de temps"),
    ("Craquage neuronal probable"),
    ("Help est un mot anglais qui blahblah");
    J'obtiens donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    > select * from matable;
    +----+--------------------------------------+--------------------------------------+
    | id | col_A                                | col_B                                |
    +----+--------------------------------------+--------------------------------------+
    |  1 | Patience ET longueur de temps        | Patience ET longueur de temps        |
    |  2 | Craquage neuronal probable           | Craquage neuronal probable           |
    |  3 | Help est un mot anglais qui blahblah | Help est un mot anglais qui blahblah |
    +----+--------------------------------------+--------------------------------------+
    3 rows in set (0.000 sec)
    Or, moi, je veux que la col_B contienne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     select SUBSTRING_INDEX(`col_A`,' ',1) from matable;
    +--------------------------------+
    | SUBSTRING_INDEX(`col_A`,' ',1) |
    +--------------------------------+
    | Patience                       |
    | Craquage                       |
    | Help                           |
    +--------------------------------+
    3 rows in set (0.001 sec)
    En jouant avec les transformations et options de transformations des champs (affichage/saisie) de la structure de la table dans phpmyadmin
    ...
    Plus clair ?

  9. #9
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut EUREKA J'AI TROUVÉ C'EST MAGIQUE
    IL faut renseigner la fonction dans le champs 'Virtualité' YEPAAAA

  10. #10
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    On a donc ça :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    -- phpMyAdmin SQL Dump
    -- version 4.9.7
    -- https://www.phpmyadmin.net/
    --
    -- Hôte : localhost
    -- Généré le : lun. 18 jan. 2021 à 14:03
    -- Version du serveur :  10.3.27-MariaDB-0+deb10u1
    -- Version de PHP : 7.3.19-1~deb10u1
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET AUTOCOMMIT = 0;
    START TRANSACTION;
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
     
    --
    -- Base de données : `test`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `matable`
    --
     
    CREATE TABLE `matable` (
      `id` int(11) NOT NULL,
      `col_A` varchar(200) NOT NULL,
      `col_B` varchar(50) GENERATED ALWAYS AS (substring_index(`col_A`,' ',1)) STORED
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
     
    --
    -- Déchargement des données de la table `matable`
    --
     
    INSERT INTO `matable` (`id`, `col_A`) VALUES
    (1, 'Patience ET longueur de temps'),
    (2, 'Craquage neuronal probable'),
    (3, 'Help est un mot anglais qui blahblah');
     
    --
    -- Index pour les tables déchargées
    --
     
    --
    -- Index pour la table `matable`
    --
    ALTER TABLE `matable`
      ADD PRIMARY KEY (`id`);
     
    --
    -- AUTO_INCREMENT pour les tables déchargées
    --
     
    --
    -- AUTO_INCREMENT pour la table `matable`
    --
    ALTER TABLE `matable`
      MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
    COMMIT;
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Trop cool.

    NB: en fait les champs de la structure Affichage (transformations et options) et Saisie (transformations et options) n'avaient rien à voir ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    > select * from matable;
    +----+--------------------------------------+----------+
    | id | col_A                                | col_B    |
    +----+--------------------------------------+----------+
    |  1 | Patience ET longueur de temps        | Patience |
    |  2 | Craquage neuronal probable           | Craquage |
    |  3 | Help est un mot anglais qui blahblah | Help     |
    +----+--------------------------------------+----------+

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Mais pourquoi encombrer la table en stockant une redondance ?
    Sauf raison particulière à expliquer, il est préférable d'extraire la chaîne de caractères attendue au moment où c'est nécessaire.
    La requête peut être stockée dans une vue.

  12. #12
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Bonsoir,
    Citation Envoyé par escartefigue Voir le message
    Bonjour,
    Mais pourquoi encombrer la table en stockant une redondance ?
    Ça ne me paraît pas une redondance, dans la mesure où c'est une partie d'une autre valeur à laquelle j'accéderais (conditionnel) directement par le nom de colonne, je suppose que ça allège la requête.

    Sauf raison particulière à expliquer,
    Oui, merci de vouloir m'inculquer les bonnes habitudes à prendre (il est vrai que je n'ai pas encore jeter un oeil aux tutoriels mysql, parce que si je le fais c'est à fond, et me semblait qu'avec mes notions je pouvais déjà avancer un peu avant de passer en mode studieux), merci donc, mais je pense qu'il y a un intérêt.
    Embarrassé à te l'expliquer pour ne pas le cerner moi-même précisément, je le devine.
    En outre, pourquoi inventer la fonctionnalité "Virtuality" s'agissant de la structure d'une colonne, si ça n'a d'autre but que d'alourdir les DB.
    Sans doute que le caractère (suivant ta pensée) "Virtual", serait préférable à "Stored" ou "Persistent" ... Je digresserai allègrement en répondant que pourquoi investir dans la pierre ? Par ce que ça bouge pas, c'est rassurant (sauf cataclysme évidemment).

    Comme dit plus haut, je suis très limité pour l'instant au niveau requêtes, vues, procédures, globalement l'étendue des possibilités du langage Sql. Car tout s'oublie avec le temps. J'avance à petit pas, là je "conçois" ma base et ses tables, en fonctions des données que je dois entrer, voyant quelles formes ça peut prendre et si c'est pertinent.

    Peut-être aussi que le Comment est plus important que le Pourquoi ? Dans le sens où créer une vue, j'ai pas encore vu (et pour les raisons plus haut).
    Après on peut philosopher (je sais que tu te préoccupes de l'efficience et la légereté de la base, sans quoi les procédures vont devenir fastidieuses et chronophages) en se demandant pourquoi acheter un SUV alors qu'on sait pertinemment que ça pollue + qu'une voiture - grande pour le même nombre de passager d'ailleurs, mais pas assis pareil, ou pourquoi utiliser un 4x4 quand on est à la ville et que dans le meilleur des cas, on ne part en vacances dans les chemins cabossés, à ornières et gros gadins, qu'une fois par mois ? À ces questions je dis que le comment n'est pas pertinent, que c'est ridicule et que notre planète s'en trouve considérablement ... "alourdie" d'inutilités et "suffoquante".
    pas sûr que tu vois le lien , mais bon ... En tous cas merci d'attirer mon attention (je savais déjà un peu) sur le fait qu'une base de donnée ça doit se concevoir pas n'importe comment, le but étant d'éviter les redondances, c'est clair.

    NB: dsl je tutoie, en vérité c'est ce qui m'est le plus naturel, rien à voir avec le respect .


    [Edit:21-01-2021]
    Je fis un lapsus lors du pénultième paragraphe, à la phrase
    À ces questions je dis que le comment n'est pas pertinent
    il fallait comprendre le "pourquoi" (le comment on sait, le pognon qui sert à s'acheter des jouets en fonction de son âge et de ses schémas mentaux (pour rester soft).

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Dens1 Voir le message
    Bonsoir,

    Ça ne me paraît pas une redondance, dans la mesure où c'est une partie d'une autre valeur à laquelle j'accéderais (conditionnel) directement par le nom de colonne, je suppose que ça allège la requête.
    Vous supposez mal.... Avez vous fait des testes, des mesures des benchmark ? Plus vous aurez de volume de données moins les performances seront GLOBALEMENT bonnes ! Toute redondance, même partielle pèse à trois titres sur les performances :
    1) augmentation de la durée de traitement de mise à jour
    2) augmentation des temps d'attente des requêtes concurrentes pendant le traitement des mises à jour (pendant les mises à jour des verrous exclusifs sont posés)
    3) augmentation de la durée des requêtes accédant à cette table du fait de l'augmentation du volume des données.

    les bases de données relationnelles ont été spécialement conçues pour qu'il ne faille JAMAIS introduire la moindre redondance ! (même partielle...)

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

  14. #14
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Passionnant ! Bonjour,
    du coup, je retourne la question et j'ai hâte qu'on m'éclaire:
    À quoi sert la fonctionnalité "Virtualité" paramétrable dans la structure de colonne d'une table ? À quoi, mais aussi comment s'en servir, car j'imagine pas qu'on est conçu des choses qui ne servent à rien (quoique ...) ?

    NB: j'ajoute que on parle en théorie seulement en pratique ma colonne ne contiendra pas de redondance, mais une nouvelle valeur déduite du traitement de 2 colonnes. Ce qui je pense, change tout.

  15. #15
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Dens1 Voir le message
    Passionnant ! Bonjour,
    du coup, je retourne la question et j'ai hâte qu'on m'éclaire:
    À quoi sert la fonctionnalité "Virtualité" paramétrable dans la structure de colonne d'une table ? À quoi, mais aussi comment s'en servir, car j'imagine pas qu'on est conçu des choses qui ne servent à rien (quoique ...) ?
    MySQL est un SGBD peu relationnel et mal conçu. il place des rustines idiotes là ou d'autres font du bon boulot... La virtualisation d'une colonne n'est autre que la mis en place d'une vue ! Sauf que les performances des vues étant particulièrement pourries avec mySQmerde, ils ont trouvé ce truc pour contourner un peu le problème....

    NB: j'ajoute que on parle en théorie seulement en pratique ma colonne ne contiendra pas de redondance, mais une nouvelle valeur déduite du traitement de 2 colonnes. Ce qui je pense, change tout.
    Que votre redondance se fasse de manière simple (pas de transformation des données, copie de l'info) ou par calcul, c'est une redondance ! Donc, c'est à proscrire, si vous avez fait un benchmark GLOBAL de votre base et prouvé que ce mécanisme apporte plus de gain que de pertes....

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

  16. #16
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    MySQL est un SGBD peu relationnel et mal conçu.
    Ah ? Bon. Du coup, Qu'est ce que je pourrais utiliser de mieux conçu et au niveau de mes connaissances actuelles, comme SGBD, étant "aquis" que j'appartiendrai toujours au monde de l'open-source (un peu pompeux mais doit être dit, aucune dérogation tolérée) ?
    Je précise comme vu plus haut que j'utilise Debian comme OS (et ça non plus, ça ne saurait changer).


    Citation Envoyé par SQLpro Voir le message
    il place des rustines idiotes là ou d'autres font du bon boulot... La virtualisation d'une colonne n'est autre que la mis en place d'une vue ! Sauf que les performances des vues étant particulièrement pourries avec mySQmerde,
    J'aime ce langage, c'est normalement le mien, quand j'enlève les filtres, ça me rend particulièrement tout ouïe. J'acquiesce donc que cette solution contient un vice de conception (rustine, ça me parle).

    Citation Envoyé par SQLpro Voir le message
    Que votre redondance se fasse de manière simple (pas de transformation des données, copie de l'info) ou par calcul, c'est une redondance !
    Ah. Soit.

    Citation Envoyé par SQLpro Voir le message
    si vous avez fait un benchmark GLOBAL de votre base et prouvé que ce mécanisme apporte plus de gain que de pertes....A +
    Je ne suis pas au niveau (bien évidemment) de faire un Benchmark, cela dit perdre quelques secondes sur une requête (en terme de performance donc) est la limite de ce que j'envisage de supporter. Ainsi, en terme de millisecondes, je m'en tape un peu car j'ai (à cette échelle), tout mon temps.

    j'attends une réponse fructeuse à la première question (et j'ai bien compris que je bidouillais actuellement, c'est peut-être une forme de destinée chez moi).

  17. #17
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut à tous.

    Maitre Capelovici (alias Escartefigue) aurait pu citer l'origine de cette phrase, à savoir la fable la fontaine, le lion et le rat.

    Citation Envoyé par Dens1
    Peut-être aussi que le Comment est plus important que le Pourquoi ?
    Le pourquoi et le comment sont deux notions différentes n'ayant aucune relation entre eux.
    Ce n'est pas le comment qui conditionne le pourquoi, ni l'effet agissant sur la cause.
    Le pourquoi est la signification ou encore la raison à cela.
    Le comment n'est que le moyen d'y parvenir.

    Il n'existe pas une seule solution comme réponse à une question posée.
    Mais cette réponse ne justifie pas la signification de la question posée.

    En ce qui me concerne, je mets toujours les normes après celles du respect des fonctionnalités et de la performance.
    Tant que je peux respecter les normes, je le fais, mais pas à outrances.
    La norme n'est pas une finalité, mais juste un moyen de ce simplifier la vie.

    Je me rappelle d'une application écrite en cobol, qui durait plus de quatre heures à l'exécution.
    Son développeur respectait une façon de programmer, qui était de toute évidence basique.
    Le même traitement, après mon intervention, ne durait plus que cinq minutes.

    A votre avis, que devons-nous choisir ? La performance ou le respect des normes ?
    Je rappelle que le temps CPU est facturé dans les grands centres informatiques.
    Et la performance, c'est aussi de l'argent que l'on peut utiliser par ailleurs.

    Citation Envoyé par Dens1
    À ces questions je dis que le comment n'est pas pertinent
    Si un problème est mal posé, la solution le sera d'autant plus.
    Le comment est tout aussi important que le pourquoi, mais d'une autre nature.
    Le but est de trouver le juste équilibre entre la finalité et les moyens à mettre en œuvre.

    Citation Envoyé par Dens1
    Je fis un lapsus lors du pénultième paragraphe, à la phrase
    Il est surprenant de confondre le pourquoi avec le comment.
    Voire, comme je l'ai dit, ci-dessus, confondre les moyens et la finalité.

    Citation Envoyé par Dens1
    À quoi sert la fonctionnalité "Virtualité" paramétrable dans la structure de colonne d'une table ?
    Personnellement, je ne m'en sers pas car je n'en ai aucune utilité.

    Une base de données est une collection de données dont le but est d'y accéder le plus rapidement possible.
    Pour ce qui est du traitement, cela est du ressort du langage utilisé.
    Si le SGBDR permet quelques digressions, sans que cela nuise aux normes et surtout aux performances, pourquoi pas.
    Le mieux est de faire simple !

    Citation Envoyé par SQLPRPO
    MySQL est un SGBD peu relationnel et mal conçu.
    Est-ce la faute à l'outil si l'administrateur ne sait pas s'en servir ?
    Il est plus facile de critiquer que de se mettre à l'ouvrage pour trouver une solution.

    Je sais, nous connaissons tous votre aversion pour mysql.

    Citation Envoyé par SQLPRPO
    Que votre redondance se fasse de manière simple (pas de transformation des données, copie de l'info) ou par calcul, c'est une redondance !
    Qu'est ce que la redondance ?
    --> Caractère de ce qui apporte une information déjà donnée sous une autre forme.

    S'il s'agit d'une répétition, sans que cela change quoi que ce soit à sa signification, oui, c'est inutile.

    Mais comme je le disais ci-dessus, parfois, il faut dégrader la base de données, créer des redondances, juste pour des questions de performances.
    Cela se justifie !

    Citation Envoyé par Dens1
    Du coup, Qu'est ce que je pourrais utiliser de mieux conçu et au niveau de mes connaissances actuelles, comme SGBD
    Cela dépend du la finalité de votre projet.

    Pour acheter une baguette de pain, à cent mètres près de chez vous, avez-vous besoin d'une Ferrari, d'un SUV, d'une petite voiture, d'un vélo ou tout simplement une paire de chaussure ?
    Je ne sais pas répondre à cette question car elle dépend de ce que chacun est près à faire pour obtenir ce dont il recherche.
    Pour ma part, et cela va faire plaisir à Escartefigue, le mieux est d'appliquer le principe du Rasoir d'Ockham.

    En effet, pour extraire le premier mot d'une chaîne de caractères, il faut utiliser la fonction "substring_index().
    Mais je ne préconise pas l'usage de la création de colonnes à partir d'autres colonnes.
    Vous aurez un problème de maintenance, mais surtout un problème de performance.

    Citation Envoyé par Dens1
    j'attends une réponse fructueuse à la première question (et j'ai bien compris que je bidouillais actuellement, c'est peut-être une forme de destinée chez moi).
    Vous n'êtes pas le seul à faire de la bidouille. Il n'y a rien de répréhensible à cela.
    Le problème est de trouver le juste milieu entre la finalité, d'avec le respect des normes.
    J'ai toujours gardé à l'esprit qu'en respectant la fonctionnalité, je ne devais pas négliger les performances, même s'il faut négliger les normes.


    Voici un exemple avec une vue :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    --------------
    START TRANSACTION
    --------------
     
    --------------
    set session collation_connection = "latin1_general_ci"
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    (  `id`     smallint unsigned NOT NULL auto_increment primary key,
       `col_A`  varchar(255)      NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    create view `vue` (`id`,`col_A`,`col_B`) as
      select  `id`,
              `col_A`,
              SUBSTRING_INDEX(`col_A`,' ',1) as col_B
        from  `test`
    --------------
     
    --------------
    insert into `test` (`col_A`) values
      ('Patience ET longueur de temps'),
      ('Craquage neuronal probable'),
      ('Help est un mot anglais qui blahblah')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+--------------------------------------+
    | id | col_A                                |
    +----+--------------------------------------+
    |  1 | Patience ET longueur de temps        |
    |  2 | Craquage neuronal probable           |
    |  3 | Help est un mot anglais qui blahblah |
    +----+--------------------------------------+
    --------------
    select * from `vue`
    --------------
     
    +----+--------------------------------------+----------+
    | id | col_A                                | col_B    |
    +----+--------------------------------------+----------+
    |  1 | Patience ET longueur de temps        | Patience |
    |  2 | Craquage neuronal probable           | Craquage |
    |  3 | Help est un mot anglais qui blahblah | Help     |
    +----+--------------------------------------+----------+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  18. #18
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Il est surprenant de confondre le pourquoi avec le comment.
    Certes, mais un lapsus surprend toujours un peu.
    Ce que j'ai tenté de dire c'est que, du moins parfois, le pourquoi importe peu. Cela dit, aller chercher sa baguette en Ferrari, ça fait chère la baguette (ne pas s'émouvoir que le monde parte en couille ...). Je préconise une paire de chaussure (allez bon, de marque même, pour ceux qui savent plus faire simple).

    Merci pour l'exemple, donc col_B, "Et j'y aurai accès n'importe où dans le monde" ? (un "Combattant" de la Liberté - Casino Royal)
    Je veux dire, que la vue persiste, et que je peux y accéder à tout moment (tant que je reste connecté à la DB) ?

  19. #19
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 064
    Points
    19 064
    Par défaut
    Salut à tous.

    Citation Envoyé par Dens1
    Cela dit, aller chercher sa baguette en Ferrari, ça fait chère la baguette (ne pas s'émouvoir que le monde parte en couille ...).
    Il y a des gens qui ont une drôle de façon de raisonner.
    Je ne parle pas de la consommation d'essence qui doit être énorme, ni du choix de la voiture.
    Mais bien de l'exagération dans le comportement uniquement pour se faire remarquer.
    C'est comme qui dirait, puisque je peux le faire alors pourquoi s'en priver.

    Citation Envoyé par Dens1
    Je préconise une paire de chaussure (allez bon, de marque même, pour ceux qui savent plus faire simple).
    C'est surtout bon pour le cœur de faire un peu d'exercice chaque jour.

    Citation Envoyé par Dens1
    Je veux dire, que la vue persiste, et que je peux y accéder à tout moment (tant que je reste connecté à la DB) ?
    Oui.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  20. #20
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    C'est surtout bon pour le cœur de faire un peu d'exercice chaque jour.
    ...
    Oui.@+
    Bien, toutefois je verrai à l'usage (je note la "philosophie" ;-) ).
    Merci @++

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] affichage de données saisies manuellement dans phpmyadmin
    Par coulibaly_zoumana dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 21/04/2020, 17h15
  2. [XL-2010] Transformer une BDD en colonne selon choix dans useform pour alimenter graphique.
    Par Vaness_28 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/06/2016, 11h59
  3. Insérer une colonne virtuelle compteur dans une requête
    Par Timkeeper dans le forum Langage SQL
    Réponses: 10
    Dernier message: 14/06/2015, 17h36
  4. Problème d'affichage de colonnes dans un listview
    Par claireP23 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 12/06/2007, 16h30
  5. Réponses: 15
    Dernier message: 22/07/2005, 09h49

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