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

PHP & Base de données Discussion :

ENUM vs VARCHAR vs TINYINT(jointure) ?


Sujet :

PHP & Base de données

  1. #1
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut ENUM vs VARCHAR vs TINYINT(jointure) ?
    Bonjour à tous,

    Ça fait longtemps que je n'étais plus venu ici et je n'ai trouvé ma réponse nulle part (excusez-moi donc si elle avait déjà été traitée ici.)

    La question pourrait être simple mais apparemment la réponse n'est pas si évidente :

    Que recommandez-vous comme "type de champs" pour une table ayant un champs limité ou qui revient souvent.
    Exemples :
    les pays (FR, BE, CH, ..)
    le statut d'un membre (modo, administrateur, ..)

    A la base j'aurai eu tendance à préférer la jointure, mais ceci rend la table BRUT beaucoup moins lisible sans doc. Et d'autre part oblige de faire pas mal de jointure. Le ENUM quant à lui est souvent critiqué pour diverses raisons (notamment qu'il doit difficile de rajouter ou supprimer de nouvelles valeurs), quand au VARCHAR bien que plus encombrant et à peine plus lent (me semble-t'il) que le INT, pourrait au final être la meilleure solution (tout bêtement) ?

    (Peut-être que la réponse "absolue" n'existe pas, et que ça dépend du cas par cas, mais alors des règles peuvent être établies en fonction de la cardinalité du champs, de la longueur du varchar, etc.. non ?)

    Merci d'avance pour vos réponses. Ou idées.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    eval(a='eval(a)')
    recursive make it evil
    eval make it eval

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Les données d'une table isolée n'ont pas à être compréhensibles par un humain : les données exploitables s'obtiennent avec des requêtes qui suivent le schéma d'organisation des données.
    Un nommage cohérent des colonnes et des tables est déjà suffisant pour permettre la compréhension de l'organisation des données : si une table contient un pays_id, on s'attends à trouver une table de référence "pays" dans la base.
    Une base de données relationnelle utilise des tables et des relations ; c'est ce qu'on s'attend à trouver dans son organisation.

    Au passage, n'oublie que tu as CHAR, plutôt que VARCHAR pour stocker des données textuelles de taille fixe.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

Discussions similaires

  1. [11g] Jointure entre varchar et numeric
    Par Escandil dans le forum Administration
    Réponses: 5
    Dernier message: 31/05/2013, 15h15
  2. [MySQL] Transformer un champ VARCHAR en TINYINT contenant des données
    Par yoyot dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/06/2007, 15h47
  3. Réponses: 2
    Dernier message: 28/06/2007, 15h56
  4. enum ou tinyint(1)
    Par Thierry8 dans le forum Requêtes
    Réponses: 6
    Dernier message: 24/06/2006, 08h19
  5. jointure renvois pas tous les enregistrements
    Par rayonx dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/08/2002, 12h51

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