Wednesday, April 11, 2012

Cómo implementar una base De datos: 5to paso

Habrán filas en nuestras tablas que ya no se requieran más. Como quinto paso, emplearemos la sentencia DELETE.

1. Delete Simple

Sin especificar una condición, eliminaremos todas las filas de una tabla sin eliminar la tabla

DELETE FROM persona

2. Delete con Condición

Podemos eliminar las filas de una tabla sólo aquellas que cumplan una condición

DELETE FROM presona WHERE fec_nac > '1985/01/01'

Como en todo, también podemos agregarle una consulta anidada el WHERE. Todo es cuestión de creatividad y basado en conocimiento. Nuestro delete puede convertir de algo sencillo a algo muy complejo.

Tuesday, April 10, 2012

Cómo implementar una base De datos: 4to paso

Después de haber hechos los INSERT INTO, es probable que los datos cambien con el tiempo, por tanto, se recurre a la sentencia UPDATE. Esta sentencia llega a ser nuestro cuarto paso.

La sentencia UPDATE puede ser desde lo más sencillo hasta lo más complejo.

1. Update Simple

UPDATE persona
SET fec_nac= '1985/08/20'

En un update simple, actualizamos TODOS los registros de la tabla

2. Update con Condición

UPDATE persona
SET fec_nac= '1985/02/23'
WHERE id=1

En un update con condición, actualizamos únicamente los registros que cumplen esa condición. En el WHERE podemos agregar una condición simple o compleja a través de consultas anidadas. (un SELECT)

3. Update con CASE

Podemos actualizar una tabla de base de datos de acuerdo a distintos casos. Por ejemplo, queremos ponerle un descuento a un producto pero esto lo queremos hacer de acuerdo al precio del producto.

UPDATE producto
SET descuento= CASE
WHEN (precio < 100) THEN precio*0.1
WHEN (precio <=100 AND precio <500) THEN precio*0.2
ELSE descuento=precio*0.3 END

Para utilizar la cláusula CASE, hay dos maneras de hacerlo:

CASE
 WHEN condición THEN resultado_1
 ELSE resultado_2
 END
 CASE la expresión
 WHEN la condición THEN resultado_1
 ELSE resultado_2
 END

La cláusula ELSE se puede omitir pero el resultado será NULL.

Monday, April 9, 2012

Cómo implementar una base De datos: 3er paso

Una vez creada la base de datos, las tablas, es hora de poblarla. Tercer paso: INSERT INTO.

A la hora de realizar un INSERT INTO podemos hacerlos de 3 maneras.

Considérese la siguiente tabla para los ejemplos:

CREATE TABLE persona(
 id int identity(1,1) primary key,
 nombre varchar(20) not null,
 ap_paterno varchar(20) not null,
 ap_materno varchar(20) null,
 fec_nac datetime null,
 direccion varchar(30) not null
)

1. Sin especificar las columnas a insertar (por defecto, todas).

INSERT INTO persona VALUES ('lizzy', 'mendivil', null, null, 'california st #159')

Cuando no especificamos las columnas, éstas deben coincidir con el tipo de datos y la cantidad de columnas que tiene nuestra tabla. Resulta en desventaja ya que si existen valores nulos posibles, éstos debemos registrarlo también llenándolo con "null" (tal como se muestra en el ejemplo) y además si nos equivocamos y no hacemos coincidir con el tipo de datos, la ejecución de la sentencia resultará en error.

Otra desventaja es que dejamos que el compilador trabaje más analizando que los valores y las columnas correspondan.

2. Especificando las columnas a insertar.

INSERT INTO persona (nombre, ap_paterno, direccion) VALUES ('benjamin', 'villarroel', 'florida st #748')

Nótese que después de escribir el nombre de la tabla, entre paréntesis espcificamos las columnas que vamos a insertar con los valores.

3. A partir de un SELECT.

INSERT INTO persona (nombre, ap_paterno, direccion) SELECT nombre, ap_paterno, direccion FROM cliente

Solo debemos asegurarnos que el tipo de datos de la tabla de la cual queremos extraer los datos coincida con el tipo de datos de las columnas de la tabla a la cual queremos insertar los valores. El tipo de datos y el número de columnas.

Nótese que se reemplaza la palabra clave VALUES con la instrucción SELECT.

Nota.- Cuando realizamos un INSERT a una tabla la cual contiene referencia a otra (FOREIGN KEY), debemos asegurarnos que el valor de esa columna PRIMERO exista en la tabla a la cual pertenece, esto es la Integridad de Datos.

Friday, April 6, 2012

Cómo implementar una base De datos: 2do paso

Como segundo paso, viene la creación de las tablas de la base de datos: "CREATE TABLE".

Es importante resaltar que la creación de las tablas se debe hacer en orden. Más que todo en las relaciones 1 a N. Por ejemplo, 1 cliente realiza N ventas. No podemos crear primero la tabla "ventas" sin haber creado antes la de "cliente" Por tanto, las tablas que no tienen llave foránea deben crearse primero.

La sentencia CREATE TABLE con todos sus atributos sería como sigue:

CREATE TABLE nombre_table
(
 campo1 tipo_dato [NULL/NOT NULL] | [CHECK (expresion_logica)] | [DEFAULT expresion_constante] | [aqui podemos agregar si va a ser primary o foreign key],
 ...
 PRIMARY KEY (campo_llave_pk),
 FOREIGN KEY (campo_llave_fk) REFERENCES nombre_tabla2 (campo_llave_pk_tabla2)
)
Ejemplo. Creación de las tablas para una base de datos de Ventas (sencilla para fines académicos)

CREATE TABLE cliente(
 id int identity(1,1) primary key, --cuando es llave primaria, automáticamente es NOT NULL
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, --si no se especifica que sea NULL, el DBMS lo pone por defecto.
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F')),
 limite_credito decimal(10,2) not null
)

CREATE TABLE vendedor(
 id int identity(1,1) primary key,
 nombre varchar(20) not null,
 ap_pat varchar(20) not null,
 ap_mat varchar(20) null, 
 direccion varchar(30) null,
 sexo char(1) CHECK (sexo in('M','F'))
)

CREATE TABLE producto(
 id int identity(1,1) primary key,
 descripcion varchar(50) not null,
 precio decimal(10,2) not null,
 stock int not null
)

CREATE TABLE ventas(
 id int identity(1,1) primary key,
 fecha datetime not null,
 descuento decimal(10,2) default 0,
 id_cliente int foreign key references cliente(id),
 id_vendedor int foreign key references vendedor(id)
)

CREATE TABLE ventas_detalle(
 id int identity(1,1) primary key,
 cantidad int check (cantidad >0),
 id_producto int foreign key references producto(id),
 id_venta int foreign key references ventas(id)
)

Una vez creadas las tablas, podría darse el caso de que querramos eliminar alguna o modificarla.

Para eliminar una tabla: DROP TABLE

Practicamente, podemos darle un DROP a todo lo que le hayamos dado un CREATE (table, trigger, view, etc.)

Ejemplo:

DROP TABLE venta_detalle

Para modificar una tabla: ALTER TABLE

Podemos agregar una nueva columna a una tabla, eliminar una columna existente de la tabla o modificar una collumna existente de tabla.

1. Añadir una definición de la columna de una tabla. Puede crearse con valores nulos o valores.

ALTER TABLE nombre_tabla ADD nombre_columna_nueva tipo_dato [NULL] | [CONSTRAINT nombre_nueva_restriccion CHECK/DEFAULT]

2. Eliminar una columna de la tabla. Pero antes de su eliminación deben ser eliminados por ALTER TABLE todas las restricciones que estén definidas sobre esta solumna.

ALTER TABLE nombre_table DROP COLUMN nombre_columna

3. Eliminar un constraint.

ALTER TABLE nombre_table DROP CONSTRAINT nombre_del_constraint

4. Crear una llave primaria. En el caso de que esta tabla ya contenga datos, las columnas que escojamos para la llave primaria deben ser de valor únicos por cada fila.

ALTER TABLE nombre_table ADD PRIMARY KEY (key1, key2...)

5. Crear una llave foránea. La columna a definir como llave foránea debe contener previamente valores que corresponden a la llave primaria de la otra tabla.

ALTER TABLE nombre_table ADD FOREIGN KEY (key)

6. Habilitar o inhabilitar los trigger en una tabla.

ALTER TABLE nombre_table ENABLE TRIGGER nombre_trigger

ALTER TABLE nombre_table DISABLE TRIGGER nombre_trigger

Thursday, April 5, 2012

Cómo implementar una base De datos: 1er paso

A lo largo del ciclo de la implementación de una base de datos relacional, entran en juego 3 tipos de lenguajes los cuales el SQL (Structure Query Language - Lenguaje de consulta estructurado) los clasifica como sigue a continuación:

** Lenguaje de Definición de Datos (DDL, Data Definition Language)
** Lenguaje de Manipulación de Datos (DML, Data Management Language)
** Lenguaje de Control de Datos (DCL, Data Control Language)

Para llevar a cabo el primer paso a la hora de implementar una base de datos, utilizaremos lo que es el DDL.

DDL
Grupo de sentencias del SQL que soportar la definición y declaración de los objetos de la base de datos tales como la base de datos misma, las tablas, las vistas, los índices, los procedimientos almacenados, las funciones, los triggers, etc.

Los comandos son:

CREATE
ALTER
DROP

Ok. El primer paso entonces es definir en el disco duro el área física que contendrá las tablas dela base de datos.

El siguiente pedazo de código se encargará de ello:

CREATE DATABASE ventas ON PRIMARY(
 NAME = ventas_data, --Nombre de la BD
 FILENAME='c:\ventas.mdf', --Dirección donde se crea la BD
 SIZE=5MB, --Tamaño de la BD
 MAXSIZE=10MB, --Tamaño máximo de la BD
 FILEGROWTH=1MB --Crecimiento de la BD
)
LOG ON(
 NAME=ventas_log,
 FILENAME='c:\ventas.ldf',
 SIZE=5MB,
 MAXSIZE=10MB,
 FILEGROWTH=1MB
)

La primer sentencia crea un archivo principal de extensión mdf de tamaño inicial de 5 MB, cuando este espacio se agote, 5MB se expandirá en 1MB más para tener espacio libre y poder meter más registros o tablas, y cuando nuevamente se agote, se expandirá nuevamente en 1 MB y así sucesivamente cuando haya alcanzado el máximo de 10MB.

Y lo mismo ocurrirá con el archivo de registro de transacciones (.ldf)

Cuando nosotros no lo especificamos manualmente, el DBMS lo hace. Por ejemplo, al ejecutar solo la sentencia CREATE DATABASE ventas, el DBMS (en este caso, SQL SERVER) hizo lo siguiente: (selecciona la base de datos que acabas de crear, clic derecho y propiedades, te levantará la siguiente ventana)