jueves, junio 06, 2013

PHP script to generate DB

La idea de este script php es generar un sql DDL para generar algunas bastantes tablas en una base sql.
<?php

header('Content-Type: text/plain; charset=utf-8');

$no_tablas = 40;
$type_a = explode('|','int|varchar(20)|char(5)|decimal(10,2)|date|time');

for($i=1; $i<=$no_tablas; $i++){
 $no_campos = rand(3,12);
 $foreign = (rand(0,1))? true: false;
 $foreign_str = '';
 $campos = array();
 $campos[] = "\tid int not null primary key";
 for($j=1; $j<=$no_campos; $j++){
  $ctype = $type_a[ rand(0,count($type_a)-1) ];
  if ($foreign && $ctype=='int' && $foreign_str==''){
   $dest_tbl = "tabla_".rand(1,$i-1);
   $foreign_str = "\tforeign_key (campo_$j) references $dest_tbl(id)";
   $nullable = 'not null';
  } else {
   $nullable = (rand(0,1)==1) ? 'not null': '';
  }
  $campos[] = "\tcampo_$j $ctype $nullable";
 }
 $campos_str = join(",\n",$campos);

 echo <<<EOF
create table tabla_$i (
$campos_str
$foreign_str
);


EOF;
}

?>
Una muestra del archivo de salida, es algo así:
create table tabla_1 (
 id int not null primary key,
 campo_1 varchar(20) ,
 campo_2 date not null,
 campo_3 time not null,
 campo_4 char(5) not null,
 campo_5 char(5) ,
 campo_6 date not null,
 campo_7 date not null,
 campo_8 int not null,
 campo_9 char(5) not null,
 campo_10 date not null
 foreign_key (campo_8) references tabla_1(id)
);

create table tabla_2 (
 id int not null primary key,
 campo_1 time ,
 campo_2 varchar(20) ,
 campo_3 date not null,
 campo_4 time ,
 campo_5 char(5) ,
 campo_6 decimal(10,2) ,
 campo_7 time 

);

create table tabla_3 (
 id int not null primary key,
 campo_1 varchar(20) ,
 campo_2 varchar(20) not null,
 campo_3 time ,
 campo_4 time ,
 campo_5 int ,
 campo_6 time not null,
 campo_7 char(5) ,
 campo_8 time ,
 campo_9 decimal(10,2) ,
 campo_10 date 

);

No hay comentarios.: