|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 146 ![]() |
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 ... 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 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. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
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. |
|
|
00
|
|
|
#3 | |
![]() ![]() |
D'accord dans l'ensemble avec le modèle proposé par Tatayo mais juste sur ça :
Citation:
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
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 :
|
|
|
00
|
|
|
#5 | |
![]() ![]() Inscription : octobre 2008 Messages : 1 505 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
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 |
|
|
00
|
|
|
#7 |
![]() ![]() |
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#8 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#9 | |
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 146 ![]() |
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 Citation:
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 ? |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
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. |
|
|
00
|
|
|
#11 | |||
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 146 ![]() |
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 Citation:
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 :
|
|||
|
|
00
|
|
|
#12 | |||
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 081 ![]() |
Citation:
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:
Citation:
Tatayo |
|||
|
|
10
|
|
|
#13 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 146 ![]() |
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 :
|
||
|
|
00
|
|
|
#14 | |||||||||||||||||
![]() ![]() |
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 !
Citation:
Citation:
Par contre, le pays devrait être externalisé et ne devrait figurer dans la table code_postal (et pas "codes postales" ! Citation:
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. Citation:
Citation:
Citation:
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. Citation:
Citation:
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... Citation:
Citation:
Citation:
Citation:
- 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. Citation:
Citation:
Citation:
La table de référence te permet en plus de mettre l'abréviation exacte et le libellé complet (Monsieur, Madame, Mademoiselle...). Citation:
Et un identifiant est un entier. Citation:
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||||||||||||||
|
10
|
|
|
#15 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 146 ![]() |
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 :
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. |
||
|
|
00
|
|
|
#16 | |
![]() ![]() |
Citation:
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#17 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 146 ![]() |
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. |
|
|
00
|
|
|
#18 |
![]() ![]() |
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 de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
00
|
|
|
#19 | |
|
Nouveau Membre du Club
![]() Inscription : novembre 2010 Messages : 146 ![]() |
Citation:
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) |
|
|
|
00
|
|
|
#20 | |||||||||||
![]() ![]() |
Citation:
Citation:
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. Citation:
Citation:
Citation:
Citation:
type_telephone(id_type_telephone, libelle_type_telephone) telephone(id_telephone, numero, id_type_téléphone) Citation:
Citation:
Citation:
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. Citation:
Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||||||||||
|
20
|
Copyright © 2000-2012 - www.developpez.com