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

Requêtes MySQL Discussion :

type de clé primaire pour une table pseudo temporaire


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut type de clé primaire pour une table pseudo temporaire
    Bonjour à tous, j'ai juste une question sur les clés primaires et le type suivant le cas de figure.

    Je ne vous cache pas que je suis très attentif concernant les performances mais également le côté pratique.
    J'ai une table qui va contenir une trace de chaque action émise par des membres cette table est donc pseudo temporaire étant qu'elle sera vidé de temps à autres.

    Dans ce cas l'utilisation d'un identifiant numérique auto incrémenter n'est pas l'idéal.
    En gros chaque membre peut supprimer une entrée, ou plusieurs de son gestionnaire d'action mais peut également le vider entièrement sans oublier que l'administrateur vide cette espace de temps en temps.
    Donc ma question l'utilisation d'un type varchar pour la clé primaire de ses entrée est elle une bonne idée sachant que le numérique est de toute façon plus rapide.

    En gros je vais générer de manière aléatoire de longue clé alphanumérique (30 caractères) pour être certain de limité la casse sur le côté unique de la clé.

    Un peu de ce style : f1be90a92604482a84d87d600b66ace8

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par gtraxx Voir le message
    J'ai une table qui va contenir une trace de chaque action émise par des membres cette table est donc pseudo temporaire étant qu'elle sera vidé de temps à autres.

    Dans ce cas l'utilisation d'un identifiant numérique auto incrémenter n'est pas l'idéal.
    Pourquoi cet a priori ?
    Citation Envoyé par DocMySQL
    INT | codé sur 4 octets | de -2 147 483 648 à 2 147 483 647
    BIGINT | codé sur 8 octets | de -9 223 372 036 854 775 808 à + 9 223 372 036 854 775 807
    Il y a de quoi en stocker des actions d'utilisateurs non ?

    Donc ma question l'utilisation d'un type varchar pour la clé primaire de ses entrée est elle une bonne idée sachant que le numérique est de toute façon plus rapide.
    Le VARCHAR est à bannir des clés primaires !
    Voir l'article de SQLPro sur ce qu'est une bonne clé.

    En gros je vais générer de manière aléatoire de longue clé alphanumérique (30 caractères) pour être certain de limité la casse sur le côté unique de la clé.

    Un peu de ce style : f1be90a92604482a84d87d600b66ace8
    Mauvaise idée !

    Je reprends le début de la première phrase citée :
    J'ai une table qui va contenir une trace de chaque action émise par des membres
    Si les actions sont génériques et pré-définies dans une table des actions, tu as ce MCD :
    membre -0,n----Effectuer----0,n- action
    date -0,n---------------|

    Ce qui génère, par exemple, les tables suivantes :
    membre_mbr (mbr_id, mbr_nom...)
    action_act (act_id, act_libelle...)
    mbr_effectuer_act_mea (mea_id_membre, mea_id_action, mea_date...)

    => La clé primaire est alors double colonnes, chaque colonne n'ayant jamais une valeur supérieure au nombre de membres ou d'actions maximum.

    Si chaque action enregistrée n'est associée qu'à un seul utilisateur, tu as ce MCD :
    membre -0,n----Effectuer----1,1- action

    Ce qui génère, par exemple, les tables suivantes :
    membre_mbr (mbr_id, mbr_nom...)
    action_act (act_id, act_id_membre, act_libelle, act_date...)

    => Cette fois il peut y a voir à long terme un act_id très grand si tu as beaucoup de membres qui font beaucoup d'actions. mais encore une fois, avant d'arriver à 9 milliards de milliards d'actions enregistrées avec un BIGINT, je penses que tu as le temps ! Et si tu crains de ne pas en avoir assez, avec un UNSIGNED BIGINT, ça te fait 18 milliards de milliards !

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Ok ok, merci cinePhil
    En gros un bon vieux int, ... avec un auto incrément fera l'affaire.
    J'ai été assez perturber en fouillant sur le net suivant le sujet des clé primaire assez contradictoire sans pour autant avoir une réponse clair au niveau des perf
    Je vais revoir ma structure et adapter mon système de clé : f1be90a92604482a84d87d600b66ace8
    Pour tout à fait autre chose, pourquoi pas une clé API
    J'ai répondu en privée concernant ta question sur zend jquery

  4. #4
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par gtraxx Voir le message
    Pour tout à fait autre chose, pourquoi pas une clé API
    Qu'appelles-tu une "clé API" ?

  5. #5
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Ben je cherchais le moyen d'avoir des clés primaire bien optimisé ou du moins d'avoir un complément d'explication.
    Mais je devais implanter dans un tout autre contexte un système de clé d'API pour les membres ayant la possibilité d'utiliser des portions de scripts dans leurs site (un simple champs varchar dans la table).
    Je travail sur plusieurs plate forme pour le moment qui vont utiliser ce genre de système

Discussions similaires

  1. Réponses: 5
    Dernier message: 05/02/2013, 11h27
  2. Demande infos Data Type pour une table
    Par Mikl-Dba dans le forum Langage SQL
    Réponses: 1
    Dernier message: 09/12/2011, 18h25
  3. Réponses: 1
    Dernier message: 01/05/2011, 21h36
  4. [phpMyAdmin] 2 clés primaires pour une table
    Par O'Kryn dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 16/06/2010, 10h17
  5. Est-ce possible d'avoir 2 clés primaires pour une table ?
    Par angell dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 01/06/2008, 19h59

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