[..] Comment procéder pour créer une BDD?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

[..] Comment procéder pour créer une BDD?

#1

Message par labougie »

Bonjour,

Le projet est à mes yeux génial, et, mérite que je le pousse au bout.
Mais je suis loin de maîtriser le sujet :mrgreen:

Je souhaite créer une Bdd en partant D'autoit pour la saisie, puis ensuite exploiter les résultats avec autoit.

Le but de cet outil est de gérer une base contenant des propriétaires, des locataires, des prospects.

Une liaison doit être faite entre le proprio et ses biens, mais aussi avec les locataires.

exemple

Jean / proprio / Studio / T4 / T3 / Maison F5 / Maison F4
les locataires A B C D

A => studio
B => Maison F5
C => T4
D => T3

Donc si je clique ou sélectionne "Jean"
Je dois avoir:
  • Le nom du locataire
  • Les coordonnées de ce dernier (ou un accès rapide à ces dernières)
  • le bien qu'il loue
  • La liste des biens restant à louer
  • A défaut la liste des biens déjà loués
Je dois aussi pouvoir saisir le nouveau proprio ainsi que ces biens, mais aussi les futurs locataires et par conséquent nourrir le BDD.

Etant encore profane, je ne trouve pas comment:
  • Organiser les tâches
  • Les définir, liaisons entre elles et surtout éviter la redondance
  • Quels outils choisir
  • Le tout pour un utilisateur final ultra novice (qui donc ne devra se contenter que de cliquer et remplir les champs pour que cela fonctionne)
J'ai préparé un bout de code pour différents Gui avec des onglets, mais je ne sais pas comment m'organiser pour cette BDD.

labougie

Masque de saisie
► Afficher le texte
Gui qui pourrait être un gui de présentation (idée)
► Afficher le texte
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#2

Message par jguinch »

A quel niveau se situe ton problème d'organisation ? Tu as déjà fait une ébauche de ta base ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#3

Message par walkson »

Bonsoir,
je te proposerais de réaliser 3 tables:
1- proprio
2- biens
3- locataires
pour la table proprio:
key proprio/nom/adresse etc...
pour la table biens:
key biens/key proprio/adresse/style/état/ etc...
pour la table locataires:
key locataire/key biens/nom/date installation/ etc...

Pour se faire, j'utiliserais Excel avec 3 sheets et pour les keys, l'adresse de la cellule A1, A2 etc...
Au niveau d'Autoit, soit 3 guis ou une gui avec 3 Tab pour création d'un nouveau proprio, bien ou locataire
Pour la recherche, soit 2 guis ou un gui avec 2 Tab pour la recherche par proprio (proprio>biens>locataire) et pour la recherche par locataire (locataire>bien>proprio), la lecture des keys permettant de passer d'une table à l'autre.
J'espère avoir été clair et t'inspirer
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#4

Message par mikell »

Avec la même organisation j'utiliserais plutôt comme outil une bdd SQLite, c'est très souple d'utilisation et très rapide même avec une grande quantité de données
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#5

Message par labougie »

Bonsoir
jguinch a écrit :A quel niveau se situe ton problème d'organisation ? Tu as déjà fait une ébauche de ta base ?
Oui et non pour l'organisation de la base.
Je ne comprends pas comment lier les informations afin qu'elles s'emboitent naturellement.

C'est à dire:

Si tu tapes "Jean" (le prioprio), comment lier le fait qu'il soit le propriétaire de tel ou tel bien, mais aussi que A B C sont bien les locataires de ses biens.

Si je tape inversement, A ou B ... je dois pouvoir retrouver le propio.
Sur le même principe avec les biens, afin d'avoir une recherche la plus large possible.
L'idée me semble bien, mais est elle raisonnable, logique ou dénuée de sens pratique.

walkson a écrit :Bonsoir,
je te proposerais de réaliser 3 tables:
1- proprio
2- biens
3- locataires
pour la table proprio:
key proprio/nom/adresse etc...
pour la table biens:
key biens/key proprio/adresse/style/état/ etc...
pour la table locataires:
key locataire/key biens/nom/date installation/ etc...
Walkson,

Dans key tu signifies que l'onglet porte le nom de "proprio", "biens" et "locataires", n'est-ce pas?
walkson a écrit : Pour se faire, j'utiliserais Excel avec 3 sheets et pour les keys, l'adresse de la cellule A1, A2 etc...
Au niveau d'Autoit, soit 3 guis ou une gui avec 3 Tab pour création d'un nouveau proprio, bien ou locataire
Pour la recherche, soit 2 guis ou un gui avec 2 Tab pour la recherche par proprio (proprio>biens>locataire) et pour la recherche par locataire (locataire>bien>proprio), la lecture des keys permettant de passer d'une table à l'autre.
j'ai un problème de vocabulaire, pour ta démonstration, Gui => ok , mais tab => onglet ou autre chose ?
[[[En me relisant, surtout ceci => pour la table biens:
key biens/key proprio/adresse/style/état/ etc...
, je crois que key n'est pas le nom de l'oglet]]]
Suis un peu perdu, pourtant cela semble simple en te lisant.
Je sais que dans ce genre de travail, le plus important, c'est la préparation :mrgreen: (le code aussi)

mikell a écrit :Avec la même organisation j'utiliserais plutôt comme outil une bdd SQLite, c'est très souple d'utilisation et très rapide même avec une grande quantité de données
En supposant, que j'opte pour une base SQLite, est-ce que l'utilisateur final doit obligatoirement installer le logiciel SQLite?
Aussi, là je ne connais pas du tout cet outil, mais bon apprendre c'est du domaine du très possible.

labougie
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#6

Message par jchd »

Je vais tenter de répondre à quelques-unes de tes interrogations, sans ordre particulier.

a) SQLite ne demande aucune installation (outre une dll que l'on peut FileInstall-er une fois pour toute sur chaque poste), aucune configuration spécifique, aucune maintenance et peu de technicité de mise en oeuvre (comparé aux moteurs de BDD à architecture client-serveur ou [bien pire] à Excel).

b) Toute base SQLite v3 (un seul fichier) est portable sur à peu près toutes les plate-formes matériel+OS existantes sans demander une quelconque conversion. SQLite est utilisé dans les GPS, les smartphones, des routers, des robots, quasiment tous les ordinateurs personnels ou des serveurs de toute taille. La plus grosse base SQLite que je connaisse dépasse la taille très exceptionnelle de 120 To et alimente un site web fréquenté.

c) Un moteur de BdD SQL ne sert qu'à organiser le stockage et permettre un accès efficace aux données qu'il abrite. Donc on ne "tape" pas "Dupont" pour tout savoir sur la vie de ce quidam, mais on utilise des requêtes SQL pour récupérer des informations précises selon des critères précis :
select nom, prénom, no_portable, no_fixe from phonebook where nom like 'dupon%' and lower(prénom) in ('pierre', 'paul', 'jacques');


d) Tu dois avant tout te diriger vers un tutoriel SQL pour acquérir le B-A-BA des principes et du fonctionnement d'un moteur SQL. Il y en a des tonnes sur le web, dans toutes les langues.

e) Je te conseille très vivement de télécharger un outil qui va te permettre de te familiariser et d'expérimenter avec SQLite. Prend SQLite Expert en version gratuite, il fait déjà pas mal de choses. Tu pourras jouer à ta guise sans avoir à écrire une seule ligne de code AutoIt.

f) Une base SQL se compose généralement de plusieurs tables qui sont régies par des contraintes et liées entre elles par des relations 1-1, 1-N, N-1 ou N-N, le plus souvent par un mécanisme de clés étrangères (foreign keys) et de jointures. Ainsi, un bailleur peut posséder plusieurs biens (1-N), chaque locataire peut louer plusieurs biens (1-N) mais un bien donné n'a qu'un bailleur (1-1) et qu'un locataire (1-1).

g) SQL n'a rien à voir avec une feuille de calcul et l'architecture "normale" est souvent contraire à l'intuition dictée par les habitudes de programmation impérative. Dans ton contexte, il est naturel en SQL de regrouper toutes les adresses et coordonnées de contact (bailleur, bien, locataire) dans une seule table et de lier ces adresses depuis les tables bailleur, bien et locataire. Ce choix est de beaucoup préférable à celui qui consisterait à avoir des colonnes d'adresse et de contact dans chacune de ces trois tables.

h) Tu as intérêt à prévoir les cas qui dépassent le vécu habituel afin de ne pas te trouver dans une impasse après quelques temps. Un locataire doit avoir une adresse de résidence et de contact, mais ce n'est pas forcément celles d'une location.

i) Oublie le terme "onglet" dans le contexte SQL. En SQL, une clé (key) est un identifiant, souvent unique.

j) Ne te précipite surtout pas à coder quoi que ce soit. Construit et peaufine d'abord le schéma de ta base avec Expert et crée les requêtes dont tu auras besoin. Quand le tout fonctionnera comme tu le souhaites, alors seulement tu pourras commencer à coder, en finissant par l'IHM.

k) Mais avant tout, impose-toi de mettre noir sur blanc les spécifications de ta problématique et détaille au maximum les contraintes requises.

l) Ne pas mettre les informations de location dans la table locataire ! Non seulement un locataire pourrait louer plusieurs biens simultanément (ex. résidences principale et secondaire, ou encore location par une famille de leur résidence et d'un ou plusieurs studios pour leurs enfants étudiants) mais on ne pourrait pas facilement conserver un historique des locations. Ceci implique la création d'une table locations séparée, liant un locataire et un bien à des informations propre à ce contrat.

m) Je n'ai aucune idée de l'ambition de ton projet, mais il te faut viser la flexibilité maximale tout en restant raisonnable. Si tu veux gérer des prospects à qui on propose et fait visiter plusieurs biens, il peut être malin de créer une table liant les biens déjà proposés/visités pour éviter de proposer 4 fois le même T3 à une famille de 5 personnes. Il est aussi parfaitement possible de mettre sur pied une recherche sur critères, y compris géographiques, ex. "dans un rayon de 35 km autour de Tricotin les Trois Mosquées".

n) J'allais oublier un point crucial : une base SQLite doit être locale, mais supporte des accès concurrents sans problème.

Desolé pour le mur de texte et bonne digestion d'icelui !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1038
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#7

Message par walkson »

Bonjour,
C'est là où on voit la différence entre le "bricoleur" et les pros :wink:
C'est vrai que l'utilisation de SQlite est plus adaptée surtout pour les recherches mais sa mise en œuvre n'est pas des plus facile...
Pour répondre à tes questions:

Code : Tout sélectionner

Global $Form1 = GUICreate("Form1", 615, 438, 192, 124)
Global $Tab1 = GUICtrlCreateTab(48, 40, 513, 369)
Global $TabSheet1 = GUICtrlCreateTabItem("proprio")
Global $TabSheet2 = GUICtrlCreateTabItem("locataire")
Global $TabSheet3 = GUICtrlCreateTabItem("biens")
GUICtrlSetState(-1,$GUI_SHOW)
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)

Code : Tout sélectionner

      A        B         C             D
1   Key     Nom   Prénom   Adresse
2   A2  Legros    Louis    4 Rue Truc
3   A3  etc…  
Si tu utilise Excel, l'idée est qu'une table renvoie les références d'une ou plusieurs tables pour l'intermédiaire des clés
Ainsi, on pourrait avoir sur la Feuille "Biens"    
      A           B              C                          D             
1   KeyBien Key proprio  Keylocataire       Adresse
2   A2         A2               A6                   14 Rue Machin
La lecture de la ligne 2 (Feuil2) me donne le nom du proprio (Feuil1 A2) et du locataire (Feuil3 A6) pour un immeuble Rue Machin
Idéalement serait de faire (Avec Excel ou SQlite) un petit programme pour tester les liaisons et les retours de recherche avec toutes les possibilités.
(jchd explique très bien)
Sur Access 2007, il y a un exemple nommé Biens qui permets de voir à titre d'exemple l'architecture d'une BDD si tu souhaite passer par SQlite
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#8

Message par mikell »

Hum un bémol concernant le c) et le i) : il ne faut pas confondre ce qui se passe dans l'interface utilisateur et la manière dont les requêtes sont gérées par la bdd
Comme dab, en pratique le plus difficile n'est pas de réaliser l'interface ni d'agencer la bdd mais d'organiser proprement la communication entre les deux, à ce titre le k) est particulièrement important
Donc tu "tapes" effectivement Dupont, avec (ou pas) des onglets et c'est après pression du bouton Valider que ça passe en 'fonctionnement bdd' et que ça se corse

Concernant le m) et la recherche "dans un rayon de 35 km autour de Tricotin les Trois Mosquées" je reste quand même dubitatif, la quantité d'infos à entrer me semblant disproportionnée par rapport au résultat attendu -- un Google Maps embedded serait à la fois plus simple et plus efficace pour ce genre de truc

Pour les tutoriaux, pour m'y être frotté avec plus ou moins de bonheur je peux t'en indiquer 2 sympas et 'accessibles' quand on débute :
http://www.w3schools.com/SQL/sql_select.asp
http://www.tutorialspoint.com/sql/sql-select-query.htm
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#9

Message par jchd »

Oui, je voulais dire pour c) et i) que ce n'est pas du ressort de la bdd de gérer ça. C'est ce qui se passe du côté applicatif et IHM.

Pour m) je n'ai jamais dit que ça devait être fait en local, simplement que c'est parfaitement concevable de penser à ce genre de truc si le contexte le justifie. Spatialite est aussi là pour démontrer que le moteur peut très bien le faire.

Il y a aussi les tutoriels de Frédéric Brouard, mais ils sont plutôt exhaustifs et orientés "entreprise".

Pour SQLite spécifiquement, le mieux est le site de référence, en anglais.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#10

Message par labougie »

Bonjour,

Merci à tous pour vos remarques constructives.

Je vais regarder tout d'abord du coté de Sqlite puis en fonction des difficultées rencontrer, sans doute ensuite vers excel, (sans oublier de regarder comme le souligne walkson l'exemple d'acces).

Mikell,
J'ai suivi ton topic de ta 1ere bdd, je prends bonne note aussi de ton second lien.
Je comprends qu'ensuite le chemin entre la base et Autoit peut sembler assez périlleux pour le novice que je suis.

Walkon,
Merci pour tes 2 exemples

Jchd,
Que de bonnes lectures. Longues mais très enrichissantes.

Le point j) est donc celui à mettre en avant.
Composer papier les liaisons entre les divers groupes puis créer la base en réel pour enfin terminer par l'interface. (Entendu pour le chemin à suivre)
Les codes indiqués plus haut sont pour montrer un principe d'utilisation, après effectivement, je pense que l'interface sera complètement revue suite à tes conseils.

Le point m)
Je retiens l'idée des prospects, sans aller jusqu'au paramètre géographique, mais j'enregistre tout de même les infos dans un coin du pc au cas ou.

La marque g) c'est pour éviter le . :mrgreen:
Dans ton contexte, il est naturel en SQL de regrouper toutes les adresses et coordonnées de contact (bailleur, bien, locataire) dans une seule table et de lier ces adresses depuis les tables bailleur, bien et locataire.
Cette remarque est donc le point le plus important pour la conception/architecture de la base.
Mais pourquoi lier les informations ainsi?
Par soucis de recherches plus rapide?
Par recoupement plus aisé dans le traitement final avec l'interface?

Que d'excellentes infos

labougie
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#11

Message par jchd »

En ce qui concerne le dernier § de ton dernier post, l'idée est de normaliser la base, c'est-à-dire de respecter un certain nombre de contraintes, de plus en plus strictes selon de niveau de normalisation visé.

Pour rester simple, les idées directrices sont d'éviter au maximum la duplication d'informations dans la base et le regroupement en une même table de ce qui a la même structure et peut être différencié eventuellement par un indicateur, si besoin.

Du point de vue applicatif, cela amène par exemple à regrouper les adresses et seulement mettre l'identificateur de l'adresse dans la rangée "bien", "proprio" ou "locataire". Du coup, cela simplifie l'architecture de la base et aussi le code appli, car il n'est besoin que de valider en une seule fonction toute nouvelle adresse. Si on met des adresses dans plusieurs tables, il faudra dupliquer le code pour chacune de ces tables. Une adresse est une entité assez complexe et commune à plusieurs contexte, ce qui justifie d'en faire une sorte de "brique logicielle", du moins du point de vue stockage et accès.

Je te concocte un schéma à titre d'exemple.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
labougie
Niveau 4
Niveau 4
Messages : 68
Enregistré le : dim. 03 nov. 2013 14:36
Status : Hors ligne

Re: [..] Comment procéder pour créer une BDD?

#12

Message par labougie »

Bonjour Jchd,

Merci pour ta préparation.

labougie
Répondre