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

Administration MySQL Discussion :

Question bête mais qui mérite reflexion. SLUG vs INT


Sujet :

Administration MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 28
    Points
    28
    Par défaut Question bête mais qui mérite reflexion. SLUG vs INT
    Bonjour,

    Avec l'utilisation quotidienne de wordpress dans mon travail, je vois très souvent des champs en varchar afin de définir par exemple le type d'un post (page/post etc) sous forme de "slug"

    Dans la BDD on retrouve donc dans ces champs types, leurs slug.
    Et là, après une réflexion, je me demande si c'est utile d'utiliser ce genre de méthode, ou vaut il mieux utiliser un INT afin de définir dans un tableau en PHP chaque correspondance.

    Imaginons, une table où sont enregistrés des transactions, j'aimerais stocker le type de paiement utilisé.
    Stocker dans un champ tinyint(1) 1 pour CB et 2 pour chèque
    Ou stocker directement sous forme de "slug" CB/CH

    Nous pouvons également imaginer ce cas là pour la civilité d'une personne
    Stocker "Mr,Mme,Mlle" ou "1 pour Mr ..."

    Qu'en pensez vous ?
    Merci

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    La bonne modélisation est une table de référence et une clé étrangère dans les tables qui utilisent cette référence.

    Imaginons, une table où sont enregistrés des transactions, j'aimerais stocker le type de paiement utilisé.
    Stocker dans un champ tinyint(1) 1 pour CB et 2 pour chèque
    Ou stocker directement sous forme de "slug" CB/CH
    tr_mode_paiement_mpt (mpt_id, mpt_libelle)
    te_transaction_trn (trn_id, trn_id_mode_paiement)

    Avantages :
    1) Quand il faut ajouter un mode de paiement, il suffit d'insérer une ligne dans la table de référence. On ne touche pas à la structure des tables qui utilisent des modes de paiement ni les programmes qui listent ces modes de paiement car ils doivent normalement faire une simple requête sur la table de référence pour alimenter une liste déroulante.

    2) Selon l'interclassement utilisé (le type de caractères) le moindre libellé alphanumérique peut prendre un petit paquet d'octets. Répété par le nombre de lignes qui l'utilisent, ça peut commencer à faire un beau gâchis d'espace !
    Une clé étrangère de type entier prendra uniquement 4 octets, voire moins si on utilise des entiers encore plus petits :
    Citation Envoyé par Doc MySQL
    Type Octets De A
    TINYINT 1 -128 127
    SMALLINT 2 -32768 32767
    MEDIUMINT 3 -8388608 8388607
    INT 4 -2147483648 2147483647
    BIGINT 8 -9223372036854775808 9223372036854775807
    3) Les libellés alphanumériques répétitifs peuvent être écrits avec des orthographes différentes, ce qui ne facilite pas les statistiques et peut donner des résultats faux suite à certaines requêtes qui ignorent ces orthographes différentes.
    Le prétexte "Oui mais c'est contrôlé par le programme" n'est pas recevable car la BDD peut être utilisée potentiellement par plusieurs programmes ou alimentée par une source de données externe.
    Au moins, avec la table de référence, le libellé est officiel et enregistré une seule fois.

    Inconvénient :
    Il faut faire une jointure pour récupérer le libellé.
    Mais une table de référence est généralement très petite et restera en permanence en mémoire vive si elle est fréquemment utilisée. Et comme la jointure est le principal boulot d'un SGBD, c'est l'opération la plus optimisée et il ne faut aps en avoir peur !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    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 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Plus important encore :
    Le secret d'une bonne modélisation réside dans quelques concept extrêmement simples :
    • La mise à jour d’une information ne doit pas se traduire par la modification de plus d’une ligne

    Par exemple, pour changer de Melle. en Mme. si tu a codé ta colonne civilité directement dans la table des personnes, ce sera des milliers de lignes à mettre à jour, donc un verrouillage exclusif de toute la table qui ne pourra donc pas être utilisée, même en lecture le temps de ce faire....

    En revanche, dans une table de référence, un tel changement n’impacte qu'une seule ligne (donc verrou exclusif de ligne), ce qui n'empêche aucunement d'autres requêtes même de mise à jour sur cette même table et n'a aucune incidence d'aucune sorte sur la table de production.

    Paradoxalement tu te retrouvera avec 2 id pour un même libélle, mais dont l'un sera considéré comme obsolète donc à ne plus utiliser...

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

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Mouais...
    Moi je ferais quand même la mise à jour de toutes les clés étrangères référençant les "Mademoiselle" en y référençant "Madame".

    Encore une belle connerie gouvernementale bien inutile ce truc d'ailleurs !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 18
    Points : 28
    Points
    28
    Par défaut
    Très clair, merci bien !

  6. #6
    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 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Mouais...
    Moi je ferais quand même la mise à jour de toutes les clés étrangères référençant les "Mademoiselle" en y référençant "Madame".

    Encore une belle connerie gouvernementale bien inutile ce truc d'ailleurs !
    Oui, mais aux heures creuses et en découpant ton batch pour minimiser la transaciton....

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

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

Discussions similaires

  1. Questions bêtes mais servent au démarrage
    Par gentilman_delphi dans le forum Débuter
    Réponses: 4
    Dernier message: 04/01/2011, 23h04
  2. Réponses: 3
    Dernier message: 25/09/2010, 14h38
  3. Requête toute bête mais qui ne fonctionne pas
    Par m51_2000 dans le forum Requêtes
    Réponses: 1
    Dernier message: 13/11/2007, 13h15
  4. Question bête mais importante pour moi
    Par walf80 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 27/04/2007, 04h40
  5. [Tableaux] Question bête mais
    Par nazoreen dans le forum Langage
    Réponses: 2
    Dernier message: 14/06/2006, 09h06

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