[PHP5] The Database Machine: un outil d'accès aux données

Petit nouveau ! | 3 Messages

27 juin 2006, 19:33

Salut à tous,

Je me permet de laisser un message sur ce forum pour vous signaler que je viens de mettre en ligne un nouveau composant d'accès aux données pour PHP5 et MySQL/PGSQL.

The Database Machine (TDBM) vous permet d'accéder à votre base de données, effectuer des requêtes dessus, et modifier les enregistrements.
TDBM implémente un mécanisme de ActiveRecord (à la Ruby on Rails) et un mécanisme d'exploration de la base de données pour effectuer des requêtes sans spécifier les jointures.

Adresse: http://www.thecodingmachine.com/projects/tdbm
TDBM est basé sur 4 principes:
* La simplicité d'abord. TDBM n'est peut être pas la librairies la plus rapide, mais c'est une librairie simple, facile à utiliser et facile à installer.
* Effectuer des tâches simples devrait être simple. Les tâches les plus courantes peuvent être réalisées de manière très simple (récupérer des données et les sauvegarder peut être réalisé en 2 lignes.
* Pas de configuration! TDBM se passe de fichier de configuration. Vous devez juste lui spécifier le nom de la base de données, le nom de l'utilisateur et son mot de passe. Il se charge du reste.
* TDBM se base sur le modèle objet de votre base de données. TDBM se base sur les contraintes pour trouver les jointures entre les tables.

Enfin, TDBM est sous licence GPL (Open-Source).

Je serais extrèmement interessé d'avoir un feedback sur cette première release et de savoir ce que vous pensez de TDBM, quels sont les points à améliorer, les points peu compréhensibles ou vos encouragements!
N'hésitez pas à me laisser un message ou à ouvrir des bugs dans la plateforme si vous en trouvez.

[Hors-Sujet] Enfin, si vous êtes un développeur PHP expérimenté, n'hésitez pas à vous inscrire sur la plateforme http://www.thecodingmachine.com, nous recherchons des développeurs PHP travaillant en freelance! [/Hors-Sujet]

Cordialement,

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 juin 2006, 15:13

Tu dis que ce n'est pas le plus rapide, connais tu PDO ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 1311 Messages

28 juin 2006, 15:51

bon j'ai regarder vite fait (pas tester)
j'aime bien l'initiative, mais j'ai pas tester car j'ai pas pgsql sous la main
si tu veut que ton projet rencontre un public plus large regarde PDO comme te le suggere mere-teresa

d'ailleur en regardant tes classes j'ai pas l'impression que tu veuille etendre a d'autre db, evdement msql et sqlite serai bein venu

sinon est ce que ton obket gere bien les relation nà m (ce qui n'a pas l'ère d'etre le cas du sdo)
sinon un truc que j'ai pas aimé c'est qu'il n'y pas de confirmation a faire pour un update ( d'apres ce que j'aui compris)

Petit nouveau ! | 3 Messages

29 juin 2006, 11:47

Salut Jeff,

Merci pour ces premiers commentaires!
Je penserai éventuellement à faire une migration sous PDO. Lorsque j'ai commencé le développement du projet, j'ai eu un mal fou à l'installer et c'est pour celà que je suis parti sur Pear DB, qui était beaucoup plus facilement installable. Je migrerais sans doute le code lorsque PDO sera dispo et packagé sur la majorité des distributions linux.

Concernant l'évolutivité du code pour le support de nouvelles bases de données, il est normalement facilement programmable. En fait, j'ai externalisé les spécificités des bases de données dans 2 fonctions qu'il suffit de réécrire pour chaque base.
Rajouter des nouvelles bases demande par contre une bonne connaissance de ces bases, ce que je n'ai pas. En fait, j'ai besoin de fonctions qui analysent le modèle de données pour déterminer quelles sont les contraintes entre les tables. Ca demande de farfouiller un peu dans le modèle de données interne des bases de données... :p

Pour les relations m..n entre les tables par contre, TDBM fait 100 fois mieux ;). En fait, TDBM peut effectuer une liaison entre 2 tables arbitraires. Imaginons:
tu as une table User qui est reliée à une table Roles par une relation n..m (un user a plusieurs roles, un role peut être attribué à plusieurs users). Puis tu as une relation n..m entre ta table roles et une table authorisations (un role a plusieurs authorisations et inversement).
Avec TDBM, tu peux tout à fait écrire:
$user->get_authorisations();
De ce point de vue, je gère les relations n..n..n..n. En fait, TDBM effectue un parcours récursif de la base pour déterminer les relations entre les tables.

Enfin concernant l'update automatique, ta remarque me paraît justifiée. Peut être est-ce un peu trop contraignant (ou avant-gardiste? ;) ). Je vais permettre de configurer ce point pour pouvoir le désactiver.

En tout cas, encore merci pour ces premiers commentaires!

Mammouth du PHP | 1311 Messages

29 juin 2006, 16:35

Peut être est-ce un peu trop contraignant (ou avant-gardiste? Wink ).
moi je dirai trop permissif et dangereux, comment gere tu les transacrtion??

Mammouth du PHP | 983 Messages

29 juin 2006, 20:05

Comment gères-tu la sauvegarde du graphe d'objets? Imaginons que j'ai un objet User, qui contient un objet Groupe, qui lui-même a une collection d'objets User. Si je modifie l'objet User, tu fais un update sur l'objet Groupe et tous les objets User de sa collection?

Petit nouveau ! | 3 Messages

30 juin 2006, 09:54

Hello,

En fait, pour être tout à fait honnête, je ne gère pas du tout la sauvegarde de graphs d'objets (parce que je n'en ai pas besoin). TDBM en est encore à sa première version et si il est relativement puissant dans le requêtage, la gestion des sauvegardes des relations entre les objets est laissée à l'utilisateur. Celà se voit dans l'interface en fait. Il y a des methodes get_xxx pour chaque type d'objet, mais pour l'instant aucune méthode set_xxx. La technique à utiliser est juste de récupérer l'identifiant de l'objet que l'on veut lier et de l'inscrire dans la bonne colonne (j'améliorerai surement ce point dans une prochaine version).

Enfin, il faut comprendre que lorsque tu modifie une propriété, tu peux considérer que cette propriété est directement sauvegardée en base de données (ça ne se passe pas comme ça, mais le système fait bien attention à ce que la propriété soit écrite avant la prochaine requête qui pourrait avoir besoin de cette propriété). Donc ta question ne s'applique pas vraiment à TDBM. Lorsque tu modifie une propriété, tu fais comme si elle était directement écrite en base de données. Tu n'as donc pas à te soucier de savoir comment le save() va se propager aux objets enfants puisqu'il est automatique.

Concernant les transactions, bein heu.... on peut faire un begin, puis un commit ou un rollback, et puis voilà? ;). Pour un support plus poussé, qui est certes nécessaire, ça arrivera certainement dans la 0.2.0.