My-DBMS Version 2.7.2/0304

Copyright (C) 1998-2004 Jose Salvador Aguilar Huerta

INTRODUCCION

My-DBMS es un manejador de tablas de datos relacionales, incorporando un interprete de operaciones básicas del álgebra relacional y un analizador de expresiones aritméticas, con lo cual permite relacionar varias tablas y generar nuevas tablas de resultado.
My-DBMS permite crear, leer, modificar, borrar  y agregar registros a tablas similares al formato DBASE III, pero también contiene un modulo para leer tablas de RM-COBOL con la ayuda de un diccionario de datos.
 
My-DBMS es distribuido bajo los términos de la licencia GNU, no tiene o se espera ningún cargo por su uso, se incluye el código fuente en "C++", no requiere conocimientos de programación para ejecutarlo, se ha probado bajo Linux Red Hat y otras distribuciones de Unix.
 
My-DBMS is a small database management system that enables you to store, modify and erase information from a database with format similar to dbase III and permit to read databases RM-COBOL (required data dictionary), "My-DBMS" contain an interpreter for relational algebra operations and arithmetic expressions, this permits to relate several databases to generate new databases of result.  
 
My-DBMS is distributed under the terms of the GNU General Public License, and no charge is made or expected. It contain the full 'C++' source code, you don't need to be a programmer to be up and running - it's known to compile and run without problems on Linux Red Hat and other Unix implementations.
 

INSTALACION

Para instalar My-DBMS se requiere Descargar el código fuente, el cual consiste de cuatro archivos: dbms.cpp, dbms.h, DBUnit.cpp y DBUnit.h . My-DBMS solo utiliza la librería estándar de C++, para compilar el código utilizando el compilador C de GNU C el comando es el siguiente:
 
g++ dbms.cpp DBUnit.cpp –o dbms
 
Con lo cual se obtiene el archivo executabledbms” que puede ser utilizado en cualquier parte del sistema de archivos, siempre que se tenga los permisos adecuados.
 

UTILIZACION

Uso:  dbms   
      dbms AR 
      dbms ARPROGRAM 
 
Comandos: CREATE APPEND DELETE BROWSE UPDATE SORT SELECT
          CREATE_INDEX SEEK AR ARPROGRAM
 
Operadores aritmaticos: + - * /
 
Operadores logicos: && || <> == > >= < <=
 
Funciones: $SUBSTR(expresion,inicio,final)
           $STRTRIM(expresion)
           $STRLEN(expresion)
           $SI(condicion,expresion_verdadero,expresion_falso)
           $SQRT(expresion)
           $RECNO
           $SESION
           $EOF
           $BOF
           $NREG
           $SUM(expresion)
           $SUMSI(condicion,expresion)
           $SUMSTR(separador,expresion)
           $MIN(expresion)
           $MAX(expresion)
           $AVERAGE(expresion)
           $FIRST(expresion)
           $LAST(expresion)
Operaciones de Algebra Relacional:
           ARSELECT(tabla, 'condicion')
           ARPROJECT(tabla,'camp1,camp2,...,campn')
           ARPRODUCT(tabla1,tabla2)
           ARPRODUCT(tabla1,tabla2,'eval1','oper','eval2')
                Producto condicionado, donde 'eval1' es una expresion a ser evaluada en la tabla1, y 'eval2' es una expresion a ser evaluada en la tabla2 los registros producto seran la union de los campos de tabla1 y tabla2 para los registros donde el resultado de 'eval1' y 'eval2' sean iguales.
           'oper' puede ser:
              '==' para un producto 1 a varios
              '<->' para un producto 1 a 1
              '<->>' para un producto 1 a varios
              '>->' para un producto 1 a 1 incluyendo todos los registros de tabla1
              '>->>' para un producto 1 a varios, incluyendo todos los registros de tabla1
           ARGROUP(tabla,'campo1/expr1,campo2/expr2,...,campon/exprn','expresion')
           ARADDTO(tabla1,tabla2)
                Agrega los registros de la tabla1 a la tabla2, el orden de los campos debe ser igual.
Operaciones complementarias:
           ARSORT(tabla,'expresion','ASC/DESC')
           ARCOPYTO(tabla,'nueva_tabla')
           ARBROWSE('tabla')
           ARBROWSEALL('tabla')
           ARSET variable = 'tabla/expresionAR'
           ARGET(tabla,campo,no_de_registro)
           ARMAIN { sentenciaAR1. sentenciaAR2.  .sentenciaARn. }  Todas las sentencias deben terminar con un punto'.'
           ARWHILE condicion { sentenciaAR1. sentenciaAR2.  .sentenciaARn. }
           ARIF condicion { sentenciaAR1. sentenciaAR2.  .sentenciaARn. }
           ARPRINT(expresion)
           ARPRINTLN(expresion)
           ARIGNORE expresion
Ejemplos:
      dbms CREATE temp.dbf "(ID,N,8,0)(NOMBRE,C,30,0)(PROFESION,C,40,0)"
      dbms APPEND temp.dbf "(1,JUAN,DOCTOR)(2,'MARIA DE LOS ANGELES',MAESTRA)"
      dbms BROWSE temp.dbf
      dbms UPDATE temp.dbf "(ID=100)(NOMBRE='PEDRO')" "ID == 1"
      dbms DELETE temp.dbf "ID == 2"
      dbms SELECT temp.dbf "ID == 100"
      dbms SELECT temp.dbf "ID == 100 || ID == 4"
      dbms CREATE_INDEX temp.dbf temp "PROFESION+NOMBRE" 70
      dbms SEEK temp.dbf temp.IDX "DOCTORARTURO"
      dbms SEEK temp.IDX "DOCTORARTURO"
      dbms SORT temp.dbf "ID" ASC
      dbms SORT temp.dbf "ID" DESC
      dbms CREATE temp2.dbf "(ID,N,8,0)(INGRESO,N,10,2)(IMPUESTO,N,10,2)"
      dbms APPEND temp2.dbf "(100,1000.00,150.00)(2,750.50,75.00)(3,548.75,54.00)"
      dbms AR "ARPRODUCT('temp.dbf','temp2.dbf')"
      dbms AR "ARPRODUCT('temp.dbf','temp2.dbf','ID','==','ID')"
      dbms AR "ARPROJECT('temp.dbf','ID,NOMBRE')"
      dbms AR "ARGROUP('temp2.dbf','ID,$SUM(INGRESO+IMPUESTO)','ID')"
      dbms AR "ARSELECT(ARPRODUCT('temp.dbf','temp2.dbf'),'ID == 1ID')"
      dbms AR "ARPROJECT(ARPRODUCT('temp.dbf','temp2.dbf','ID','==','ID'),'ID,NOMBRE,INGRESO,IMPUESTO,INGRESO+IMPUESTO')"
      dbms AR "ARPROJECT(ARSELECT(ARPRODUCT('temp.dbf','temp2.dbf'),'ID == 1ID'),'ID,NOMBRE,INGRESO,IMPUESTO,INGRESO+IMPUESTO,IMPUESTO*100/INGRESO')"
      dbms AR "ARSORT(ARPROJECT(ARSELECT(ARPRODUCT('temp.dbf','temp2.dbf'),'ID == 1ID'),'ID,NOMBRE,INGRESO,IMPUESTO,INGRESO+IMPUESTO,IMPUESTO*100/INGRESO'),'ID','ASC')"
      dbms MOSTRARSH AR "ARGROUP('temp2.dbf','ID,$SUM(INGRESO+IMPUESTO)','ID')"
      dbms AR "ARGROUP(ARPROJECT('OCPARTID.DBF','ORDENCMPR,PARTIDA,ARTICULO'),'ORDENCMPR,$NREG','ORDENCMPR')"
 

UTILIZAR TABLAS DE RM-COBOL

Para que My-dbms pueda leer tablas en formato RM-COBOL es necesario crear un diccionario de datos en la misma localizacion en que se encuentra la tabla RM-Cobol y con el mismo nombre de la tabla solo que con terminación “.def”, el diccionario de dato puede ser creado en el propio My-dbms, con la siguiente estructura:
 
dbms CREATE nombre.def "(ID,N,4,0)(NAME,C,10,0)(TYPE,C,1,0)(SIZE,N,6,0)(DIGITS,N,2,0)(OFFSET,N,6,0)"
 
Ejemplo:
  Supongamos que tenemos un archivo en RM-COBOL  llamado catalogo.cob al aplicar el comando BROWSE sin haber creado ningun diccionario de datos obtenemos el siguiente resultado:
 
>dbms BROWSE catalogo.cob
;
ACPRIMARIA        PA940608;
ACAP              PA940705;
MSPSS             PA950606;
MSPSC             PA950606;
PTP               PA981215;
ACA               PA010131;
MTPRI SEM         PA020404;
AHPRI SEM         PA020408;
2CPL2             PA031229;
 
la estructura original del archive ‘catalogo.cob’ es:
 
Field Name                  Decimal    Array     Type    Location   Size
                            Digits    Dim1 Dim2            
LOCALIZACION                   00     000  000    000      00001    00002
AREA                           00     000  000    000      00003    00008
SECTOR                         00     000  000    000      00011    00008
TIPO                           00     000  000    000      00019    00001
STATUS                         00     000  000    000      00020    00001
FECHA                          00     000  000    015      00021    00006
 
La secuencia de instrucciones para crear el diccionario de datos seria:
 
dbms CREATE catalogo.cob.def "(ID,N,4,0)(NAME,C,10,0)(TYPE,C,1,0)(SIZE,N,6,0)(DIGITS,N,2,0)(OFFSET,N,6,0)"
dbms APPEND catalogo.cob.def "(1,'LOCALIZA','C',2,0,1)"
dbms APPEND catalogo.cob.def "(2,'AREA','C',8,0,3)"
dbms APPEND catalogo.cob.def "(3,'SECTOR','C',8,0,11)"
dbms APPEND catalogo.cob.def "(4,'TIPO','C',1,0,19)"
dbms APPEND catalogo.cob.def "(5,'STATUS','C',1,0,20)"
dbms APPEND catalogo.cob.def "(6,'FECHA','N',6,0,21)"
 
dbms BROWSE catalogo.cob.def
ID;NAME;TYPE;SIZE;DIGITS;OFFSET;
   1;  LOCALIZA;C;     2; 0;     1;
   2;      AREA;C;     8; 0;     3;
   3;    SECTOR;C;     8; 0;    11;
   4;      TIPO;C;     1; 0;    19;
   5;    STATUS;C;     1; 0;    20;
   6;     FECHA;N;     6; 0;    21;
 
dbms BROWSE catalogo.cob
LOCALIZA;AREA;SECTOR;TIPO;STATUS;FECHA;
AC;PRIMARIA;        ;P;A;940608;
AC;AP      ;        ;P;A;940705;
MS;PSS     ;        ;P;A;950606;
MS;PSC     ;        ;P;A;950606;
PT;P       ;        ;P;A;981215;
AC;A       ;        ;P;A;010131;
MT;PRI SEM ;        ;P;A;020404;
AH;PRI SEM ;        ;P;A;020408;
2C;PL2     ;        ;P;A;031229;