-
création d'une table
Salut
Je veut créer un table qui contient les champs suivant: nom, prénom et liste d'amis , pour le nom ,le prénom pas de problème mais pour le champ liste d'amis puisque il y a plusieurs amis ça doit être un table aussi est ce qui y est ce que je peut créer ce champ si oui comment?
merci
-
Comme vous l'avez deviné, il est très fortement recommandé de ne pas enregistrer la liste d'amis dans une colonne de la table des personnes.
Vous prendrez bien une Merise ?
Tout d'abord, posez-vous la question :
" Les amis sont-ils aussi des personnes de la table que j'ai décrite dans mon message ?"
1) Si la réponse est oui, nous avons la règle de gestion suivante :
Une personne peut ou pas avoir une à plusieurs personnes amies et
une personne peut ou pas être l'amie de une à plusieurs personnes.
Les schéma MCD qui découle de cette règle de gestion est le suivant :
Personne -0,n----être ami----0,n- Personne
On voit que c'est la même entité Personne qui est impliquée des deux côtés de l'association. Cette association est de type (0,n) - (0,n) donc il faudra une table associative. Ca nous donne les tables :
Personnes(P_Id, P_Nom, P_Prenom...)
Amis(A_IdPersonne1, A_IdPersonne2, ...)
Les clés primaires sont soulignées et les clés étrangères sont en italique.
2) Si la réponse est non, par exemple si votre première table est celle des adhérents et que ceux-ci enregistre la liste de leurs amis qui sont extérieurs au système, la règle de gestion est cette fois :
a) Un adhérent peut avoir ou pas un à plusieurs amis et
un ami est l'ami d'une à plusieurs personnes.
ou b) Un adhérent peut avoir ou pas un à plusieurs amis et
un ami est l'ami d'une et une seule personne.
De la règle 2a) découle le schéma suivant :
Personne -0,n----Avoir----1,n- Ami
Ce qui donne les tables :
Personnes(P_Id, P_Nom, P_Prenom...)
Amis(A_Id, A_Nom, A_Prenom...)
Amitie(AP_IdPersonne, AP_IdAmi, ...)
De la règle 2b) découle le schéma suivant :
Personne -0,n----Avoir----1,1- Ami
Ce qui donne les tables :
Personnes(P_Id, P_Nom, P_Prenom...)
Amis(A_Id, A_IdPersonne, A_Nom, A_Prenom...)
Si la réponse à la question est non, il y a encore une autre solution : l'héritage.
On voit en 2a et 2b que les tables Personnes et Amis ont des colonnes communes. Il est donc souhaitable de mettre les colonnes communes dans une table Personnes et de mettres les colonnes spécifiques aux adhérents et aux amis dans des tables qui héritent de la table Personnes.
On a par exemple le schéma suivant :
Adhérent - 1,1----Etre----0,n- Personne
Ami -1,1----Etre----0,n- Personne
Adhérent -0,n----Avoir----1,n- Ami <-- dans le cas d'amis strictement externes ou bien
Adhérent -0,n----Avoir pour ami----0,n- Personne <-- dans le cas où les adhérents peuvent aussi être des amis d'autres adhérents
Ce qui donnerait au final par exemple les tables :
Personnes(P_Id, P_Nom, P_Prenom...)
Adherents(Ad_IdPersonne, A_NumAdherent, ...)
Amis(Am_IdPersonne, ...)
Amitie(AP_IdAderent, AP_IdPersonne, ...)