martes, 1 de marzo de 2011

Curso básico de base de datos SQL

Curso básico de bases de datos SQL y normalización

Comenzamos con las formas normales, que son reglas a utilizar para organizar la estructura de nuestra base de datos, y no terminar con una enorme tabla con 50 campos.
Si ya contamos con nuestra lista de tablas y campos,debemos verificar que se cumplan al menos 4 formas normales y con ello evitar duplicidad y redundancia de la información. Así como contar con relaciones confiables entre nuestras tablas.
Para realizar nuestras prácticas y ejecutar comandos,podremos descargar una imagen de CDRom con el servidor sql ya instalado,configurado, y listo para practicar, haciendo click en este enlace.
FORMAS NORMALES

Primera forma normal (1NF). La primera forma normal (1NF) otorga reglas muy básicas para la organización de una base de datos:
  • Eliminar columnas duplicadas de la misma tabla.
  • Crear tablas separadas para cada grupo de datos relacionados e identificar cada fila con una columna o conjunto de columnas únicas (La llave primaria).
Segunda forma normal (2NF). La segunda forma normal (2NF) nos trae el concepto de remover datos duplicados:

  • Realice todos los requisitos de la primera forma normal
  • Elimine los subconjuntos de datos que se aplican a multiples filas de una tabla y ubiquelas en tablas separadas.
  • Establezca relaciones entre esas nuevas tablas y sus predecesores a través del uso de llaves foráneas.
Tercera forma normal (3NF). La tercera forma normal (3NF) es un gran paso donde:
  • Se encuentran todos los requisitos de la segunda forma normal.
  • Se eliminan columnas que no dependen directamente de la llave primaria.
Cuarta forma normal (4NF). Finalmente, la cuarta forma normal (4NF) tiene un requisito adicional:
  • Cumplir con todos los requisitos de la tercera forma normal.
  • Una relación esta en 4NF si no tiene dependencias de varios valores
Recuerde,estas guías de normalización son acumuladas.Para que una base de datos este en 2NF, debe primero cumplir todos los criterios de una base de datos en 1NF.


Para la práctica de los comandos sql,utilizaremos el CDRom de arranque de GuslyLive. Donde tendremos preinstalado el servidor SQL Firebird, que es un motor robusto,gratuito y open source disponible para las plataformas Linux,Windows,OSX y Solaris.
Solo encendemos la computadora e introducimos el disco,seleccionando el modo de arranque desde el cdrom.Al ver la pantalla de inicio presionamos enter sobre la primera opción "Live",para entrar al sistema:


         Al ingresar al sistema, lo preparamos haciendo doble click sobre el ícono "Bienvenida".

         Que nos mostrará un diálogo donde presionamos el botón del centro con la leyenda "configurar",nos abrirá una ventana que nos pregunta si deseamos iniciar el servidor de base de datos, le decimos "yes" moviendo el cursor presionando la flecha izquierda, y presionando la tecla enter. También nos preguntará por la contraseña del servidor, le escribimos "masterkey" y presionamos la tecla enter:

Base de datos SQL: Firebird versión 2.1 
usuario: sysdba 
contraseña: masterkey

         Luego entramos a la aplicación "FlameRobin" ubicada en el menú principal,grupo "programming"


         Aquí desplegamos la lista "LocalHost" (click en la flecha a la izquierda de Localhost) y hacemos doble click sobre el menú "empleados",para abrir la base de datos. Si obtenemos un error en este punto, repetimos la configuración y nos aseguramos de iniciar el servidor firebird, y escribir en minúsculas la contraseña "masterkey".

         Finalmente,presionamos el botón derecho sobre la lista "empleados" y presionamos la opción "Run a Query",nos abrirá la ventana para ejecutar comandos SQL sobre nuestra base de datos de ejemplo. 

         Para aplicar los cambios ejecute primero el comando con el boton "Execute statement" y luego aplique la transacción en el botón de "commit transaction".


Lenguaje DDL (Lenguaje de definición de datos)

sintaxis:

<tipo> =
  {SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION}
  | {(DATE | TIME | TIMESTAMP}
  | {DECIMAL | NUMERIC} [(precision [, scale])]
  | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(int)]
  | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)]

<columna>= <nombre><tipo>[not null][primary key];


Crear una tabla


CREATE TABLE <tabla> (<columna>[, <columna> ]);



ej. create table clientes (id_clie integer not null primary key, nombre varchar(120),appat varchar(60),apmat varchar(60))


Modificar la estructura de una tabla existente


ALTER TABLE <tabla> <operacion> [, <operacion> ...];

<operacion> = {ADD <columna>
  | ALTER [COLUMN] column_name <cambios>
  | DROP columna}

<cambios> = {TO nuevo_nombre
  | TYPE nuevo_tipo}



ej. alter table clientes add curp varchar(20);
alter table clientes alter nombre type varchar(200);


Eliminar una tabla


DROP TABLE tabla;



ej. drop table alumnos;


Lenguaje DML (Lenguaje de manipulación de datos)


Insertar registros a una tabla


INSERT  INTO <tabla> [(columna [, columna ...])]
  {VALUES (<valor> [, <valor> ...]) | <expresion select>};



ej. insert into clientes (id_clie, nombre ,appat ) values (1,'mickey','mouse');
insert into clientes (id_clie, nombre ,appat ) select id,nombre,apellido from alumnos;


Actualizar registros en una tabla


UPDATE  tabla SET columna = <valor> [, columna = <valor> ...] [WHERE <filtro> ];



ej. update clientes set curp='xxxxxxxxxxx' where id_clie=1;


Eliminar registros


DELETE FROM tabla    {[WHERE <search_condition>] };



ej. delete from clientes;
delete from clientes where id_clie=1;


Solicitar un conjunto de registros


SELECT [DISTINCT] {<lista_columnas> | *} FROM <lista_tablas>
[WHERE <filtro>]

<filtro>=[not] <campo> <operador><valor>
<operador>= =|>|<|<>|s null|is not null|between
<valor>=<campo>|<constante>|<constante> and <constante>

ej. select * from clientes;
select id_clie,nombre from clientes where id_clie between 1 and 10;