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 :

Conseils conception base de donnees


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut Conseils conception base de donnees
    Bonjour tout le monde.
    j'aurais 4 petites questions a vous poser qui paraitront surement simples pour certains... mais qui m'empechent d'avancer

    1- je suis entrain de creer un site qui sera en plusieurs langues. de ce fait, j'ai crée une table speciale pour les civilités:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    civilites:
    -----------------------------------------------------
    id_civilite (SMALLINT, PRIMARY, Auto Increment)
     
    civilites_traductions:
    -----------------------------------------------------
    id_civilite (SMALLINT, INDEX)
    lang (INDEX)
    libelle_court (VARCHAR 5)
    libelle (VARCHAR 20)
    ce qui me gene est la table "civilite" est ce correcte et bon d'avoir un seul champ dans cette table??

    2- est il conseillé d'utiliser des identifiants pour les langues et pays ou plutot leur code ISO (fr, en es)??

    3- lors de la creation des tables, faut il toujours mettre en INDEX les champs qui representent une cle etrangere ??

    4- et enfin, est il conseillé d'utiliser des tirets (-) ou underscore (_) dans la bdd mysql ?? car j'avais entendu dire que les - sont deconseillés!!

    Merci infiniment
    Reda

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,

    Outre ces index, tu dois définir le couple id_civilite, lang comme UNIQUE dans la table civilites_traductions.
    Il vaut effectivement mieux éviter les tirets dans les noms de colonnes, de tables, de bases, d'index etc...
    Pour le point 2, si tu te réfères au contenu de la colonne `lang`, il peut être pertinent d'utiliser une nomenclature internationale standard.
    Les civilités étant, que je sache, une nomenclature fermée et invariante ( Mme, Mle, M.) je verrais plutôt une colonne ENUM qu'une table qui ne comportera jamais que 3 lignes.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Bonjour Kris et merci bp pour ta reponse.
    Outre ces index, tu dois définir le couple id_civilite, lang comme UNIQUE dans la table civilites_traductions.
    meme si les valeurs se repetent je dois mettre ces 2 champs en UNIQUE??

    Pour le point 2, si tu te réfères au contenu de la colonne `lang`, il peut être pertinent d'utiliser une nomenclature internationale standard.
    je devrais garder l'utilisation de 'fr', 'en' pour les langues et 'FR', 'ES', 'UK' pour les pays alors si j'ai bien compris??

    Les civilités étant, que je sache, une nomenclature fermée et invariante ( Mme, Mle, M.) je verrais plutôt une colonne ENUM qu'une table qui ne comportera jamais que 3 lignes.
    excuse moi mais j'ai pas bien compris. c'est vrai qu'il y aura toujours que 3 civilités mais en plusieurs langues. quelle structure de table preconises tu?

    j'aurais 2 autres petites questions

    1- ma page web ainsi que ma bdd sont declarées en utf8. lorsque j'insere un caractere accentué (é) il m'insere "é" est ce correcte ou faut il plutot avoir "é" ?

    2- pour inserer des caracteres avec apostrophes, mieux vaut il utiliser addslashes dans la requete SQL ou plutot mysql_real_escape_string ??

    Merci Merci mille fois

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par redah75 Voir le message
    meme si les valeurs se repetent je dois mettre ces 2 champs en UNIQUE??
    L'index associé à ces deux champs accouplé doit être UNIQUE
    Citation Envoyé par redah75 Voir le message
    je devrais garder l'utilisation de 'fr', 'en' pour les langues et 'FR', 'ES', 'UK' pour les pays alors si j'ai bien compris??
    Tu peux ne garder qu'une nomenclature et utiliser UPPER() ou LOWER()
    Citation Envoyé par redah75 Voir le message
    excuse moi mais j'ai pas bien compris. c'est vrai qu'il y aura toujours que 3 civilités mais en plusieurs langues. quelle structure de table preconises tu?
    Ce que je veux dire c'est que la clé étrangère composée du code de civilité (1, 2 ou 3) plus du code de langue permet de retrouver le libellé court ou long dans la langue souhaitée. La table civilités ne sert donc à rien
    Citation Envoyé par redah75 Voir le message
    j'aurais 2 autres petites questions

    1- ma page web ainsi que ma bdd sont declarées en utf8. lorsque j'insere un caractere accentué (é) il m'insere "é" est ce correcte ou faut il plutot avoir "é" ?

    2- pour inserer des caracteres avec apostrophes, mieux vaut il utiliser addslashes dans la requete SQL ou plutot mysql_real_escape_string ??
    Pour ces deux derniers points il y a, de mémoire, d'excellentes pistes dans la FAQ. L'utilisation des entités HTML n'est point sotte en soi, mais elle ne permettra plus les recherches et/ou indexations textuelles.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Comme Maljuna Kris, je trouve que la table 'civilites' ne sert à rien.

    Pour ta table 'civilites_traductions', fais du couple {lang, id_civilite} ta clé primaire et ajoute éventuellement un index séparé sur id_civilite. Encore que ce dernier ne soit peut-être jamais utilisé car il ne contiendra que très peu de valeurs différentes et le SGBD l'ignorera probablement.

    Quant à 'lang', c'est normalement une clé étrangère faisant référence à l'identifiant de la table des langues (ou des pays). Il faudrait donc que cet identifiant soit de type char(2) comme ici. Ce n'est pas forcément optimum. À partir de VARCHAR(3) ou CHAR(4) autant prendre un type entier qui occupe la même place et est traité plus rapidement par le SGBD. Et en MySQL, je crois que SMALLINT n'occupe que 2 octets soit l'équivalent d'un CHAR(2).
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Par défaut
    Bonjour Maljuna Kris et CinePhil et grand merci pour vos reponses.

    Tu peux ne garder qu'une nomenclature et utiliser UPPER() ou LOWER()
    selon ce que CinePhile a dit, je suis a present tres confus et je ne sais toujours pas si je dois utiliser des identifiants de type SMALLINT ou des identifiants en CHAR(2) qui contiendra le code ISO du pays ou la langue!!
    CinePhile: tu dis que le type CHAR n'est pas optimum et n'est pas aussi rapide qu'un INT. est ce considérable comme difference??

    Comme Maljuna Kris, je trouve que la table 'civilites' ne sert à rien.
    OK, je supprimerai la table civilité et garder que civilite_traductions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    1	en	Mr	Mister
    2	en	Mrs	Mrs
    3	en	Miss	Miss
    1	fr	M.	Monsieur
    3	fr	Mlle	Mademoiselle
    2	fr	Mme	Madame
    est ce correcte comme structure??

    Pour ces deux derniers points il y a, de mémoire, d'excellentes pistes dans la FAQ. L'utilisation des entités HTML n'est point sotte en soi, mais elle ne permettra plus les recherches et/ou indexations textuelles.
    Crois moi j'ai bien cherché mais j'ai rien trouvé a ce sujet, du moins rien de pertinent. je suis preneur si tu as des liens...
    mais ce que je veux savoir est simple, faut il inserer 'é' ou 'é' ou 'é' pour la lettre 'é'

    Merci encore une fois pour votre aide!

Discussions similaires

  1. [Modèle Relationnel] Conseils conception base de données
    Par dontknow dans le forum Schéma
    Réponses: 7
    Dernier message: 14/05/2009, 09h18
  2. conseils conception d'une base de donnees
    Par redah75 dans le forum Requêtes
    Réponses: 26
    Dernier message: 12/05/2009, 11h09
  3. conception base de donnees
    Par jean clode dans le forum Modélisation
    Réponses: 9
    Dernier message: 19/07/2007, 11h46
  4. Conception d'une base de donnees
    Par sara1983 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 29/04/2005, 14h38

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