Bonjour
Ca fait longue temps que je ne vous ai pas écrit, alors me revoilà. En fait je fais appel a votre aide puis que je me troue devant un problème qui est peut être d’ordre logique, et pas facile a résoudre d’âpres moi.
Voila, pour un projet de taille je dois constituer un fichier de cette ordre :
Fichier :
Homme - Femme
Mariage entre eux
Des enfants qui descendent des différentes couples
Apres mariage entre les enfants (plus tard)
(Ca ressemble un peu a un programme généalogique, mais pour plusieurs familles)
Il faut aussi prendre en considération qu’une femme peut avoir plusieurs maris pendent sa vie, ainsi l’homme peut avoir plusieurs femmes. En court de remariages.
Donc les enfants ne descendent pas toujours du même couple.
Dans le requêtes je dois pouvoir afficher l’homme ; femme ; les couples et leurs enfants respectifs, et aussi les ascendants des enfants.
Maintenant je vais vous donner un exemple qui n’est pas une bonne solution et pas complète non plus
Prenons ms access
Je crée une table Homme
« « « « Femme
« « « « Enfant (evntl table garçon et table fille mais pas forcement)
Maintenant je dois créer de relation entre les différents fichiers par lignes de code et pas dans les options homme peut dépendre de femme ou vice versa. Puis que comme indique plus haut chacun peut avoir plus qu’un partenaire.
Suite il y’a des enfants qui vont se marier et avoir des enfants. Ca m’obligera de le copier dans les parents, je n’aurai plus accès facilement a leurs ascendants qui se trouvent maintenant dans le même fichier (Homme-Femme)
Voila, ici la base de données commence à perdre de sa efficacité
Bien sur je ne pense pas qu’un programme comme access sera bon pour un exercice pareil, mais si vous pensez à des solutions faites le moi savoir.
Merci d’avance
Dbobby
Encore une precision. je pense de mettre le proget sur le reseau open source puis que c'est un projet de taille assez grand. Ca serai la premiere fois que je fait ca . En verra ce que ca donne. Mais avant j'aurai d'autres questions.
En tout cas avant de le mettre il faudrai deja que je trouve une solution pour cette question plus haut
Et je vous tiendrai au courant de developpement
Hum...
Je n'aurais pas pris le problème comme toi.
Pour moi, hommes, femmes et enfants sont des personnes. Donc j'aurais fait un table "Personne" avec un id unique pour chacune et en plus nom, prénom, etc... et aussi le sexe comme colonne. Par ailleurs, chacun n'ayant qu'un père et une mère - enfin je crois - deux colonnes ( "pere" et "mere" ) contenant les ids des géniteurs (pour ceux dont les parents ne sont pas répertoriés, on mettra 0 comme id des parents).
Ensuite, certaines de ces personnes ont des relations de mariage. Donc une nouvelle table avec l'id du mari, l'id de la femme, la date du mariage et celle du divorce, par exemple.
oui,merci deja pour cette reponse.
Mais comprennez que c'est pas une solution ideale , puis que ca peut creer une double- voir triplle emploi des memes personnes dans des differntes fichiers, et je pense que ca peut creer un veritable "spaghetti fichiers"
deja je voudrai bien eviter de copier les enfants dans le fichier des adultes maries, puis que ca ferai un double emploi, et on risque de ne pas pouvoir bien exploter les differentes donnees
UN VRAI CASSE TETE
encore merci
Non je ne vois pas de double emploi. Je suis de l'avis de jrebillat. Il n'y qu'une seule entrée dans la table personnes, par "humain", qu'il soit père, père ou enfant.
Le champ indiquant la situation familiale ne pouvant pas avoir plusieurs valeurs en même temps, ce champ peut être intégré à la table personnes.
Si un couple a un enfant, alors le champ père et mère contiendra l'id de l'enfant, mais le père et la mère lui n'aura pas à être modifié, puisque tu peux savoir si l'homme ou la femme a un enfant en regardant si l'id est présent dans le champ père ou mère de l'une des personne.
C'est en tout cas la manière la plus efficace selon moi de constituer la base. La seule info externe à cette table personnes sera effectivemment la relation existant entre un homme et une femme.
Pour les frères et soeurs, tu pourra les déduires, pas besoin de préciser dans la base qui est frère de l'autre. Tu pourra même voir si ils sont demi-frères en regardant si les id du père et de la mère sont les même ou si l'un des deux diffères.
En quoi tu vois que cela ferait un "spaghetti fichiers"
Les enfants n'ont pas à être copiés d'une table à l'autre, tu n'as pas besoin de faire un table enfants et une table parents, ca n'a pas de sens.
Toutes les personnes doivent se trouver dans la même table.
La difficulté, ce que dbobby appelle un casse-tête :lol:, c'est qu'il s'agit d'avoir une base de données arborescentes ce qui est effectivement très difficile.
Ce qui n'est pas clair dans la question, c'est comment traiter les données. Tout SQL ? Partie SQL partie code ? (en quel langage au fait ?) Dbobby parle de fichiers et en même temps d'Access ce que je trouve curieux.
Pour ce qui est de savoir si Access convient. Si on fait du tout SQL c'est non. Dans ce cas il faut éviter les jouets et prendre un SGDBR qui supporte les procédures stockées récursives. Les procédures en question travaillant sur des tables en auto-jointures
Si on fait du tout SQL, il faut savoir qu'au délà d'une profondeur de 5 le coût en terme de performances devient prohibitif avec des données organisées "id de parent dans l'enregistrement de l'enfant, etc". Si le volume de données et la profondeur sont importants, il faut gérer ce qu'on appelle une arborescence à représentation intervallaire. Avec ça les requêtes restent rapides, mais il y d'autre inconvénients, comme par exemple poser une limiter arbitraire au nombre de descendants d'une personne.
Ce qui n'est pas clair non plus est comment seront parcourues les données, toujours dans le même sens ? Dans la question j'ai cru comprendre que non
Si c'est toujours dans le même sens, en remontant vers les ascendants, alors la suggestion de jrebillat fonctionne.
Si c'est dans les deux sens il y a problème car alors on a des graphes dont les noeuds ont plusieurs parents, ce qui n'a rien de pratique pour un parcours du graphe dans le sens descendant :lol:
Non seulement ça n'a pas de sens, mais une redondance de données est toujours à proscrire comme le veut le bon sens. C'est même pour cette raison que l'on a inventée la clé étrangère ;) :D
Maintenant ce qui est peut être à proscrire c'est le concept de table pour faire cela. Du moins pour traiter les données sinon les stocker. Ce que je veux dire c'est que dans le cas des données arborencentes comme ça, (si grande profondeur et gros volume, je le répète) le SGDBR ne suffit pas à lui seul, il faut écrire du code autour...
Pour le reste, je te rejoins. Sauf que je ne me posais même pas la question. pour moi une base de données, c'est fait pour être interrogé par du code... Je n'envisageais pas du tout du "tout-SQL" surtout avec Access !
Idem pour moi, cela me paraissait tellement évident que je ne l'ai pas précisé non plus :D
C'est que là ce n'est pas si évident. Bon bien sûr, le gag Access on oublie.
Mais une base de données c'est fait pour être interrogé non par du code quelconque mais par du code SQL. Ca fait une grosse différence. C'est pour cela que dans ces situations, on utilise des procédures stockées récursives. Parce que une seule requête traite tout le problème.
Sinon, la récursivité étant inévitable puisqu'on a des données arborescentes, qui va l'effectuer ? Un langage X en faisant des appels récursifs avec dans chaque appel une requête SQL simple ?
Le problème est que si l'arborescence est un peu grande, ce qui est probable dans notre cas (les éventuelles familles nombreuses) le nombre de requêtes à formuler va exploser exponentiellement.
Dans le cas de clients lourds (ou riches comme on dit maintenant), le traffic réseau va être surchargé et le SGDBR aussi car il devra compiler les requêtes au passage à chaque appel. Dans le cas d'un client léger (navigateur) ce sera alors (par exemple) du code Php qui va mouliner et augmenter la charge du serveur avec éventuellement un débordement de pile ou un épuisement mémoire à la clef. (et le SGDBR reste tout autant sollicité d'ailleurs). Ca va être difficile de tenir la charge (oui je sais encore mon buzz sur la charge, mais quand on fait de l'informatique c'est une chose à laquelle il est bon penser ;) ) Tandis qu'avec une procédure stockée, on peut raisonnablement croire que les traitements seront optimisés et on s'affanchit de la compilation de la requête.
Bon maintenant sans doute il serait judicieux de repenser tout le problème, et d'utiliser des outils adaptés à un problème qui n'est pas du tout anodin, des outils capables de travailler sur les graphes de façon naturelle. Evidemment je pense à des outils "à esprit tordu". Alors là je me contente seulement d'évoquer ;)
whoao, je n'aurai jamais pensé que je vais creer une telle polemique.
Merci pour toutes vos reponses.
je vais devoir prendre un peu de temps pour etudier les reponses.
Ce qui concerne access , c'etait juste un example , puis que access je connais assez bien comme sbgdr.Bien entendu , je ne pense pas qu'accessl est ideal pour ce projet.
Si je me trompe pas , il faudrai regarder comment un programme de genealogie est fait, et le reecrire pour des multifamilles.
vous avez dans la base
Homme1 homme2
femme1 femme2
hoome1 se mairie avec femme1
pareil pour homme2 et femme2
Ils ont des enfants
les enfants se marient etc, etc
Est ce que c'est la programmation des arbres binaires qu'il faut utiliser pour un tel projet ??
Non pas de polémique 8) Ce n'est qu'un échange d'idée, c'est comme ca qu'on pense un projet de toute façon. Il y a toujours plusieurs façon de faire, mais certaines sont meilleurs que d'autres.
1) D'abord faudrait être sûr qu'il est bien fait.
Il s'agit bien d'arbres. Mais pas binaires. Dans un arbre binaire, chaque noeud a au plus deux noeuds fils, d'où le nom de BInaire. Comme si chaque couple avait au plus deux enfants par exemple. Dans ton cas, tu ne sais pas ce qu'est l'arbre. Et si tu traites des familles nombreuses il va être bien loin d'être binaire. C'est là qu'employer un langage capable de travailler naturellement avec les arbres serait bienvenu. Et le choix du langage aura certainement un impact sur la meilleure façon de stocker les données. Faudrait aussi savoir si les quantités de données sont importantes. Selon que tout peut tenir en mémoire (quelques familles seulement sur quelques générations) ou que le travail avec des données sur disques (un très grand nombre de familles sur des centaines de génération) est incontournable. Selon la situation la façon de solutionner le problème ne sera pas la même.2) s'il est bien fait pour une famille, alors il est bien fait pour plusieurs familles. Il suffit de l'invoquer plusieurs fois. Une fois par famille :)
D'accord .,j'ai compris. Un tres grand merci a vous tous.
Encore une chose. Quel sont les languages moderne le plus apte, pour le traitement des arbres (pas binaire !) ?
Ca dépend du volume de données à traiter, et de ce que tu veux en faire, ce que je n'arrive pas à te faire dire.
Entre une petite appli personnelle qui montre l'arbre généalogique de ta famille, de ta belle famille et de ta petite amie seulement et sur 5 générations seulement et un site de généalogie très sollicité et montrant des miliers d'arbres sur une centaines de générations la donne n'est pas la même. Donc on ne choisira pas nécessairement le(s) même(s) outil(s)
Les langages (très) adaptés aux arbres sont les langages fonctionnels. Mais j'ose à peine le murmurer, j'entends déjà les sarcasmes des obscurantistes... :lol:
Sinon tout langage qui supporte la récursivité fera l'affaire, plus ou (beaucoup) moins bien selon les besoins à satisfaire.
ah c'est ca vous voulez savoir. je ne pensai pas que c'etait tellement important.
C'est pour des associations en france, qui peuvent avoir plusieurs centaines voir milliers de membres. C'est ne vraiment pas defini.
voila, merci
dbobby
Fred sinon on peut le faire en Java non ? Ok, je sors 8)
P.S: au fait, je ne suis pas sérieux, au cas ou quelqu'un prenne cette idée au sérieux, c'est du 8eme degré.
DEHORS :!: :!: :!: :!: :twisted: :twisted: :twisted: :twisted:
Ah tiens ? Moi j'ai pris ça au premier degré :lol:
Je ne sais pas si tu vas adopter la suggestion ou même t'en inspirer, mais ce que j'aimerais bien c'est que tout un chacun s'abstienne de puérilités du genre "on ne peut pas coder en Lisp à cause des parenthèses" :lol:
En ce qui me concerne ça mettrait un terme à cette discussion :twisted: :D
LISP???.Oui, pour quoi pas. Je ne connais pas de tout la programmation de cette language. Et pour quoi pas prolog. Je possede en fait Turbo Prolog que j'ai achete il y a une vingtaine des annees.
Alors je vais apprendre lisp, donnez moi quel que mois ou plus. Appres je met ce projet en open source, comme indique plus haut, et la ce qui est bien mon cher Fred je vais vous inviter a partitiper au projet . Lol et double LOL :wink: :wink: :wink:
je suis allé voir des sujets sur lisp, et je suis tombé sur des veilles pages, non mis a jour depuis plusieurs annees,
En tout cas apparament lisp ne fait pas partie des languages le plus facile a apprendre.
Alors je voudrai recitifier ce que j'ai dit dans mon dernier post. Donnez moi plutot qq annees au lieu de qq mois pour apprendre cette language
:(
Merci et a bientot
Dbobby
No comment... :roll:
Et bien sûr c'est toi qui aidera dbobby n'est-ce pas ? ;)
Bonjour,
Je tient a vous dire que vous m'avait tous aidé. Meme si je ne adopte peut etre pas tous vos sugestions, mais au moins ca me (nous) permet de voir un peu plus large.
Je vous remerci d'avoir pris du temp de repondre, sur tout puis que en regle general c'est du benevole.
encore , si ca devait etre lisp, quel lisp faudrai prendre ? Je suis tombé sur de trucs genre Dr Sheme . c'est cela ??
merci d'avance et merci pour TOUTES VOS reponses
Dbobby
PS .plus tard je vous tindrai au courrant ce qu'il est devenu ce projet :wink:
Tu te rends compte que là tu penses objet à la façon étriquée de Java et que tu établis une relation "EST-UN" totalement hors de propos avec le problème à résoudre et en désaccord avec l'algèbre relationnel de CODD qui régit SQL ? Bref sans t'en rendre compte tu penses objet alors qu'il est question de définir le schéma de donénes adapté au problème. L'influence pernicieuse de Java.... Si ça ce n'est pas un carcan qui bride ...
OK, J'ai compris
a bientot
@dbobby
Si tu veux te faire la main avec Lisp, le mieux est probablement de télécharger un IDE professionnel en version personnelle ou Free Express.
Tu as le choix entre:
Lispworks http://www.lispworks.com/
Allegro http://www.franz.com/
Là dedans tu trouveras sûrement des didactiels pour aborder Lisp ;)
Merci Fred. C'est vraiment gentil. En fait je suis deja tombé sur le site de franz, mais rien m'a indique que allegro etait du lisp.
C'est quand meme curieux que je n'ai rien trouve en francais, sur tout sur le site de developpez.com. Apparament c'est pas trop connu en france.
Pour moi c'est pas grave, puis que l'allemnad et l'anglais ne me pose pas de problemes, mais pour d'autres , c'est quand meme dommage.
Le probleme qui se pose maintenant, c'est que le projet devait avancer vite, et si on doit attendre que j'apprend une nouvelle language et des outils qui l'entourent.....
Bon on verra bien. Evtnlm. un solution rapide et appres migrer vers lisp, ou un truc comme ca.
Oui, Oui je sais c'est pas comme ca qu'on travail mais bon, que voulez vous que je vous dit
A bientot et biensur avec tout mes remerciments
Dbobby
Pour information:
Ceux qui seraient intéressés de savoir si Lisp sert à quelque chose de nos jours peuvent lire ce court article:
http://www.algo.be/cl/documents/LispLives.pdf
Ouiiii, moi :wink:
Maintenant , rappelez vous que la question initial portai plutot sur la structure des fichiers , que sur le logciel qui devait exploiter la bdd.
Je pense que j'ai trouvé une solution acceptable.
Pour l'instant elle est sur papier, il reste a tester.
Bien entendu je vous tiendrai au courrant de progress , puisque c'etait avec votre aide
A bientot
Dbobby
Bonjour,
La base de données que j’ai crée ressemble beaucoup a l’exemple de jrebillat, mais pour des différentes raisons j’ai ne le pas fait exactement comme ca.
Alors une base qui consiste toutes les personnes présentes avec leurs renseignements fixes, des données qui normalement ne change pas pendent toute une vie (Nom ou Nom jeune fille, prénom, date et lieu de naissance). J’appelle cette base ‘Pilote’
Une base pour père, une pour mère et une pour enfants.
Dans la base ‘pilote’ y’a un ID vers homme ou femme et un ID vers enfants
Une relation infinie crée, entre homme et femme ainsi une femme peut avoir plusieurs maris, ou un homme plusieurs femmes. C’est justement la j’aurai vu la difficulté si j’aurai copié toutes les personnes dans une seule Base, puis que je ne sais pas d’avance combien des ID’s je devais créer.
Maintenant je crée une relation infinie entre femme homme vers enfants (Les frères et sœurs ont toujours la même mère mais pas forcement le même père.
Voila ce ci est une solution, peut être pas la meilleure, mais d’âpres moi elle fonctionne.
Faites vos critiques
Merci
Dbobby
Bonjour Fred
Je suis tres content que vous nous avez pas abandonne :) :) :wink:
Vous avez tres bien compris, j'ai appelé table par base. Peut etre j'ai juste employe un mauvais terme ,mais c'est ainsi je l'appel. je m'excuse.
Par infini j'ai voulu dire une relation une a plusieurs . Dans ms acces ( je ne l'ai toujours pas jette) cette relation est indique par une 8 horizontale.
Y'a des reletion 'une a une' si non une a plusieurs , et ce cela qui m'interesse. Voila
a bientot
Dbobby
Bonjour
Je voudrai souligner une chose que j'essaye d'éxpliquer depuis le debut de cette discussion.
D'appres moi on apprend pas mal des choses en repondant des questions. C'est un peu ce qu'on dit sur un prof et son eleve. " L'eleve apprend mais le prof aussi" . C'est peut etre de benevolat , mais ce n'est pas pour rien.
Si je me trompe pas , vous etes en outre journaliste , Fred ? Alors vous savez surement qu'on peut ecrire des articles et MEME des livres entiers basées sur des forums ( et meme gagner de l'argent avec ca) :) D'ailleurs je pense ca deja etre fait
Maintenant ce qui concerne le forum sans vous , il suffit de regarder. beacoup de question resterai sans reponses.
Et aussi je voulai vous dire que dans votre site je vois nul part marqué que le forum est reservé au professionels.Alors il se peut que y'a des questions (ainsi des reponses) peuvent etre de (tres) haut niveau au (tres) bas niveau. Je pense il faut repondre a tout le monde (dans la mesure de possible). Et si des gens peuvent dire des 'betises' il suffit de rectifier , comme vous le faites d'ailleurs , et je vous en remerci tout en etre persuadé que les autres lecteurs se rejoignent.
Je suis sur que tout le monde est d'accord pour dire que vous faites un travail colossal.
Voila , merci et a bientot
Dbobby
Même 5 ans après je trouve que c’était une de plus belle et enrichissante discussion !
Merci dbobby :)
Que deviens-tu ? Ca faisait longtemps ?
De rien :wink:
Je fait très peu dans la programmation , et de toute façon je suis très largement dépasse par tout ces nouvelles technologies :(
Des temps en temps j'y revient sur cette site ; Nostalgie oblige :)
Alors bonne continuation a toute votre équipe