Page 1 sur 2

programmation d'un SGBD sans utilisé le SQL

Posté : 19 nov. 2008, 10:54
par richardlyonnais
Bonjour a tous,


Je suis novice en php, j'ai un projet a faire mais je suis bloqué.
Le but de ce dernier est de coder un SGBD sans utiliser les requête SQL.
Concrètement, je dois lire dans un fichier des instructions et simuler une BdD
je peux utiliser les classes (POO).
Cependant Les libraire qui gerent les bdD ne sont pas autorisé.

Pouvez vous m'aider, je ne sais pas comment faire.

Posté : 19 nov. 2008, 11:00
par yaug
Hum.
En fait ce que tu cherches c'est un système de base de données en mode fichier.
Un truc genre sql lite ?

Posté : 19 nov. 2008, 12:24
par richardlyonnais
en quelques sorte, mais le problème ce que je ne peux pas utiliser les fonctions natif du sql je dois tout coder manuellement avec les fonctions du PHP.

Posté : 19 nov. 2008, 22:20
par phoeniix07
XML et DOM avec des classe php sympa pour gérer le tout peut etre ?

Posté : 19 nov. 2008, 23:07
par richardlyonnais
est ce que tu peux m'aider pheniix,

Posté : 20 nov. 2008, 02:51
par Calimero
Bonjour,

serait-il possible d'avoir l'énoncé exact du problème ? (Cela peut nous aider à te conseiller des possibilités).

Posté : 20 nov. 2008, 15:51
par Hywan
Hey :),

Je pense qu'il parle d'un ORM (Object Relational Mapping). On manipule un modèle objet (généré à partir d'un schéma en général), et ce modèle nous génère des requêtes SQL tout seul. Il les envoie, les traite et propose des résultats qui se manipulent bien.

Il existe Propel qui fait ça assez bien. Sinon Hoa (depuis la version 0.4b) a une couche expérimentale ORM pour le paquetage Hoa_Database. Zend Framework propose aussi quelque chose de similaire, mais c'est assez verbeux … Symfony se base sur Propel. Et pour les autres, je ne sais pas :).

Posté : 21 nov. 2008, 00:13
par richardlyonnais
Voici ce que je dois faire
Vous devez reaaliser les point point suivant
Faire une applicqtion qui decrit un GBDR.
Ce GBDR devra charger une BdD et permettra au user d'effectuer les taches de base entendait par la consultation, l'ajouts et la suppression.
Les users pourront saisir certaines commande qui seront interprété par le gestionnaire.
Le format de fichier de la bdD est libre. Vous devez trouver le format de fichier le plus simple.
Les fonctions SQL native ne sont pas pas autoriser
Vous devez impérativement utiliser des fonctions PHP

Voila

Posté : 21 nov. 2008, 00:52
par Hywan
Oui bah c'est une interface type CRUD (Create Read Update Delete) très classique, soit un exercice d'IUT si je ne me trompe … Cet exercice représente les premiers exercices que l'on réalise avec PHP. Un tour sur PHPDebutant.org ou le SiteduZero.com et tu trouveras ton bonheur …

Posté : 21 nov. 2008, 12:15
par richardlyonnais
je suis desolé mais j'ai rien trouver.
autre information je dois developper en php CLI.

Posté : 21 nov. 2008, 12:27
par Calimero
Tel que je le comprends, le but de l'exercice est que tu réalises une solution de stockage de données qui ne soit pas un SGBDR (certainement pour te faire mieux comprendre l'utilité et les problématiques du travail réalisé par ce dernier).

L'énoncé ne précise pas à quel point ton moteur doit être relationnel et ne semble pas imposer de gérer plusieurs tables, ce qui te facilite d'autant les choses (Une seule table à gérer est bien plus simple).

Une solution pourrait être le stockage dans un fichier texte (1 par table). Une ligne du fichier texte correspondant à un enregistrement, (mais il faudra choisir un caractère de fin d'enregistrement particulier pour éviter tout conflit avec une fin de ligne stockée dans un champ), et les champs y sont aussi séparés par un (autre) caractère spécial. L'intérêt du fichier texte est qu'il te permettra de vérifier facilement que tout se passe bien. La pire des choses qui puisse arriver serait une corruption des données suite à un bug dans le moteur, c'est sur ce point qu'il te faudra être vigilant.

Indice : Le format CSV, facilement manipulable en PHP avec les fonctions qui vont bien, peut correspondre à cette problématique.

Pour concevoir l'api pour manipuler cette "table", tu peux imiter les concepts existants pour les SGBD :

- 1/ Connexion (ouverture du fichier)
- 2/ Opération[s] : select(), insert(), delete() (à toi d'imaginer les paramètres qui vont bien)
- 3/ Déconnexion, parcequ'on est des gens propres :-)

Posté : 21 nov. 2008, 14:17
par richardlyonnais
merci

Posté : 21 nov. 2008, 15:46
par jojolapine
Bonjour,
si ça peut t'aider, j'avais dévellopé ça un jour:
http://www.phpfrance.com/forums/viewtop ... highlight=
après y a certainement toutes les erreurs du débutants regroupées, mais c'était fonctionnel ;)
Tu peux t'en inspirer ;)
Bonne chance

Posté : 21 nov. 2008, 15:48
par jojolapine
euh... y beaucoup de ligne fléchées dans ton exemple, que tu ne comprends pas...
Le mieux serait vraiment d'aller faire un tour sur des sites tutoriels comme dit précédemment, genre phpdebutant, siteduzero et consorts...
J'ajouterai aussi que la documentation est une mine d'information, une fois que tu as commencé à saisir les bases de php...

Posté : 21 nov. 2008, 16:01
par AB
merci calimero,

Un prof nous a donnée un debut d'indice, afin de nous guider

Est ce que tu pourrai m'exliquer les lignes flechés svp car je comprend rien
car je comprend pas tout
les regexp
function		FuncCreate($temp)
{
	preg_match('!.+(.+).+!', $temp, $tmp2); <-la
    $tmp = preg_replace('! *\(.+\)!', '', $temp);<-la
	$regexp = '!(C|c)(R|r)(E|e)(A|a)(T|t)(E|e) (T|t)(A|a)(B|b)(L|l)(E|e) *!';<-la
    $tmp = preg_replace($regexp, '', $tmp);<-la 
	$tmp2 = preg_replace('![A-Za-z \\n]+\(!', '', $temp);<-la 
	$tmp2 = preg_replace('!\)+!', '', $tmp2);<-la
	$tmp2 = preg_replace('!\\t+!', ' ', $tmp2);<-la
	$tmp2 = preg_replace('!\n !', '', $tmp2);<-la
	$arr = explode(',', $tmp2);<-la
	$avDBFile = $_SERVER['argv'][$_SERVER['argc'] - 1];

}

ps a quoi sert une fonction explode
Pour explode() il te suffit de cliquer sur la fonction et tu auras la définition du manuel !
Idem pour le reste mais il te faudra plus de temps pour analyser les expressions régulières.

EDIT si cette fonction est nécessaire dans la résolution de votre problème, je trouve cette façon de faire un peu strong pour une initiation...