martes, 27 de marzo de 2012

Unidad 2


Tema 1. Sistema de Gestión de las Bases de Datos (SGBD)



Se trata de un sistema de software que facilita la creación y mantenimiento de bases de datos, denominado también DBMS (por sus siglas en inglés Database Management System), permite almacenar, modificar y extraer información de una base de datos a través de numerosas rutinas de software que indican alguna tarea específica.



Y tiene las siguientes funcionalidades:



v  Definir la base de datos: tipos de datos, estructuras y restricciones.



v  Construir o cargar la base de datos en un medio de almacenamiento secundario.



v  Manipulación de la base de datos: consultas, generación de reportes, inserción, eliminación y modificación de su contenido



v  Procesamiento concurrente de un conjunto de usuarios y programas, conservando los datos válidos y consistentes.



v  Protección y medidas de seguridad para prevenir accesos no autorizados.



v  Procesamiento “activo” para tomar acciones internas sobre los datos.



v  Presentación y visualización de los datos


Observa la siguiente figura donde se puede apreciar la forma de interacción con el usuario. El usuario hace una petición de alguna tarea mediante una aplicación informática, la cual se comunica entonces con el SMBD quien se encarga de procesar la consulta o manipulación de datos dependiendo de la petición del usuario, y accede a la definición de la base de datos y a su parte física para la recuperación y/o manipulación de los datos.



Los lenguajes del SGBD van a permitir al administrador:





ü  Especificar los datos que componen la BD,



ü  Su estructura,



ü  Las relaciones que existen entre ellos,



ü  Las reglas de integridad,



ü  Los controles de acceso,



ü  Las características de tipo físico y



ü  Las vistas externas de los usuarios.





Los lenguajes se clasifican en:



Lenguaje de definición de datos (LDD/DDL): Este es usado por el administrador y diseñadores para especificar el esquema conceptual de la Base de datos, así como esquemas externos, como las vistas de los usuarios y las estructuras de almacenamiento.



Lenguaje de manipulación de datos (LMD/DML): Se utiliza para recuperar y  manipular datos de la base en forma de consultas, inserciones, eliminaciones y actualizaciones de la BD por los usuarios.


MySQL hace uso de SQL[j1] , el cual, posee instrucciones de un LDD y LMD.



 Por ello estudiemos un poco más este lenguaje:



SQL Structured Query Language



Es un lenguaje usado para crear, manipular, examinar y administrar bases de datos relacionales y permite la comunicación con un DBMS



Características



- Permite la comunicación con bases de datos de diferentes proveedores de una manera uniforme ya que estos proveen su propia interfaz para conexión.



- Es un estándar de ANSI e ISO y fue hasta 1992 que se unificó, aunque sólo las funcionalidades básicas son uniformemente soportadas por los diversos DBMS’s.







 [j1] Structured Query Language

 
La instrucción generada en Leguaje SQL puede ser generada desde una aplicación escrita en un lenguaje de alto nivel, y luego es procesada mediante el SGBD para acceder a la base de datos física y generar un resultado, en el ejemplo se trata de una sentencia de recuperación de datos, por lo que estos se muestran.


Instrucciones para los lenguajes DDL y DML





DDL Instrucciones SQL para la Definición de Datos
DML Instrucciones SQL para la Manipulación de Datos
  • CREATE TABLE (PROCEDURE, INDEX, TRIGGER)
  • ALTER TABLE
  • DROP TABLE (PROCEDURE, INDEX)

Select
Insert
Update
Delete
COMMIT
ROLLBACK




Estudiaremos a continuación su estructura y utilización así como otros elementos que permiten la manipulación de la información almacenada en la Base de Datos.



1.1 Tablas, campos, llaves.

Ya se ha definido anteriormente lo que es una tabla, la que recordemos definimos como unidad básica de almacenamiento identificada con un nombre, almacenando datos en Registros (Filas) y Campos (Columnas). También recordemos que una clave o llave candidata, es parte de una relación, y esta representa un atributo que identifica unívocamente a cada tupla o registro de la  relación.


Veamos entonces como se manipulan estos elementos mediante la definición de datos haciendo uso de SQL.


a)    DDL


Como ya se explicó, SQL provee instrucciones para la definición de datos que se muestran en la siguiente tabla:


Instrucción
Descripción
Sintaxis
CREATE

Se utiliza para crear una tabla, sus campos, tipo de dato y longitud de dichos campos, así como definir cuales de esos campos serán llaves primarias o foráneas
Create Table nombre_tabla
(
nombre_campo_1 tipo_1
nombre_campo_2 tipo_2
nombre_campo_n tipo_n
Key(campo_x,...)
)
ALTER

Cambiar la estructura de una tabla, por ejemplo: agregar, eliminar cambiar el nombre o el tipo de datos de una columna,
ALTER TABLE "nombre_tabla"
[modificar especificación]

Donde [modificar especificación] puede ser:
- Agregar una columna: ADD “columna 1” “tipos de datos para columna 1”
- Eliminar una columna: DROP “columna 1”
- Cambiar el nombre de una columna: CHANGE “nombre antiguo de la columna” “nuevo nombre de la columna” “tipos de datos para la nueva columna".
- Cambiar el tipo de datos para una columna: MODIFY “columna 1” “nuevo tipo de datos”
DROP

En ocasiones es necesario eliminar una tabla en la base de datos por alguna razón y SQL nos permite hacerlo, ya que podemos utilizar la instrucción DROP TABLE.

DROP TABLE "nombre_tabla"




Estudiemos los siguientes ejemplos:


  • CREATE
Create Table MCliente
(
rfc_cli VARCHAR(14) NOT NULL,
nom_cli VARCHAR(30),
PRIMARY KEY(rfc_cli)
)



Veamos como ejemplo la creación de la tabla  MCliente que hemos empleado en temas anteriores:

En este caso creamos los campos rfc_cli, nom_cli los cuales son considerados de tipo varchar de una longitud especificada por el número entre paréntesis. Además para evitar inconsistencia en la base de datos, es necesario requerir que los campos que van a ser definidos como índices no puedan ser nulos (NOT NULL).  Finalmente, definimos la clave primaria precediendo el campo de la palabra KEY o INDEX.

Del mismo modo podríamos crear una tabla de productos con una sentencia como ésta:


Create Table MProducto
(
id_producto INT(4) NOT NULL AUTO_INCREMENT,
titulo VARCHAR(50),
autor VARCHAR(25),
editorial VARCHAR(25),
precio REAL,
PRIMARY KEY(id_producto)
)



Para id_producto se puede requerir que se incremente automáticamente en una unidad cada vez que se ingrese un nuevo registro para, de esta forma, automatizar su creación, por ello se usa la instrucción AUTO_INCREMENT.


Puede verse en este ejemplo también que los campos alfanuméricos son introducidos de la misma forma que los numéricos. A continuación mostraremos algunos de los tipos de campos que pueden ser empleados en la creación de tablas:



  • ALTER

Algunos ejemplos son:


Si deseamos agregar una columna denominada “Ciudad” a esta tabla, la sentencia SQL sería:

ALTER table MCliente add Ciudad varchar(20)

Si deseamos renombrar  el campo “nom_cli" a “nombre_cli”:
ALTER table MCliente change nom_cli nombre_cli varchar(30)

Cambiar el tipo de datos para “nombre_cli” a 60 caracteres:
ALTER table MCliente modify nombre_cli varchar(60)



  • DROP
Si deseamos eliminar una tabla denominada MCliente que creamos anteriormente, la instrucción sería:

DROP TABLE MCliente

b) DML


En lo que se refiere al lenguaje de manipulación de datos, SQL utiliza las  instrucciones que se describen en la tabla siguiente:


Instrucción
Descripción
Sintaxis
INSERT

Permite insertar nuevos registros en tablas de Base de Datos

insert into tabla (campo_1,…,campo_n) values(“valor_1”,…,”valor_n”);
DELETE

Permite eliminar registros de la Base de Datos
delete from Tabla

delete from Tabla where campo = “valor"

UPDATE

Permite actualizar campos de los registros de la Base de Datos

Update Tabla set campo_1 = valor_1

Update Empleado set campo_1 = valor_1 Where campo_2 = valor_2
SELECT
Recupera información de la Base de Datos
Select campos from Tabla

Select campos from Tabla where condicion

Como ya has visto anteriormente,  el LMD se utiliza para recuperar y  manipular datos de la base en forma de consultas, inserciones, eliminaciones y actualizaciones de la Base de Datos por los usuarios.

Introduzcamos la siguiente clasificación
 

Procedurales, en los que el usuario será normalmente un programador y especifica las operaciones de acceso a los datos llamando a los procedimientos necesarios mediante un lenguaje de alto nivel.



No procedurales son declarativos y mediante ellos se pueden introducir interactivamente sentencias sencillas desde una terminal, por ejemplo SQL aunque también pueden ir integradas en un lenguaje de programación de alto nivel.



Estudiemos entonces las sentencias SQL que nos permiten manipular los datos.



            3.2 Funciones de manipulación de datos



Como mencionamos anteriormente, sus principales funciones son la Inserción, Actualización, Eliminación y Recuperación de la información y hemos visto mediante álgebra relacional cómo obtener información de las relaciones entre las tablas. Pero para empezar, ¿Cómo se ingresan estas filas de datos en estas tablas para que podamos trabajar con ellas? Esto es lo que se tratará en este tema mediante instrucciones SQL. Presta mucha atención:



a)    Inserción



En SQL, existen dos formas para INSERTAR datos en una tabla:

Insertando una fila a la vez

Insertar filas múltiples a la vez.



La sintaxis para insertar datos en una tabla mediante una fila por vez es la siguiente:



INSERT INTO "nombre_tabla" ("columna1", "columna2", ...)
VALUES ("valor1", "valor2", ...)



Suponiendo que tenemos una tabla llamada MArtista con la siguiente estructura:



MArtista(id_art#, nom_art, sex_art,eda_art)



y deseamos insertar una fila adicional en la tabla que represente los datos de un artista llamado Juan Rivas de sexo masculino de 23 años, utilizaremos la siguiente sentencia SQL:



INSERT INTO MArtista(id_art, nom_art, sex_art,eda_art)
VALUES (200,”Juan Rivas”,”Masculino”,23)



Para insertar múltiples tuplas en una tabla, se especifican los datos que deseamos insertar en la tabla y esto se logra utilizando información de otra tabla.



La sintaxis es la siguiente:



INSERT INTO "tabla1" ("columna1", "columna2", ...)
SELECT "columna3", "columna4", ...
FROM "tabla2"



Esta es la forma más simple de la instrucción INSERT pues puede contener además cláusulas WHERE, GROUP BY, y HAVING, así como también uniones y alias.



Entonces por ejemplo, si deseamos tener una tabla MDuracionPrograma que recolecte la información de identificador de programa y duración del programa llamado “El Recuerdo” se ingresará:



INSERT INTO MDuracionPrograma(id_pro,dur_pro)
SELECT id_pro, dur_pro
FROM MPrograma
WHERE nom_pro = “El Recuerdo”



b)   Actualización



Una vez que existen datos en la tabla, podríamos tener la necesidad de modificarlos,  para ello, se utiliza la instrucción UPDATE cuya sintaxis es:



UPDATE "nombre_tabla"
SET "columna_1" = [nuevo valor]
WHERE {condición}



Por ejemplo, digamos que actualmente tenemos la tabla:



MArtista



id_art
nom_art
sex_art
eda_art
1
Juan Rivas
Masculino
23
2
Erik Huerta
Masculino
33
3
Vicky
Masculino
25



Y nos damos cuenta que un registro ha sido llenado incorrectamente, en este caso el sexo de Vicky es Femenino, se actualizará mediante SQL de la siguiente forma.



UPDATE MArtista
SET sex_art = “Femenino”
WHERE id_art = 3


La tabla resultante sería



MArtista

id_art
nom_art
sex_art
eda_art
1
Juan Rivas
Masculino
23
2
Erik Huerta
Masculino
33
3
Vicky
Femenino
25



En este caso, sólo una fila satisfacía la condición en la cláusula WHERE, aunque si existen múltiples filas que satisfacen la condición, todas ellas se actualizarán.



c) Eliminación



En ocasiones la lógica de negocio requerirá que se eliminen los registros de una tabla. Para ello, se utiliza la instrucción DELETE FROM cuya sintaxis es:



DELETE FROM "nombre_tabla"
WHERE {condición}



Para ejemplificar retomemos la tabla anteriormente vista:



MArtista

id_art
nom_art
sex_art
eda_art
1
Juan Rivas
Masculino
23
2
Erik Huerta
Masculino
33
3
Vicky
Femenino
25



Supongamos que ya no se desea tener ningún artista de sexo masculino en esta tabla, entonces ingresaremos la siguiente instrucción SQL:



DELETE FROM MArtista
WHERE sex_art = "Masculino"



Ahora el contenido de la tabla sería:

MArtista

id_art
nom_art
sex_art
Eda_art
3
Vicky
Femenino
25



d) Recuperación



Cuando deseemos recuperar información de la base de datos, se hace uso de  lo que se conoce como consultas, y en álgebra relacional hemos visto las diferentes formas de obtener dicha información, implementémoslo ahora mediante SQL, para ello se utiliza la sentencia SELECT, la cual nos permite consultar los datos almacenados en una tabla de la base de datos.



Su sintaxis es:


SELECT [ALL | DISTINCT ]
             <nombre_campo> [{,<nombre_campo>}]
FROM <nombre_tabla>|<nombre_vista>
        [{,<nombre_tabla>|<nombre_vista>}]
[WHERE <condicion> [{ AND|OR <condicion>}]]
[GROUP BY <nombre_campo> [{,<nombre_campo >}]]
[HAVING <condicion>[{ AND|OR <condicion>}]]
[ORDER BY <nombre_campo>|<indice_campo> [ASC | DESC]
                [{,<nombre_campo>|<indice_campo> [ASC | DESC ]}]]





SELECT Indica que la sentencia de SQL que queremos ejecutar es de consulta (selección). 





Cómo puedes ver, la sentencia SELECT va acompañada de otras instrucciones denominadas cláusulas que pueden modificar el resultado de la consulta. A continuación te describimos la función de cada cláusula:



 Cláusula
Significado
  ALL
Seleccionar todos los valores que cumplan la condición.
DISTINCT 
Seleccionar sólo los valores distintos.
FROM
Indica la tabla (o tablas) desde la que queremos recuperar los datos.
WHERE
Especifica una condición que debe cumplirse para que los registros sean devueltos por la consulta, admite los operadores lógicos AND y OR.
GROUP BY
Especifica la agrupación que se da a los datos.
HAVING
Especifica una condición que debe cumplirse para los datos, debe aplicarse siempre junto a GROUP BY y la condición debe estar referida a los campos contenidos en ella.
ORDER BY
Presenta el resultado ordenado por las columnas indicadas. El orden puede expresarse con ASC (orden ascendente) y DESC (orden descendente).



Como ejemplo, imaginemos que se tiene la tabla:



MArtista



id_art
nom_art
sex_art
eda_art
1
Juan Rivas
Masculino
23
2
Erik Huerta
Masculino
33
3
Vicky
Femenino
25





Y queremos obtener los nombres de los artistas de sexo masculino, nuestra sentencia SELECT sería:



SELECT nom_art FROM MArtista WHERE sex_art = “Masculino”



Donde se nos devolverán las tuplas:



id_art
nom_art
sex_art
eda_art
1
Juan Rivas
Masculino
23
2
Erik Huerta
Masculino
33

No hay comentarios:

Publicar un comentario