martes, 19 de abril de 2011

Lenguaje de definición de Datos (DDL)

El lenguaje de definición de datos (en inglés Data Definition Language, o DDL), es el que se encarga de la modificación de la estructura de los objetos de la base de datos. Existen cuatro operaciones básicas: CREATE, ALTER, DROP y TRUNCATE.

CREATE
Este comando crea un objeto dentro de la base de datos. Puede ser una tabla, [[Vista 'CAMPO_2' STRING </source>
Ejemplo (crear una función)
CREATE OR REPLACE FUNCTION 'NOMBRE FUNCION'('PARAMETROS')
  RETURNS 'TIPO RETORNO' AS
$BODY$
begin
'INSTRUCCIÓN SQL'
--por Ejemplo:
DELETE FROM con_empleado WHERE id_empleado = 'ANY' (ids);
end;
$BODY$
LANGUAGE 'plpgsql';

ALTER
Este comando permite modificar la estructura de un objeto. Se pueden agregar/quitar campos a una tabla, modificar el tipo de un campo, agregar/quitar índices a una tabla, modificar un trigger, etc.
Ejemplo (agregar columna a una tabla)
ALTER TABLE 'TABLA_NOMBRE' (
   ADD NUEVO_CAMPO INT UNSIGNED meel
)

DROP
Este comando elimina un objeto de la base de datos. Puede ser una tabla, vistaíndicetrigger, función, procedimiento o cualquier otro objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER.
Ejemplo
 ALTER TABLE ''TABLA_NOMBRE''
 (
    DROP COLUMN ''CAMPO_NOMBRE1''

TRUNCATE
Este comando trunca todo el contenido de una tabla. La ventaja sobre el comando DROP, es que si se quiere borrar todo el contenido de la tabla, es mucho más rápido, especialmente si la tabla es muy grande. La desventaja es que TRUNCATE sólo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la cláusula WHERE. Si bien, en un principio, esta sentencia parecería ser DML (Lenguaje de Manipulación de Datos), es en realidad una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta ninguna transacción.
Ejemplo
 TRUNCATE TABLE ''TABLA_NOMBRE1''

PROGRAMACIÓN ORIENTADA A OBJETOS

La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos. Entre ellos destacan los siguientes:

Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.

Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

 Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables públicas declaradas en C. Los componentes registrados como "privados" (prívate) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

Polimorfismo: comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método

Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.

Instanciamiento: En programación, una instancia se produce con la creación de un objeto perteneciente a una clase (se dice que se instancia la clase). El objeto que se crea tiene los atributos, propiedades y métodos de la clase a la que pertenece. Los objetos y sus características se usan en la construcción de programas, ya sea como contenedores de datos o como partes funcionales del programa.

lunes, 18 de abril de 2011

Lenguaje de manipulación de datos DML

Un lenguaje de manipulación de datos (Data Manipulation Language, o DML en inglés) es un lenguaje proporcionado por el sistema de gestión de base de datos que permite a los usuarios llevar a cabo las tareas de consulta o manipulación de los datos, organizados por el modelo de datos adecuado.
El lenguaje de manipulación de datos más popular hoy día es SQL, usado para recuperar y manipular datos en una base de datos relacional.

INSERT
Una sentencia INSERT de SQL agrega uno o más registros a una (y sólo una) tabla en una base de datos relacional.
Forma básica
 INSERT INTO ''tabla'' (''columna1'', [''columna2,... '']) VALUES (''valor1'', [''valor2,...''])
Las cantidades de columnas y valores deben ser iguales. Si una columna no se especifica, le será asignado el valor por omisión. Los valores especificados (o implícitos) por la sentencia INSERT deberán satisfacer todas las restricciones aplicables. Si ocurre un error de sintaxis o si alguna de las restricciones es violada, no se agrega la fila y se devuelve un error.

Ejemplo
 INSERT INTO agenda_telefonica (nombre, numero) VALUES ('Roberto Jeldrez', 4886850);
Cuando se especifican todos los valores de una tabla, se puede utilizar la sentencia acortada:
 INSERT INTO ''tabla'' VALUES (''valor1'', [''valor2,...''])
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas de la tabla 'agenda_telefonica'):
 INSERT INTO agenda_telefonica VALUES ('Roberto Jeldrez', 080473968);

Formas avanzadas

Inserciones en múltiples filas
Una característica de SQL (desde SQL-92) es el uso de constructores de filas para insertar múltiples filas a la vez, con una sola sentencia SQL:
INSERT INTO ''tabla'' (''columna1'', [''columna2,... ''])
               VALUES (''valor1a'', [''valor1b,...'']), (''value2a'', [''value2b,...'']),...
Esta característica es soportada por DB2, PostgreSQL (desde la versión 8.2), MySQL, y H2.
Ejemplo (asumiendo que 'nombre' y 'número' son las únicas columnas en la tabla 'agenda_telefonica'):
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850'), ('Alejandro Sosa', '4556550');
Que podía haber sido realizado por las sentencias
INSERT INTO agenda_telefonica VALUES ('Roberto Fernández', '4886850');
INSERT INTO agenda_telefonica VALUES ('Alejandro Sosa', '4556550');
Notar que las sentencias separadas pueden tener semántica diferente (especialmente con respecto a los triggers), y puede tener diferente rendimiento que la sentencia de inserción múltiple.
Para insertar varias filas en MS SQL puede utilizar esa construcción:
INSERT INTO phone_book
SELECT 'John Doe', '555-1212'
UNION ALL
SELECT 'Peter Doe', '555-2323';
Tenga en cuenta que no se trata de una sentencia SQL válida de acuerdo con el estándar SQL (SQL: 2003), debido a la cláusula subselect incompleta.
Para hacer lo mismo en Oracle se usa DUAL TABLE, siempre que se trate de solo una simple fila:
INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM DUAL
UNION ALL
SELECT 'Peter Doe','555-2323' FROM DUAL
Una implementación conforme al estándar de esta lógica se muestra el siguiente ejemplo, o como se muestra arriba (no aplica en Oracle):
INSERT INTO phone_book
SELECT 'John Doe', '555-1212' FROM LATERAL ( VALUES (1) ) AS t(c)
UNION ALL
SELECT 'Peter Doe','555-2323' FROM LATERAL ( VALUES (1) ) AS t(c)

Copia de filas de otras tablas
Un INSERT también puede utilizarse para recuperar datos de otros, modificarla si es necesario e insertarla directamente en la tabla. Todo esto se hace en una sola sentencia SQL que no implica ningún procesamiento intermedio en la aplicación cliente. Un SUBSELECT se utiliza en lugar de la cláusula VALUES. El SUBSELECT puede contener JOIN, llamadas a funciones, y puede incluso consultar en la misma TABLA los datos que se inserta. Lógicamente, el SELECT se evalúa antes que la operación INSERT esté iniciada. Un ejemplo se da a continuación.
INSERT INTO phone_book2

SELECT *
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
Una variación es necesaria cuando algunos de los datos de la tabla fuente se está insertando en la nueva tabla, pero no todo el registro. (O cuando los esquemas de las tablas no son iguales.)
INSERT INTO phone_book2 ( [name], [phoneNumber] )

SELECT [name], [phoneNumber]
FROM phone_book
WHERE name IN ('John Doe', 'Peter Doe')
El SELECT produce una tabla (temporal), y el esquema de la tabla temporal debe coincidir con el esquema de la tabla donde los datos son insertados.

UPDATE
Una sentencia UPDATE de SQL es utilizada para modificar los valores de un conjunto de registros existentes en una tabla.
Forma básica
 UPDATE ''tabla''
SET ''columna1'' = ''valor1'' ,''columna2'' = ''valor2'',...
 WHERE ''columnaN = ''valorN''

Ejemplo
UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N';

DELETE
Una sentencia DELETE de SQL borra uno o más registros existentes en una tabla,
Forma básica
 DELETE FROM ''tabla'' WHERE ''columna1'' = ''valor1''

Ejemplo
DELETE FROM My_table WHERE field2 = 'N';

Algunas leyes de Murphy aplicadas a la informática


Si algo puede fallar, fallará".
  • Nada es tan fácil como parece serlo.
  • Todo tiene necesidad de más tiempo del que usted piensa.
  • Si existe la posibilidad de que varias cosas puedan salir mal, saldrá mal aquella que cause el mayor daño.
  • Si usted descubre que existen cuatro maneras posibles en que un procedimiento pueda fracasar, y logra solucionarlas, entonces surgirá inevitable y rápidamente una quinta posibilidad de fallo.
  • Si se dejan al azar las cosas, tenderán a ir de mal en peor.
  • Siempre que se disponga a hacer algo, habrá antes algo más importante que hacer.
  • Cada solución genera nuevos problemas.
  • Es imposible hacer algo a prueba de tontos, porque éstos son muy ingeniosos.
  • La naturaleza siempre se pone de parte del fallo escondido.
  • La madre naturaleza es una malvada.
Leyes para programar un ordenador:
  • Cualquier programa dado, al ejecutarlo se vuelve obsoleto.
  • La realización de cualquier programa dado cuesta más y lleva más tiempo.
  • Si un programa es útil, por algún motivo deberá cambiarlo.
  • Si un programa es inútil, deberá ser documentado.
  • Cualquier programa dado se expandirá para llenar toda la memoria disponible en la computadora.
  • El valor de un programa es proporcional al peso de su información de salida.
  • La complejidad del programa aumenta hasta que excede la capacidad del programador que debe llevarlo a cabo.
Algunos postulados de Troutman sobre programación:
  • Si un editor de entrada ha sido diseñado para rechazar las malas entradas, algún idiota ingenioso descubrirá la forma de que éstas pasen.
  • La maldición es el lenguaje que mejor conocen todos los programadores.

Axioma informático de Leo Beiser:
  • Cuando archive algo en la memoria, acuérdese de dónde lo guardó.
Axiomas informáticos de McCristy:
  • Los archivos de apoyo nunca estarán completos
  • Los fallos del software se pueden corregir sólo cuando la industria considera que se ha quedado obsoleto.
Ley de Lubarsky sobre la entomología cibernética: 
  • Siempre queda algún virus.
Regla de Sutin: 
  • De todas las cosas que se pueden hacer con un ordenador, las más inútiles son las más divertidas.
Ley de Smith sobre reparación de ordenadores: 
  • Los orificios de acceso tendrán medio milímetro menos de diámetro.
Ley de los SIMMs de Protel:
  • Si se deja un ordenador abierto sobre una mesa, los SIMMs de memoria tenderán a desaparecer espontáneamente.
Leyes de Gilb acerca de la falta de fiabilidad:
  • No se puede confiar en las computadoras, pero menos aún en los seres humanos.
  • Cualquier sistema que dependa de la confianza en seres humanos, es poco fiable.
  • Los errores imposibles de descubrir son infinitos en su variedad, en contraste con los detectables que por definición son limitados.
  • Las inversiones para asegurar fiabilidad aumentarán hasta que excedan el coste probable de los errores que puedan presentarse o hasta que alguien insista en hacer algún trabajo útil.
Ley de la falta de fiabilidad: 
  • Errar es humano, pero, para liar las cosas de verdad, hace falta un ordenador.  
  • La última versión de SCSI es la Wide Ultra2 SCSI, que usa un bus de 16 bits, un ancho de banda de 80MB/s y trabaja con cables planos de 68 hilos. 
Norma de Steinbach para los sistemas de programación: 
  • No trate nunca de verificar una condición de error que no sepa manejar.

Principio de Pollyanna sobre la IBM: 
  • Las máquinas deben funcionar y las personas, pensar.
Ley de Brook: 
  • Asignar fuerza de trabajo adicional a un proyecto retrasado lo demorará aún más.
Leyes de computación de acuerdo con Golub:
  • Los objetivos de un proyecto, definidos en forma confusa, se utilizan para evitar la molestia de hacer la correspondiente estimación de costos.
  • Un proyecto mal planeado se lleva tres veces el tiempo estimado para terminarse, uno bien planeado tomará solamente el doble.
  • El esfuerzo requerido para corregir el rumbo aumenta geométricamente con el tiempo.
  • Los equipos de trabajo detestan los informes semanales de avance porque en éstos se demuestra en forma evidente la falta de progreso.
Principio de Shaw:
  • Diseñe un sistema que hasta un tonto pueda utilizar, y solamente un tonto lo querrá emplear.
Leyes de Manubay para los programadores:
  • Si funciona la modificación de un programador a un programa ya existente, es probable que no sea lo que quieren los usuarios.
  • Los usuarios no saben realmente lo que quieren, pero saben con certeza lo que no quieren.
Ley de Greer: 
  • Un programa de ordenador hace lo que usted le ordena que haga, no lo que usted quiere que haga.
Para saber más: "La ley de Murphy", Arthur Bloch

Archivo extensiones Visual FoxPro



Extensión
Tipo de archivo
.act
Diagrama de acción del Asistente para documentación
.app
Aplicación o documento activo generado
.cdx
Índice compuesto
.chm
Ayuda HTML compilada
.dbc
Base de datos
.dbf
Tabla
.dbg
Configuración de depurador
.dct
Memo de base de datos
.dcx
Índice de base de datos
.dll
Biblioteca de vínculos dinámicos de Windows
.err
Error de compilación
.esl
Biblioteca de compatibilidad de Visual FoxPro
.exe
Programa ejecutable
.fky
Macro
.fll
Biblioteca de vínculos dinámicos de FoxPro
.fmt
Archivo de formato
.fpt
Memo de tabla
.frt
Memo de informe
.frx
Informe
.fxp
Programa compilado
.h
Archivo de encabezado (para incluir en un programa de Visual FoxPro o C/C++)
.hlp
WinHelp
.htm
HTML
.idx
Índice, índice compacto
.lbt
Memo de etiqueta
.lbx
Label
.log
Registro de trayecto
.lst
Lista del Asistente para documentación
.mem
Variables guardadas
.mnt
Memo de menú
.mnx
Menú
.mpr
Programa de menú generado
.mpx
Programa de menú compilado
.ocx
control ActiveX
.pjt
Memo de proyecto
.pjx
Proyecto
.prg
Programa
.qpr
Programa de consulta generado
.qpx
Programa de consulta compilado
.sct
Memo de formulario
.scx
Formulario
.spr
Programa de pantalla generado (sólo en versiones anteriores de FoxPro)
.spx
Programa de pantalla compilado (sólo versiones anteriores de FoxPro)
.tbk
Copia de seguridad de memo
.txt
Texto
.vct
Memo de biblioteca de clases visuales
.vcx
Biblioteca de clases visuales
.vue
Presentación de FoxPro 2.x
.win
Archivo de ventana