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

Langage SQL Discussion :

Comment créer ma table personne ?


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 69
    Points
    69
    Par défaut Comment créer ma table personne ?
    Bonjour

    Je suis en train d'essayer de créer des tables pour un répertoire d'adresses. J'hésite beaucoup et je me pose trop de questions.

    Une solution que j'ai trouvée, je crée une table dans laquelle j'aurai :
    PERSONNE
    -id_personne
    -nom
    -prenom
    -adresse1
    -adresse2
    -adresse3
    -tel1
    -tel2
    -tel3
    etc ...
    
    Je trouve cette solution facile pour créer mes requêtes ou un import facile de cette table.

    Par contre je me suis dit qu'il y aurait beaucoup de doublons comme par exemple il peut avoir plusieurs prénoms, identités, des adresses identiques qui appartiennent à plusieurs personnes, comme un frère et une sœur qui habitent sous le même toit.
    J'ai pensé à faire ceci :
    PERSONNE
    num_personne    // le numéro de la personne enregistrée
    num_nompren     // le numéro qui correspond au couple (nom, prenom)
    num_adressse    // le numéro qui correspond à une ou plusieurs adresse(s)
    num_tel         // le numéro qui correspond à un ou plusieurs téléphone(s)
    
    
    NOM_PRENOM
    id_personne     // le numéro de l'enregistrement de la personne
    id_nomfamil     // le numéro du nom de famille de la table nom
    id_prenom       // le numéro du prenom de la table nom
    
    NOM
    id_nom          // numéro de l'enregistrement
    nom             // chaîne de caractères nom ou prénom
    
    TELEPHONE
    id_tel          // numéro d'enregistrement du téléphone
    telephone       // numéro à 10 chiffres
    type_de_tel     // si c'est un fixe, portable, fax
    
    PERSONNE_TELE
    id_personne_tel // id d'enregistrement de la personne
    id_tel_pers     // numéro de téléphone d'enregistrement
    Avec cette solution je pense que les doublons sont évités.
    Par exemple Jean peut être un nom ou un prénom mais je pense que mes requêtes vont être super longues.

    Pensez-vous que j'ai trop éclaté les tables ?

    A-t-on le droit de faire une table avec seulement deux colonnes ou est-ce inutile ?
    Quelle solution adopter ?
    Je bute sur ces problèmes de doublons, d'un coté je souhaite utiliser la première solution car on réduit considérablement le nombre de tables mais si la base dans le futur évolue, tiendra-t-elle la route ?

    Je vous remercie d'avance de me donner vos avis.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je dirai... ni l'un ni l'autre:
    La première méthode te bloque à un nombre fixe d'adresse et de telecom,
    La deuxième, je ne vois pas l'intérêt de "sortir" le couple nom/prenom: une personne n'en a qu'un !

    Je verrai ceci:
    Personne:
    Id
    IdCivilite
    Nom
    Prenom
    ...

    Adresse:
    Id
    Lig1 à 4
    Code Postal
    IdVille
    IdPays

    Telecom:
    IdPersonne
    IdType (téléphone, mail...)
    ValeurTelecom

    AdressePersonne:
    IdPersonne
    IdAdresse

    TelecomPersonne:
    IdPersonne
    IdTelecom

    Ainsi une personne peux avoir de 0 à n adresse, de 0 à n télécom, plusieurs personne peuvent partager la même adresse, les même télécom.

    Bien sûr ce n'est qu'une base de départ, on peux par exemple se demander s'il faut associer une ville à un pays.

    Tatayo.

  3. #3
    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
    D'accord dans l'ensemble avec le modèle proposé par Tatayo mais juste sur ça :
    Adresse:
    Id
    Lig1 à 4
    Code Postal
    IdVille
    IdPays

    on peux par exemple se demander s'il faut associer une ville à un pays.
    On ne se le demande pas ! On le fait ! Sinon tu peux avoir dans la table Adresse l'identifiant correspondant à Toulouse avec l'identifiant du pays correspondant à l'Ukraine !

    Il faut donc ceci :
    Adresse:
    IdAdr
    Lig1 à 4
    Code Postal
    IdVille

    Ville
    idVille
    IdPays
    NomVille
    ...

    Pays
    idPays
    NomPays
    ...

    Si la table de personnes n'accueillera que des habitants d'un seul pays, on peut se passer de la table Pays.
    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 !

  4. #4
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Bonjour

    la normalisation... un grand debat, quoi que

    Il y a dans developpez.com, un tas de giga-specialiste sur le sujet qui pourront te repondre.
    Il me semble avoir lu quelques papier de SQLPro (entres entres sur le sujet).

    allez je me lache pour quelques reflexions sur la mornalisation d'une base "repertoire".

    je creerais un table Nom ET une table Prenom pour eviter les redondances de noms et prenon (ainsi "Dupond" n’apparaitrait qu'une et "Jean" aussi) lie a une table "personne" avec les identifiants nom et prenom

    T_NOM
    id_Nom
    Nom

    T_Prenom
    id_Prenom
    Prenom

    t_Personne
    id_Pers
    id_Nom
    id_Prenom

    de meme pour les adresses, on peut avoir une table des nom d'adresse (afin d'eviter 15 "Victor Hugo"), une table de voies (pour inclure "Rue", "Bld", "Allee", "Impasse", ....)

    pour les associees a un table Adresse
    t_Adresse
    id_Adresse
    id_Voie
    id_Rue
    ...

    et idem pour les villes, et au lieu d'utiliser Toulouse comme exemple, pensez a Paris; avec :
    • Paris, France
    • Paris, Texas (c'est pour etre proche de CinePhil )
    Merci d'ajouter un sur les tags qui vous ont aidé

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par neufrdb Voir le message
    Par contre je me suis dit qu'il y aurait beaucoup de doublons comme par exemple il peut avoir plusieurs prénoms, identités, des adresses identiques qui appartiennent à plusieurs personnes, comme un frère et une sœur qui habitent sous le même toit.
    Lorsqu'un même texte se répète dans un champ d'une ligne à l'autre, il faut se poser la question de savoir s'il désigne vraiment la même chose ou pas.
    Or ici ce n'est pas vraiment le cas parce que si par exemple un frère et une soeur partagent la même adresse, cette communauté n'est que temporaire. Pareil pour les noms de famille à cause des mariages et des divorces.
    Du coup les mises à jour du second modèle sont assez compliquées dans tous les cas: insertion, modification, suppression. Personnnellement je trouve que c'est une sur-modélisation inutile.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Voici une trivialite

    C'est comme une problematique scientifique, le protocole doit etre en adequation avec la question posee, ni trop et surtout ni trop peu ...

    estofilo a sans doute raison, c'est trop ...

    Mais c'est bien a neufrdb a definir un cahier des charges de ces besoins (facile a dire )
    Merci d'ajouter un sur les tags qui vous ont aidé

  7. #7
    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
    Jusqu'où aller dans l'atomisation des données ?

    Quel intérêt y aurait-il à externaliser le nom ou le prénom ?
    - Pour contrôler l'orthographe ? Il peut y avoir des Lefèvre, Lefebvre, Dupond, Dupont Du Pont... Michèle ou Michelle, Karine ou Carine, Philippe (français) ou Philip (anglais)...
    - Pour faire des statistiques ? Va t-on compter combien il y a de Dupond(t) ? de C(K)arine ?
    => Pour moi, c'est sans intérêt. Ce sont des données d'identification d'une personne qui sont propres à chaque personne et peu importe qu'il y ait 2587 Dupond dans la table !

    Par contre pour la ville ?
    - Pour contrôler l'orthographe ? Il faut peut-être éviter d'avoir Saint-Étienne, Saint Etienne, St Etienne... alors que toutes ces orthographes désignent la même ville non ?
    - Pour faire des statistiques ? Comment compter combien il y a d'habitants de Saint-Étienne si cette ville est écrite avec plusieurs orthographes ?
    - Pour contrôler que la ville existe ! Ce n'est pas obligatoire mais une table de référence des villes peut-être une bonne chose pour éviter la saisie d'une ville inexistante et donc une fausse adresse.

    Voilà le genre de réflexion que j'ai quand je modélise une BDD. Cette donnée est-elle une donnée de référence utilisée par d'autres tables ? Va t-on utiliser des fonctions de regroupement sur cette donnée ?
    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 !

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Pour un modèle chiadé sur le sujet voir : http://blog.developpez.com/exercices...-de-personnes/

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

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 69
    Points
    69
    Par défaut
    merci de toute ces réponses

    l'exemple de Sqlpro est très complet, pour une personne il y a beaucoup de table .

    Avec cette base il faudra utiliser des très longues jointures ? ou on ne fait que de chercher d'abord l'id qui nous intéresse et ensuite avec cette id on recherche la donnée ?

    dites moi si je me trompe mais je crois que je ne vais pas me servir de cela.
    on va dire que mon but est de créer une base de données comme répertoire client donc savoir qui fait quoi, où il habite, comment communiquer avec lui.

    Ensuite plus tard il me servira de fichier commande et fournisseur.
    On dira que c'est une base pour un commercial



    comme le code postal est lié à la ville je les ai mis ensemble

    donc d'après vos posts :

    - ce n'est pas grave s'il y a des données qui sont dans la même colonne selon ce que l'on veut
    - les adresses mail et téléphone je peux alors les mettre ensemble cela ne sert pas a grand chose de mettre uniquement les numéros ensemble et les mail ?

    pour les histoires d’orthographe pour me faciliter la tâche pour les noms je comptais tout mettre en majuscules, et le prénom tout en minuscules.

    d'après ce que tu me dis
    => Pour moi, c'est sans intérêt. Ce sont des données d'identification d'une personne qui sont propres à chaque personne et peu importe qu'il y ait 2587 Dupond dans la table !
    j'ai donc décidé dans voie_adresse de mettre à chacune de ces lignes
    si c'est une rue , une avenue ....

    de créer sur la table personne de mettre le nom et le prénom

    lorsqu'on crée une base doit on faire attention au nombre de tables ?

    Pour moi j'ai l'impression que plus il y a de tables plus il faudra utiliser des très longues jointures donc utiliser trop de ressources du serveur.

    si l'on ne se concentre pas sur les doublons :

    quel est l’inconvénient d'utiliser trop de tables ? au niveau du SGBD et de la programmation ?
    quel est le bénéfice d'avoir plus de tables ? (plus de souplesse ?)

    quel est le bénéfice d'avoir le minimum de tables ?

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Je tiens juste à souligner ceci: selon la norme postale, une adresse est composée:
    Du nom/prénom
    De 4 lignes d'adresses: Numéro et voie, Batiment/résidence, Appartement/escalier/porte, Lieu dit/Boite Postale
    Du Code Postal
    De la Ville
    Et du Pays si besoin

    Pour les téléphones, j'aurai fait différement:
    TypeTelephone
    Id
    Nom (portable, fixe, fax, mail, pigeon voyageur)

    Et une table telecom
    IdPersonne
    IdTelecom
    Valeur (j'avoue que je manque de vocabulaire )

    Deux personnes ont le même numéro de fixe ? Pour moi ça reste deux téléphones différents. L'une des deux peut très bien déménager...

    Tatayo.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 69
    Points
    69
    Par défaut
    merci tatayou, je vais modifier et ajouter la table type_telecom.
    c'est vrai qu'il faut respecter les 4 lignes d'adresses pour imprimer sur une enveloppe

    De 4 lignes d'adresses: Numéro et voie, Batiment/résidence, Appartement/escalier/porte, Lieu dit/Boite Postale
    Pour l'adresse ? je dois aussi créer une table qui contiendrait les mots
    bâtiment,résidence,appartement,escalier,porte,lieu dit ?

    et pour mes adresse1 et adresse2 ? cela ne dérange pas ?

    pour la table civilité si à la place je mets un lettre à la place de l'id? cela m'éviterait d'avoir une table en plus ?

    que pensez-vous des tables faites ainsi sans id ? doit-on les proscrire ?
    (dans les cours que j'ai lu je n'en ai jamais renconté, ils existent peut-être dans les tableurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    fonction  commerciaux
    fonction  entrepreneur
    fonction  chef equipe
    metier     informaticien
    metier     infographiste
    metier     soudeur
    metier    professeur
    etc ....

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Citation Envoyé par neufrdb Voir le message
    Pour l'adresse ? je dois aussi crée une table qui contiendrai les mots
    bâtiment,résidence,appartement,escalier,port,lieu dit?
    Dans notre base, ce sont les champs Ligne1 à 4, tout simplement. Le nom "en clair" est juste dans les fenêtre des applications.

    Citation Envoyé par neufrdb Voir le message
    et pour mes adresse1 et adresse2 ? cela ne dérange pas ?
    Je n'avais pas fait attention. Je les remplacerais bien par une table croisée entre Personne et Adresse. Ainsi une personne peut avoir n adresses. Par exemple sur les sites de vente, on peut avoir une adresse de facturation, et plusieurs adresses de livraison.

    Citation Envoyé par neufrdb Voir le message
    pour la table civilité si à la place je met un lettre à la place de l'id? cela m'éviterai d'avoir une table en plus ?
    L'avantage de la table des civilité est de vérifier l’existence de celle-ci...

    Citation Envoyé par neufrdb Voir le message
    que pensez-vous des tables faîtes ainsi sans id? doit -t'on les proscrires?
    (dans les cours que j'ai lu je n'en ai jamais rencontrer, ils existes peut-être dans les tableurs?)
    D'après ce que j'ai lu sur ce forum, les jointures sur des numériques sont plus performantes que sur des chaines.

    Tatayo

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 69
    Points
    69
    Par défaut
    ok, ca m'éclairci beaucoup, je n'ai pas assez de recul pour le moment,
    si j'ai un table avec très peu de données comme la table civile par exemple on va se dire 10 type maximum je peux créer une table générique type qui possédera un tas de "type".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    TABLE TYPE
    
    id_type   type
    1           monsieur
    2           madame
    3           mademoiselle
    4           tel_fix
    5           tel_portable
    6           fax
    7           administrateur
    8           utilisateur
    etc ...
    cela réduirait le nombre de tables donc le nombre de jointure?

  14. #14
    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
    Citation Envoyé par neufrdb Voir le message
    Avec cette base il faudra utiliser des très longues jointures ?
    Il ne faut pas avoir peur des jointures ; c'est l'opération la plus optimisée dans les SGBDR, c'est leur boulot principal !
    ou on ne fait que de chercher d'abord l'id qui nous intéresse et ensuite avec cette id on recherche la donnée ?
    Comme dit SQLPro dans son article, on crée des vues pour accéder aux données.

    comme le code postal est lié à la ville je les ai mis ensemble
    On peut effectivement faire comme ça. Il faudra alors mettre une contrainte d'unicité sur le couple {code postal, ville}.
    Par contre, le pays devrait être externalisé et ne devrait figurer dans la table code_postal (et pas "codes postales" ! ) qu'une clé étrangère référençant l'identifiant du pays.

    - ce n'est pas grave s'il y a des données qui sont dans la même colonne selon ce que l'on veut
    Ça dépend lesquelles !
    Les noms et prénoms peuvent être multiples mais les villes et les pays sont des données de référence dont l'orthographe doit être exacte. Le mieux est alors de les mettre dans des tables de référence.

    - les adresses mail et téléphone je peux alors les mettre ensemble cela ne sert pas a grand chose de mettre uniquement les numéros ensemble et les mail ?
    Je ne comprends pas ta question.
    pour les histoires d’orthographe pour me faciliter la tâche pour les noms je comptais tout mettre en majuscules, et le prénom tout en minuscules.
    Tout mettre en majuscules ou en minuscules ne t'empêchera pas de faire des fautes !

    j'ai donc décidé dans voie_adresse de mettre à chacune de ces lignes
    si c'est une rue , une avenue ....
    Tu te compliques un peu la vie mais pourquoi pas !
    Comme l'a dit Tatayo, la norme d'adresse postale comporte 4 lignes pour l'adresse. Tu peux donc prévoir 4 colonnes adresse_ligne1, adresse_ligne2...
    Voir cet autre article de SQLPro sur les données et les normes.

    de créer sur la table personne de mettre le nom et le prénom
    Oui
    lorsqu'on crée une base doit on faire attention au nombre de tables ?
    1) Ne pas tout mettre dans une seule table
    Sinon autant utiliser un tableur plutôt qu'un SGBD !

    2) Ne pas créer plusieurs tables pour les mêmes types de données.
    C'est à dire ne pas créer une table par année par exemple, sauf à des fins d'archivage des données.

    3) Ne pas hésiter à créer autant de tables que nécessaire.
    Atomiser les données en externalisant ce qui est répétitif et constitue des données de références : types, catégories, fonctions, villes, pays, départements, services, régions, caractéristiques multivaluées...

    Pour moi j'ai l'impression que plus il y a de tables plus il faudra utiliser des très longues jointures donc utiliser trop de ressources du serveur.
    Encore une fois : ne pas avoir peur des jointures !

    quel est l’inconvénient d'utiliser trop de tables ? au niveau du SGBD et de la programmation ?
    S'il y a plus de tables que nécessaire, ça peut charger inutilement les ressources nécessaires au SGBD.
    quel est le bénéfice d'avoir plus de tables ? (plus de souplesse ?)
    Pas "plus" de tables mais le nombre nécessaire !

    quel est le bénéfice d'avoir le minimum de tables ?
    Si tu regroupes trop d'informations dans des tables alors que certaines auraient pu être externalisées dans d'autres tables, ta base de données n'est pas normalisée et tu risques :
    - des données incohérentes ;
    - des résultats de requêtes faux ou incomplets ;
    - des tables surchargées en octets (une clé étrangère entière prend 4 octets alors que, par exemple, "Saint-Étienne" en prend 14), entraînant une moindre performance des requêtes.

    Pour l'adresse ? je dois aussi crée une table qui contiendrai les mots
    bâtiment,résidence,appartement,escalier,port,lieu dit?
    Comme dit plus haut, tu te compliques un peu la vie. Pense que les adresses étrangères ne sont pas forcément formatées de la même manière qu'en France, que les noms de voies ne sont pas les mêmes (street, lane, road, strasse...).

    et pour mes adresse1 et adresse2 ? cela ne dérange pas ?
    Comme l'a dit Tatayo, il te faut une table associative entre les adresses et les personnes.

    pour la table civilité si à la place je met un lettre à la place de l'id? cela m'éviterai d'avoir une table en plus ?
    Sauf qu'une lettre est insuffisante ! M. Mme, Mle en France, éventuellement Me (Maître), Dr (Docteur), Pr. (Professeur)...
    La table de référence te permet en plus de mettre l'abréviation exacte et le libellé complet (Monsieur, Madame, Mademoiselle...).

    que pensez-vous des tables faîtes ainsi sans id? doit -t'on les proscrires?
    Oui, sauf pour les tables associatives dont la clé primaire est composée des identifiants des tables entrant en jeu dans l'association.
    Et un identifiant est un entier.

    ok, ca m'éclairci beaucoup, je n'ai pas assez de recul pour le moment,
    si j'ai un table avec très peu de donnée comme la table civile par exemple on va se dire 10 type maximum je peu crée une table générique type qui possedera un tas de "type".
    Non !
    Les civilités et les types de bâtiment, de voie ou d'autres machins sont des choses différentes !
    Si tu associes ta table des types avec la table des personnes, tu autorises Jean Dupond à être nom pas "Monsieur Jean Dupond" mais "Immeuble Jean Dupond" !
    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 !

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 69
    Points
    69
    Par défaut
    cinephile je te remerci beaucoup d'avoir répondu a mes questions
    comme je suis autodidacte en base de donnée php + java je peu avor tort de ce que j'ai concu.

    j'ai demandé a une personne qui travaillait avec le logiciel sage (cela s'appele un crm je crois)

    montrer mon schema de donnée il me disait que c'était trop éclater. je vais donc essayer de faire le plus de tableau de relation avec des cles étrangère.

    voici ce que j'avais réaliser avant de poster ici , cela m'a mis une semaine a essayer de décortiquer cela, mais il y a beaucoup de table inutiles



    maintenant je vais me concentrer uniquement sur les tables que tu m'a proposé, je verrais après le reste, je laisse de côté ce schema.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    - les adresses mail et téléphone je peux alors les mettre ensemble cela ne sert pas a grand chose de mettre uniquement les numéros ensemble et les mail ?
    en faîte je me suis mal exprimer,
    si l'on mélange adresse mail et téléphone je serais oblité de mettre
    un vachar de 35 lettre par exemple, tandis que si je met juste un numéro cela sera en int .
    pour 10 donnée dont 5 sont des mail et 5 sont des numéros,
    5 int + 5 vachar(35 caractère) sont t'elle plus obtimiser que 10 varchar(35 caractère).

    je ne sais pas si je m'exprimer bien avec cette exemple.

  16. #16
    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
    Citation Envoyé par neufrdb Voir le message
    si l'on mélange adresse mail et téléphone je serais oblité de mettre un vachar de 35 lettre par exemple, tandis que si je met juste un numéro cela sera en int .pour 10 donnée dont 5 sont des mail et 5 sont des numéros, 5 int + 5 vachar(35 caractère) sont t'elle plus obtimiser que 10 varchar(35 caractère).

    je ne sais pas si je m'exprimer bien avec cette exemple.
    Euh... je ne comprends pas grand chose à ce que tu dis là !

    Ce qui est sûr c'est qu'une adrel et un numéro de téléphone sont deux choses différentes et qu'elles ne doivent pas figurer dans la même colonne.
    Aussi, un numéro de téléphone n'est pas un entier, c'est une chaîne de caractères qui a en France le format suivant : 00 00 00 00 00.
    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 !

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 69
    Points
    69
    Par défaut
    je me suis planté sur le champ lexical adresse, c'est de mettre dans le même panier adresse mail et telephone filaire ou portable ou fax

    adresse mail
    telephone fix
    telephone portable
    telephone fax

    mais pas adresse habitation bien entendu

    je vais donc essayer le plus possible de détacher des éléments qui ne sont pas de même nature.

  18. #18
    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
    Je ne comprends toujours pas de quoi tu parles !

    Encore une fois, adrel et téléphone sont deux choses différentes !
    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 !

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 146
    Points : 69
    Points
    69
    Par défaut
    Encore une fois, adrel et téléphone sont deux choses différentes !
    donc je déduis que adresse mail et adresse habitation sont deux choses différentes donc je dois les mettre dans 2 tables différentes.

    je pense qu'avec tous vos conseils je vais pouvoir créer une base de donnée
    à peu près potable

    je distinguerai la table:

    personne (id_personne,nom, prenom, id_civilte,id_ville,id_pays)

    civilité (id_civilite,type_civilte)

    adresse avec les 4 lignes ( Batiment/résidence, Appartement/escalier/porte, Lieu dit/Boite Postale)

    personne_adresse qui relie personne et adresse (id_personne,id_adresse)

    telephone(id_telephone,numero,type_téléphone)

    personne_telephone qui relie personne et téléphone

    courriel (id_courriel,courriel)

    personne_courriel qui relient personne et courriel (id_personne,id_courriel)

    cp_ville
    (id_ville(unicite),code_postal,ville) // 2 villes peuvent avoir le même code postal d’où unicité comme tu m'expliquais

    pays (id_pays,pays)

  20. #20
    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
    Citation Envoyé par neufrdb Voir le message
    donc je déduit que adresse mail et adresse habitation sont deux choses différentes donc je dois les mettre dans 2 tables différents.
    Oui.

    personne (id_personne,nom, prenom, id_civilte,id_ville,id_pays)
    Une ville est située dans un seul pays donc tu as le MCD suivant :
    Personne -1,1----Habiter----0,n- Ville -1,1----Situer----0,n- Pays
    La clé étrangère référençant le pays est dans la table Ville mais pas dans la table Personne.
    Mais comme tu as une table pour les adresses des personnes, tu as plutôt ce MCD :
    Personne 0,n----Avoir----1,n- Adresse -1,1----Situer----0,n- Ville -1,1----Situer----0,n- Pays
    Et donc la ville est référencée dans la table Adresse et non pas dans la table Personne.

    civilité (id_civilite,type_civilte)
    Pourquoi "type" civilité ? Libelle_civilite conviendrait mieux.

    adresse avec les 4 lignes ( Batiment/résidence, Appartement/escalier/porte, Lieu dit/Boite Postale)
    Pourquoi pas mais attention au nommage de tes colonnes : pas de / !

    personne_adresse qui relie personne et adresse (id_personne,id_adresse)
    OK

    telephone(id_telephone,numero,type_téléphone)
    Il te faut aussi une table des types de téléphone et une clé étrangère référençant ce type dans la table téléphone, à la place de la colonne type_telephone.
    type_telephone(id_type_telephone, libelle_type_telephone)
    telephone(id_telephone, numero, id_type_téléphone)

    personne_telephone qui relie personne et téléphone
    OK

    courriel (id_courriel,courriel)

    personne_courriel qui relient personnne et courriel (id_personne,id_courriel)
    OK
    cp_ville (id_ville(unicite),code_postal,ville) // 2 ville peut avoir le même code postal d'ou unicité comme tu me expliquer
    Un code postal peut couvrir plusieurs villes et une ville peut être couverte par plusieurs codes postaux !
    Code_postal -1,n----Couvrir----1,n- Ville

    Si tu veux faire une table de référence des codes postaux, tu dois avoir ceci :
    Ville (id_ville, id_pays, nom_ville)
    Code_postal (id_code_postal, libelle_code_postal)
    Ville_Code_postal (id_ville, id_code_postal)

    Personnellement, je me contente de l'id_ville et je laisse le code postal en tant que colonne dans la table des adresses. Je n'ai pas de table de référence des codes postaux.

    pays
    (id_pays,pays)
    OK
    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 !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 13
    Dernier message: 15/11/2007, 19h48
  2. [C# 2.0] Comment créer une table sur un serveur SQL 2000 ?
    Par Filippo dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/09/2006, 13h30
  3. [VBA-A]Comment créer une table à partir d'un recordset ?
    Par NoViceDel dans le forum VBA Access
    Réponses: 22
    Dernier message: 23/05/2006, 16h10
  4. [VB.NET] Comment créer une table dans base de données ?
    Par ptitesouris dans le forum VB.NET
    Réponses: 3
    Dernier message: 03/05/2006, 08h46
  5. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21

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