Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ajouter un diagramme du schéma de BDD #9

Open
Seb35 opened this issue Mar 5, 2017 · 7 comments
Open

Ajouter un diagramme du schéma de BDD #9

Seb35 opened this issue Mar 5, 2017 · 7 comments

Comments

@Seb35
Copy link
Member

Seb35 commented Mar 5, 2017

À la nuit du code citoyen, @Pierrot-ongit et moi avons créé un diagramme du schéma de base de données de legi.py, notamment pour mieux visualiser sa structure et l’utiliser dans nos programmes. Un résultat est disponible sur http://lab.seb35.fr/legi.svg (créé par https://github.com/dargosch/sqlite2dot).
On a cherché quelque temps avant de trouver un outil qui faisait le job, avec la difficulté supplémentaire que le schéma SQLite n’est pas compatible avec MySQL.

Où peux-t-on stocker de façon pérenne ce résultat ? Dans un sous-dossier /doc de legi.py ? Dans un wiki ?

Pour mettre à jour ce diagramme, il suffit quasiment d’exécuter sqlite2dot (avec tclsh comme indiqué dans le README) puis dot (GraphViz). À noter que dot ne comprenait pas une ligne du résultat de sqlite2dot, je l’ai retiré mais ça reste un problème mineur.

@Changaco
Copy link
Member

Changaco commented Mar 5, 2017

Je ne trouve pas le diagramme beaucoup plus clair que le fichier SQL source, mais ça ne me dérange pas de l'ajouter dans le dépôt s'il vous convient.

Le schema.sql de legi.py est un peu dense parce que les éléments ne sont pas alignés, mais on peut changer ça. Par exemple :

 CREATE TABLE textes
-( id integer primary key not null
-, nature text not null
-, num text
-, nor char(12) unique -- only used during factorization
-, titrefull_s text unique -- only used during factorization
+( id            integer    primary key not null
+, nature        text       not null
+, num           text
+, nor           char(12)   unique   -- only used during factorization
+, titrefull_s   text       unique   -- only used during factorization
 , UNIQUE (nature, num)
 );

@Changaco
Copy link
Member

Changaco commented Mar 5, 2017

La version python de sqlite2dot ne nécessite qu'une seule commande (python2 sqlite2dot.py legi.sqlite) et produit un résultat beaucoup plus joli :

legi

@Pierrot-ongit
Copy link

Cool, merci ^^

@Changaco
Copy link
Member

Changaco commented Mar 5, 2017

J'ai proposé un petit changement à sqlite2dot.py pour le rendre compatible avec python3 : FredrikKarlssonSpeech/sqlite2dot#2

@didmar
Copy link

didmar commented Apr 15, 2023

Bonjour,

Je suis en train d'essayer d'utiliser legi.sqlite pour créer un embedding de tous les articles en vigueur, et pouvoir faire de la recherche sémantique dessus.

J'essaye de comprendre comment je peux faire une jointure sur les tables de manière à produire au final des documents de ce type :

  • source : "Code civil"
  • path : ["Livre Ier : Des personnes", "Titre Ier : Des droits civils", "Chapitre II : Du respect du corps humain"]
  • article_num : "16-1"
  • content : "Le respect dû au corps humain ne cesse pas avec la mort."

Le schéma m'aide un peu à visualiser la base, mais il me semble qu'il manque la representation de clés étrangères, par exemple pour faire le lien entre un article et sa hierarchie ?
Si vous avez un schéma plus complet ou bien de la doc là dessus, je suis preneur !

Merci pour ce super travail !

@Changaco
Copy link
Member

Changaco commented Apr 15, 2023

@didmar Il me semble que ce n'est pas possible en une seule requête SQL, car il faudrait que les jointures soient récursives pour récupérer les titres de sections.

@didmar
Copy link

didmar commented Apr 16, 2023

@Changaco OK, effectivement c'est ce que j'avais cru comprendre par rapport aux sections.
Au final je n'ai pas besoin du détail des sections pour mon use case, juste du texte (code, décret...) dont il est issu.
Pour info, voici ma query :

SELECT
    a.id, -- ID de l'article (code qui commence par LEGI)
    a.num,  -- son numéro dans le texte,
    t.nature, -- nature du texte (code, décret, ...)
    t.titre, -- titre du texte (code civil, ...)
    a.bloc_textuel -- texte de l'article en HTML
FROM articles a INNER JOIN textes_versions t
ON a.cid = t.id WHERE a.etat = "VIGUEUR"  -- uniquement les textes en vigueur

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants