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.
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.
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
|
|
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
- Eliminar
una columna: DROP “columna
- 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
|
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:
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.
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 ]}]]
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", ...)
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)
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"
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”
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}
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
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}
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"
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