Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/05/2011, 18h22   #1
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 146
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 146
Points : 32
Points : 32
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.
neufrdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 08h12   #2
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
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.
tatayo est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 09h25   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 000
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 000
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
D'accord dans l'ensemble avec le modèle proposé par Tatayo mais juste sur ça :
Citation:
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 10h39   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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 )
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h02   #5
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
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.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 12h18   #6
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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 )
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 13h18   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 000
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 000
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 13h55   #8
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
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
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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 18h19   #9
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 146
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 146
Points : 32
Points : 32
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:
=> 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 ?
neufrdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 19h35   #10
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
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.
tatayo est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2011, 21h15   #11
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 146
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 146
Points : 32
Points : 32
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:
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 :
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 ....
neufrdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 08h05   #12
Membre Expert
 
Homme
Responsable de service informatique
Inscription : janvier 2009
Messages : 1 081
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 38
Localisation : France

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Boutique - Magasin

Informations forums :
Inscription : janvier 2009
Messages : 1 081
Points : 1 875
Points : 1 875
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
tatayo est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 09h05   #13
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 146
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 146
Points : 32
Points : 32
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 :
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?
neufrdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 09h14   #14
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 000
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 000
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
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 !
Citation:
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.

Citation:
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.

Citation:
- 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.

Citation:
- 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.
Citation:
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 !

Citation:
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.

Citation:
de créer sur la table personne de mettre le nom et le prénom
Oui
Citation:
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...

Citation:
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 !

Citation:
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.
Citation:
quel est le bénéfice d'avoir plus de tables ? (plus de souplesse ?)
Pas "plus" de tables mais le nombre nécessaire !

Citation:
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.

Citation:
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...).

Citation:
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.

Citation:
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...).

Citation:
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.

Citation:
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2011, 15h39   #15
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 146
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 146
Points : 32
Points : 32
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 :
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.
neufrdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h44   #16
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 000
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 000
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
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 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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h47   #17
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 146
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 146
Points : 32
Points : 32
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.
neufrdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 16h02   #18
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 000
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 000
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 16h34   #19
Nouveau Membre du Club
 
Inscription : novembre 2010
Messages : 146
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 146
Points : 32
Points : 32
Citation:
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)
neufrdb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 16h51   #20
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 000
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 000
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
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.

Citation:
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.

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

Citation:
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 / !

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

Citation:
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)

Citation:
personne_telephone qui relie personne et téléphone
OK

Citation:
courriel (id_courriel,courriel)

personne_courriel qui relient personnne et courriel (id_personne,id_courriel)
OK
Citation:
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.

Citation:
pays
Citation:
(id_pays,pays)
OK
__________________
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 !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h23.


 
 
 
 
Partenaires

Hébergement Web