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

Optimisations SGBD Discussion :

Plusieurs potentiels prénoms


Sujet :

Optimisations SGBD

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Japon

    Informations forums :
    Inscription : Novembre 2007
    Messages : 125
    Points : 92
    Points
    92
    Par défaut Plusieurs potentiels prénoms
    Bonjour,

    On est sur un service où on doit stocker les noms et tous les prénoms de nos clients.
    Nos développeurs fournissent ce genre de table

    ID (int)
    Nom (varchar 50)
    Prenom_1 (varchar 50)
    Prenom_2(varchar 50)
    Prenom_3(varchar 50)
    Prenom_4(varchar 50)
    Prenom_5(varchar 50)

    En sachant qu'on a tous un prénom et que +- 70% des personnes ont un 2ème prénom et que moins de 50% ont un 3ème prénom, et je ne parle même pas des 4ème et 5ème prénom.

    Je penserai plus vers une structure à 2 tables comme ça:

    Client
    ID (INT)
    Nom (varchar 50)
    Prenom (varchar 50)

    Client_prénom
    ID (int)
    Prénom (varchar 50)
    Ordre (varchar 50)

    Selon vous, quelle serait la meilleure solution ?

    Merci.

    ps: on tourne sur MSSQL 2008 R2

  2. #2
    Modérateur

    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
    Effectivement, la seconde structure est meilleure. Et quitte à séparer les prénoms, autant séparer aussi le premier prénom !
    Surtout que tes clients ne sont (ou ne seront) peut-être pas tous des personnes physiques avec prénom mais aussi des personnes morales sans prénom !

    Au fait, ça existe des prénoms de 50 caractères ? Un VARCHAR(30) ne serait-il pas suffisant ?

    Quant à l'ordre, un TINYINT serait plus approprié !

  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 897
    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 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par mikaeru Voir le message
    Bonjour,

    On est sur un service où on doit stocker les noms et tous les prénoms de nos clients.
    Nos développeurs fournissent ce genre de table

    ID (int)
    Nom (varchar 50)
    Prenom_1 (varchar 50)
    Prenom_2(varchar 50)
    Prenom_3(varchar 50)
    Prenom_4(varchar 50)
    Prenom_5(varchar 50)

    En sachant qu'on a tous un prénom et que +- 70% des personnes ont un 2ème prénom et que moins de 50% ont un 3ème prénom, et je ne parle même pas des 4ème et 5ème prénom.

    Je penserai plus vers une structure à 2 tables comme ça:

    Client
    ID (INT)
    Nom (varchar 50)
    Prenom (varchar 50)

    Client_prénom
    ID (int)
    Prénom (varchar 50)
    Ordre (varchar 50)

    Selon vous, quelle serait la meilleure solution ?

    Merci.

    ps: on tourne sur MSSQL 2008 R2
    Ni l'une ni l'autre....

    En effet vous aurez de la redondance !

    la solution je l'ai donné dans le modèle ici :
    http://blog.developpez.com/exercices...-de-personnes/

    A +

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Japon

    Informations forums :
    Inscription : Novembre 2007
    Messages : 125
    Points : 92
    Points
    92
    Par défaut
    Bonjour,
    Merci pour votre réponse.
    En effet, du tinyint est plus approprié pour l'ordre, petite erreur de clavier

    Sinon cette table ne s’occupera que de personne physique, et que le 1er prénom sera souvent affiché.

    Et merci pour le lien, je lirai en cours de journée, car bien que cela me sera utile, et que j'en suis reconnaissant, mais ce qui y est décrit dépasse « un peu » mes besoins.

    Si on parle du coté logique de la chose j’opterai directement pour une table à part, mais entre les best practice et ce qui est optimal il y a souvent une marge en READ et WRITE.

    Sinon qu’elle serait selon vous de bon argument pour favorisé la table ‘prénom’

    +
    Normalisation
    Espace gagné


    -
    Un chouia plus compliqué pour les inserts
    Prise de tête avec les développeurs pour leur faire changer d’avis (^^)


    Encore merci pour votre temps

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    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 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Il n'y a que des avantages et aucun inconvénient à utiliser ce modèle, tant sur le plan de la facilité de requêtage que sur les performances.

    mais pour le comprendre, il faut implémenter le MED (Modèle Externe de Données) c'est à dire les vues, ce qu'hélas peu de développeurs font.

    A +

  6. #6
    Modérateur

    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 SQLpro Voir le message
    il faut implémenter le MED (Modèle Externe de Données)
    Tout comme il y a le Modèle Organisationnel des Traitements (MOT), ne dit-on pas plutôt Modèle Organisationnel des Données (MOD) en méthode Merise ?

    Et pendant que j'y suis :
    Prise de tête avec les développeurs pour leur faire changer d’avis (^^)
    Ce n'est pas au développeur de l'application d'imposer la structure de la base de données !

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Japon

    Informations forums :
    Inscription : Novembre 2007
    Messages : 125
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Ce n'est pas au développeur de l'application d'imposer la structure de la base de données !
    ^^, je sais mais je suis arrivé en cours de projets donc je doit défaire une partie qui est déjà faite.
    Maintenant autre question bête.

    Pour faire un select (ou crée là vue)
    je ferai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select nom, prénom 
    from t_nom n 
    join t_prenom p on n.id=p.id_n 
    order by [ordre]
    et les dévlopeurs s'amuse a gérer les prénoms

    ou je créerai une requete du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select nom, (sub select ) prenom_1 ,(sub select ) prenom_2 ,....
    from t_nom n
    Merci encore pour vos lumières.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/03/2014, 08h33
  2. Réponses: 24
    Dernier message: 18/10/2013, 16h49
  3. comment gerer plusieurs connexions client/serveur
    Par naili dans le forum C++Builder
    Réponses: 3
    Dernier message: 14/08/2002, 16h58
  4. Génerer automatiquement plusieurs fichier .doc
    Par brunovitch dans le forum QuickReport
    Réponses: 3
    Dernier message: 09/07/2002, 08h19
  5. Shortcut avec plusieurs touches
    Par scorpiwolf dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/07/2002, 15h57

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