Mld d'un base de données mysql ou sqlite

Soyez le premier à donner votre avis sur cette source.

Vue 9 114 fois - Téléchargée 376 fois

Description

Avec la croissance grandissante du "reverse ingenering", les programmeur ont de plus en plus souvent a faire des refontes de site internet, et donc pour cela, une refonte des bases de données associés. Seulement le travail de nos rédecesseur n'etant pas toujours bien commenté et documenté, voici un petit outil permettant de remedier a ce probleme.

Ce petit code permet d'afficher le MLD de la base de données contenue sur support MySQL ou SQLite.

Source / Exemple :


Version MySQL :

<?php 

$data = SQL_MLDServer("127.0.0.1","root","");
echo $data;

function SQL_MLDServer($serveur,$user,$password){

    $return="";
    $id_sql = mysql_connect($serveur,$user,$password);							//CONNECTION AU SERVEUR MYSQL
    $db_list = mysql_list_dbs($id_sql);									//LISTER LES BASES DE DONNEES
    $count = mysql_num_rows($db_list);									//NOMBRE DE BASE DE DONNEES
    for($i=0;$i<$count;$i++){
        $database = mysql_db_name($db_list, $i);
        $return.="<br><br><font face=tahoma size=3><u><b>{$database}</b></u></font><br>";
        mysql_select_db($database,$id_sql);								//CONNECTION A LA BASE DE DONNEES SQL
        $pointeur = mysql_query("SHOW TABLES FROM $database;",$id_sql);					//LISTER LES TABLES
        $nbline = mysql_affected_rows($id_sql);								//NOMBRES DE TABLES
        for($j=0;$j<$nbline;$j++){
	    $return.="<br><font face=tahoma size=2><b>" . mysql_result($pointeur,$j,0) . "</b></font>";
	    $list_fields = @mysql_list_fields($database, mysql_result($pointeur,$j,0), $id_sql);	//LISTER LES CHAMPS
	    $nbcolumntab = @mysql_num_fields($list_fields);						//NOMBRE DE CHAMPS
	    if($nbcolumntab>0){										//SI ON TROUVE AU MOINS UN CHAMPS
                $return.="<font face=tahoma size=1>(<br></font>";
	        for($k=0;$k<$nbcolumntab;$k++){
		    $return.= "<font face=tahoma size=1>" . mysql_field_name($list_fields, $k) . " 
						        " . SQLLexic(mysql_field_type($list_fields, $k)) . "
						       (" . mysql_field_len($list_fields, $k) . ")  
						        " . SQLLexic(mysql_field_flags($list_fields, $k)) . "</font>";
	            if($k<$nbcolumntab-1){ $return.="<font face=tahoma size=1>,<br></font>";}
	        }
	        $return.="<font face=tahoma size=1>);<br></font>";
	    } else {
		$return.="<font face=tahoma size=1 color=red>[No fields]</font>";
	    }
        }
    }
    return $return;
}

function SQLLexic($chaine){
    $chaine = str_replace(	"string"		,"VARCHAR"		,$chaine);
    $chaine = str_replace(	"int"			,"INTEGER"		,$chaine);
    $chaine = str_replace(	"not_null"		,"NOT NULL"		,$chaine);
    $chaine = str_replace(	"primary_key"		,"PRIMARY KEY"		,$chaine);
    $chaine = str_replace(	"auto_increment"	,"AUTO_INCREMENT"	,$chaine);
    $chaine = str_replace(	"unsigned"		,"UNSIGNED"		,$chaine);
    $chaine = str_replace(	"real"			,"FLOAT"		,$chaine);
    $chaine = str_replace(	"timestamp"		,"TIMESTAMP"		,$chaine);
    $chaine = str_replace(	"blob"			,"BLOB"			,$chaine);
    $chaine = str_replace(	"binary"		,"BINARY"		,$chaine);
    $chaine = str_replace(	"enum"			,""			,$chaine);
    $chaine = str_replace(	"multiple_key"		,""			,$chaine);
    $chaine = str_replace(	"unique_key"		,""			,$chaine);
    $chaine = str_replace(	"zerofill"		,""			,$chaine);
    return "{$chaine}";
}

?>

Conclusion :


Chacun des algorithme est placé dans un fichier individuel.

Le MLD sur MySQL ne se fait que via des commandes SQL propres a la base MySQL.

Le MLD sur SQLite se fait en partie par le lecture de tables cachées contenant les informations de la base.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Ah oui, aussi : le terme MLD est un peu galvaudé ici puisque les scripts ne font que de décrire le modèle physique des tables.
Appelons un chat un chat...
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Et les vues ? et les procédures stockées ? et les triggers ?
Une base de données digne de ce nom comme MySql et, dans une moindre mesure, SqlLite ne se limite pas au simple stockage de données.
Je suis d'accord avec Malalam pour dire que le HTML n'est absolument pas utile ici. Il n'y a pas besoin de faire "joli" mais uniquement de l'utile.

L'idée est bonne et mérite d'être encouragée.

Allez, encore un petit effort et tire la quintessence du schéma INFORMATION_SCHEMA de MySql.
Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
Hello,

là par contre le code me plait moins...mais l'idée reste très bonne. Personnellement, j'ai foutu ça dans ma classe d'abstraction DB. C'est toujours très utile ce genre de scripts...
Mais là je te reproche le HTML dans la fonction, (pas beau en plus, ton html), alors qu'elle ne devrait renvoyer que de la donnée, là. Parce que le but c'est d'exploiter son retour ensuite pour, par exemple, vérifier des données qu'on s'apprête à lui envoyer, etc...
Si c'est juste pour de l'affichage, je vais plutôt aller sur mon phpmyadmin ou en l'occurrence pour moi sur mon enterprise manager.
De plus tes @ sans réelle vérification derrière me gênent.
Donc cette fois tu n'auras pas 10...mais pas non plus une mauvaise note parce que le code reste correct et que l'idée est bonne...et que ce code change des codes habituels :-)
Messages postés
41
Date d'inscription
dimanche 10 octobre 2004
Statut
Membre
Dernière intervention
17 décembre 2010

Les versions Oracles et Posgres sont a programmer.
J'en prend bonne note et je me renseigne ;p
Messages postés
39
Date d'inscription
mercredi 19 mars 2008
Statut
Membre
Dernière intervention
25 août 2009

Pas mal non plus et surtout très utile!!!!!
A quand la version Oracle?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.