Está en la página 1de 97

GESTIÓN DE BASE DE DATOS

Unidad 3: Diseño físico de bases datos


ÍNDICE


El Sistema Gestor de Base de Datos

Instalación de un SGBD

Herramientas gráficas de SGBD

El intérprete de comandos

El lenguaje de definición de datos (DDL)

2
Punto de partida

Ya hemos aprendido a diseñar un diagrama entidad-
relación a partir de una descripción del problema o
SRS.
Diagrama E-R extendido Aplicaciones
de diseño

Documento
SRS

3
Punto de partida

Ya sabemos pasar del modelo entidad-relación al
modelo relacional para saber qué tablas necesitamos.

Incluso sabemos normalizar estas tablas hasta la
FNBC


¿Qué nos queda ahora? Pasar esta definición a un
Sistema Gestor de Base de Datos

Pero… ¿Cuántos hay en el mercado?
Punto de partida
https://db-engines.com/en/ranking

¿Cuál elijo para mi BD?


¿SQL vs NOSQL?
¿Son equivalentes?

5
Punto de partida

Para comparar, vamos a centrarnos en los más utilizadas:

¿Qué es eso de la escalabilidad horizontal o vertical?


El sistema gestor de base de datos

Antes de ver las características y decidirnos por
uno, hay que recordar una serie de conceptos:

Base de datos: Colección de información perteneciente a un
mismo contexto (o problema), que está almacenada de forma
organizada en ficheros

SGBD:Conjunto de herramientas que facilitan la consulta,
uso y actualización de una base de datos

¿Sólo se usa el SGBD a través de su terminal? NO, también
acceden las aplicaciones con los ODBC o con interfaces web
como PHPMyAdmin.

¿Cómo funciona el SGBD por dentro?

7
El sistema gestor de base de datos

¿Qué hay que especificar por cada tabla?
– Tipo de dato: Formato del dato (número, fecha, texto,...)
– Campo: Nombre que identifica cada columna y que es único
– Campo clave: Campo que identifica unívocamente a cada registro. Puede
estar formado por varios campos pero al menos tiene uno.
– Tabla: Nombre que organiza los datos almacenados y que es único.

8
El sistema gestor de base de datos

Teniendo en cuenta las 12 leyes de Codd, todo SGBD tiene que
garantizar para cada tabla de la BD:

Independencia lógica: La percepción que cada aplicación tiene
de la estructura de la BD debe permanecer inmutable frente a
alteraciones a nivel lógico en dicha estructura. La aplicación
puede dejar ver sólo lo que el usuario debe ver, no toda la BD.

Independencia física: El almacenamiento físico de los datos
debe ser independiente del diseño lógico de la BD a todos los
niveles. Por ejemplo, reubicar archivos en diferentes medios de
almacenamiento no afectará al modo en el que se accede a ellos
desde la aplicación.

SQL(Structured Query Language): Es un lenguaje muy
sencillo mediante el cuál el usuario realiza preguntas al
servidor, contestando este a las demandas del usuario

9
El sistema gestor de base de datos

Tipos de usuarios que hacen uso de las bases de datos:

Administrador: Trabajan con el nivel físico de
almacenamiento de la BD y su gestión. Hay dos tipos:
– Administradores del sistema: Instalación, configuración,
control de acceso, seguridad, monitorización y optimización.
– Administradores de la base de datos: Diseño físico,
implementación y mantenimiento de la base de datos.


Diseñador: Realizan el diseño lógico de la base de datos.
Por lo que tienen que identifican los datos, las relaciones
entre ellos, las restricciones y debe tener conocimiento
sobre los datos de la empresa y sus reglas de negocio.

10
El sistema gestor de base de datos

Tipos de usuarios que hacen uso de las bases de datos:

Programadores: Implementan aplicaciones, rutinas almacenadas
o disparadores que interactúan directamente con la base de datos
y sirven de interfaz para los usuarios finales.

Usuarios finales / terminales: Sólo interactúan en el nivel externo
a través de vistas SQL o desde la aplicación. De hecho, no tienen
conocimiento sobre el funcionamiento ni sobre la organización
interna de la base de datos o incluso no tener conocimientos
sobre informática.


Sus roles determinan los privilegios o acciones y el DBA tiene
que gestionarlo para evitar problemas de seguridad.

Aunque una persona tenga varios roles, debe hacer las
acciones de acuerdo al rol que le corresponda.
11
El sistema gestor de base de datos

Objetivos de un SGBD

Diseño y utilización orientada al usuario: Los datos y aplicaciones deben
ser accesibles a los usuarios de la manera más amigable y segura.

Centralización: Los datos deben gestionarse de forma centralizada e
independiente de las aplicaciones. Da igual si se trata de BD distribuida.

Evitar redundancia y gestionar la concurrencia: Hay que evitar repetir
información y fallos en el acceso concurrente

Mantener la integridad semántica de los datos: La información
almacenada en la BD debe corresponderse con la realidad que representa.
Problema: ¿Y si se meten datos mal o se borran? Hay que utilizar reglas de
integridad o de negocio.

Mantener seguridad: Hay un sistema de roles para el acceso a la
información de la BD

Mantener la fiabilidad del sistema: Hay que tener en cuenta aspectos
físicos como el almacenamiento y copias de seguridad para evitar la pérdida
o corrupción de la información.
12
El sistema gestor de base de datos

Componentes de un SGBD:

Lenguaje de datos

Diccionario de datos

Herramientas de administración

Optimizador de consultas

Gestor de transacciones

Planificador

Copias de seguridad

Otros
13
El sistema gestor de base de datos

Componentes de un SGBD:

Lenguaje de datos: Todo sistema gestor debe disponer de
lenguajes para la manipulación de datos, tanto a nivel de acceso y
modificación, como a nivel de control y seguridad.
➢ Aunque el lenguaje SQL engloba todos, los más destacados son:

DDL (Lenguaje de definición de datos): Permite crear, eliminar y
modificar las estructuras de la base de datos (tablas, índices,
relaciones y restricciones) Esta unidad se centrará en este

DCL (Lenguaje de control de datos): Permite especificar los
permisos sobre los objetos de la base de datos así como la creación y
eliminación de usuarios.

DML (Lenguaje de manipulación de datos): Permite la inserción,
actualización, eliminación y consulta de los datos en las tablas.

No hay que olvidar que SQL es un lenguaje que aparece en 1979 y que es
estándar de BD desde 1986, donde la actual es la versión SQL2011.

14
El sistema gestor de base de datos

Componentes de un SGBD:

Lenguaje de datos: (continuación)
➢ Cuando se quiere utilizar cualquier tipo de lenguaje de programación, se
necesita una sintaxis para definir cómo construir sentencias en ese
lenguaje de programación. Para expresar la sintaxis se utiliza una
notación. Esta notación está compuesta por componentes léxicos o tokens
que pueden ser: palabras clave del lenguaje, definiciones de otros
elementos sintácticos más básicos, expresiones, variables, etc.
➢ En SQL no se distingue entre mayúsculas y minúsculas. Da lo mismo
como se escriba. Eso sí, el final de una instrucción o sentencia lo marca el
signo ‘;’.
➢ Las sentencias SQL (SELECT, INSERT, …) se pueden escribir en varias
líneas siempre que las palabras no sean partidas.
➢ Los comentarios en el código SQL pueden ser de 2 tipos:

15
El sistema gestor de base de datos

Componentes de un SGBD:

Lenguaje de datos: (continuación)
➢ Notación para explicar SQL en este curso y libros:

Palabras en mayúsculas: Para identificar las palabras reservadas del lenguaje. Por ejemplo
SELECT, DROP, CREATE son palabras reservadas, esto quiere decir que no pueden utilizarse
para nombrar objetos de la base de datos porque tienen una misión específica.

Palabras en minúscula. Se utiliza para realizar descripciones de sintaxis más en detalle.

Corchetes. Un elemento sintáctico entre corchetes indica opcionalidad. Es decir, lo que está
encerrado entre corchetes se puede incorporar a la sentencia o no, dependiendo de lo que el
programador quiera expresar. Por ejemplo, en la definición CREATE [TEMPORARY]
TABLE, se puede indicar de forma opcional el token TEMPORARY para crear una tabla
temporal, que solo durará en memoria mientras el usuario permanezca conectado. Si varios
elementos van separados mediante el token pipe "|", se puede elegir uno de ellos.

Llaves. Indica alternativa obligatoria. Se debe elegir entre los elementos separados mediante
el token pipe "|". Por ejemplo, en la definición de sintaxis para crear una base de datos,
CREATE {DATABASE \SCHEMA}nombre-bd, hay que escribir uno de los dos token entre
llaves.

Puntos suspensivos. Significa repetición, es decir, el último elemento sintáctico puede
repetirse varias veces. Por ejemplo, para codificar una consulta se usa la definición SELECT
columna [,columna] ...FROM tabla.

Para contemplar todas las posibilidades puede aparecer un grafo de opciones.

16
El sistema gestor de base de datos

Componentes de un SGBD:
Ejemplo de uso con app

Lenguaje de datos: (continuación) externa o su consola nativa
El sistema gestor de base de datos

Componentes de un SGBD:

Diccionario de datos: El diccionario de datos
está compuesto por un conjunto de esquemas
que describen el contenido del SGBD,
incluyendo los distintos objetos y sus
propiedades:

Nombre, tipo y tamaño

Relaciones entre datos

Restricciones de integridad

Usuarios autorizados

Estadísticas de utilización ¿Por qué es importante el
diccionario de datos? (enlace)
18
El sistema gestor de base de datos


Componentes de un SGBD:

Diccionario de datos: ¿Qué es un objeto
en la base de datos?
➢ Tablas base y vistas
➢ Consultas
➢ Dominios y tipos definidos de datos
➢ Restricciones de tabla y dominio y aserciones
➢ Funciones y procedimientos almacenados
➢ Disparadores (triggers)

Veamos cómo se accede a esta información...
19
El sistema gestor de base de datos


Componentes de un SGBD:

Diccionario de datos: (ejemplos)


Reglas de nomenclatura en Oracle

20
El sistema gestor de base de datos


Componentes de un SGBD:

Diccionario de datos: (ejemplos)

Veamos el caso de MySQL tanto en web como terminal 21


Vídeo: Generar diccionario de datos en SQLDeveloper
El sistema gestor de base de datos

Componentes de un SGBD:

Herramientas de administración:
➢ Todo sistema gestor dispone de un conjunto de herramientas (algunas
integradas y otras de terceros) que permiten cubrir diferentes tareas:
➔ Seguridad
➔ Integridad
➔ Control de concurrencia
➔ Control de recuperación
➔ Gestión de diccionario de datos
➔ Programación de aplicaciones
➔ Importación y exportación de datos
➔ Distribución de datos
➔ Replicación
➔ Sincronización
➢ Estas tareas las desarrollará el administrador (DBA) de la base de datos

22
El sistema gestor de base de datos

Componentes de un SGBD:

Optimización de consultas:
➢ El lenguaje de manipulación de datos (DML) es
el que nos permite realizar operaciones sobre los
datos almacenados en la base de datos. A este
tipo de operaciones se las conoce como
consultas. Ej: Select, update, insert, delete

➢ El optimizador de consultas es el encargado de


determinar la estrategia más óptima para la
ejecución de dichas consultas.
23
El sistema gestor de base de datos

Componentes de un SGBD:

Gestor de transacciones:
➢ A un conjunto de operaciones relacionadas que se
ejecutan como una unidad se le conoce con el
nombre de transacción. O se ejecutan todas las
operaciones o no se ejecuta ninguna.

Planificador:
➢ El SGBD dispone de una herramienta que permite
programar y automatizar la ejecución de ciertas
tareas. Simplemente hay que especificar qué
queremos hacer y cuando y el planificador se
encarga de ejecutarlo.
24
El sistema gestor de base de datos


Componentes de un SGBD:

Otros: Generadores de formularios e informes

Suelen venir juntos en aplicaciones ofimáticas
pero en SGBD como Oracle suelen ser
aplicaciones externas. Ej: ERP y ACCESS

25
El sistema gestor de base de datos

Una vez analizadas las características de un SGBD.
¿Cómo elijo uno?

Premisa: Cualquier negocio o empresa que requiera
administrar sus datos de forma eficiente debe ser
capaz de acceder a toda la información que existe
en el SGBD. Por lo tanto, es de suma importancia el
que se haga la adecuada elección del SGBD, ya que
esto permitirá a la organización aprovechar su
información de una manera rápida, precisa y segura.

Veamos los elementos esenciales a considerar

26
El sistema gestor de base de datos

Facilidad de uso: Es fundamental garantizar que el SGBD sea
lo suficientemente intuitivo y tenga el soporte suficiente, ya
sea mediante documentación en línea o bien mediante archivos
de ayuda accesibles dentro del propio SGBD. Por ejemplo, su
operación debe ser fácil tanto para programadores, como para
cualquier personal de la organización con formación básica en
tecnologías e información.

Seguridad de datos: La seguridad de datos es un aspecto
adicional en la implementación particular de un SGBD. Toda
la información, debe tener un carácter de acceso muy
específico, en función de la propia naturaleza de los datos por
lo que debe estar almacenada de forma segura, protegida de
robo o pérdida. Por lo que se deben tener en cuenta tanto los
riesgos físicos como los riesgos derivados de errores humanos.
27
El sistema gestor de base de datos

Funcionalidad: Todos los módulos del SGBD deben cumplir con
los requisitos del negocio, por lo que el SGBD debe contar con, al
menos, los siguientes módulos o funcionalidades:

Ser funcional

Consultas y análisis de resultados

Estrategia de predicción

Automatización de datos

Capacidad de modelado y segmentación de datos

Filtrar y extraer datos

Capacidad de integración: Es necesario que el SGBD tenga la
capacidad de integrarse con cualquier otro SGBD o bien ser
accesible desde algún lenguaje de programación, por ejemplo, con
un sistema de gestión de las relaciones con clientes (Customer
Relationship Management, CRM), o de e-mail marketing.
28
El sistema gestor de base de datos

Soporte y desarrollo: Es muy importante que el SGBD cuente con un servicio
de soporte, postventa, que pueda atender de forma eficaz cualquier tipo de
problema que se presente tanto durante la instalación como en el proceso de
ejecución del SGBD. Es imprescindible que se cuente con un plan para
desarrollo del software asociado al SGBD de forma tal que se pueda garantizar
que conforme aparecen nuevas tecnologías el SGBD esté actualizado

Escalabilidad: El SGBD seleccionado debe tener la capacidad para crecer con
los datos del negocio. Recuerda que seguirás añadiendo datos todo el tiempo,
por lo que a pesar de que tu requisito actual puede ser pequeño, esto podría
cambiar muy rápidamente.

Coste e idoneidad: El costo del SGBD es un factor preponderante por lo que
es necesario garantizar que el SGBD seleccionado sea el idóneo para la
empresa. Cabe mencionar que, si se elige un SGBD pensando sólo en el precio,
se podría cometer un error todavía mayor, ya que podría requerirse de invertir
en uno nuevo asumiendo otra vez los costos y la implementación. Tampoco es
adecuado elegir el más caro si no se utilizará la mayor parte de sus
funcionalidades.
Vídeo: En igualdad de características, ¿Me vale cualquier SGBD para cualquier proyecto?
Instalación de MySQL y ORACLE

Requerimientos para la instalación
– Requerimientos de hardware y software: Memoria RAM, disco duro, procesador, dependencias software
– Verificar que sea compatible con el sistema operativo que está instalado en la computadora o servidor.

Arquitectura del sistema operativo: 32 o 64 bits.
– Configuración de los servicios TCP/IP con SSL
– Tamaño de las bases de datos que estarán dentro del SGBD:

Un gran tamaño de la base de datos requerirá de un SGBD muy potente para su gestión. Además,
podría plantear la necesidad de dividir los datos en distintas unidades de disco, incluso máquinas lo que
requeriría clústeres o sistemas distribuidos.
– Conectividad

En caso de requerir de una base de datos que sea accesible desde Internet o intranet, se debe poder
configurar para tal efecto y con la seguridad adecuada.
– Número de conexiones simultáneas al SGBD: Hay que gestionar el trabajo concurrente con varias
sesiones activas
– Paquetes o aplicaciones preinstaladas

En Windows se requiere de la instalación de parches o Service Pack, en Linux se requieren librerías
adicionales como el compilador de C o software de terceros como Java.
– Configuración de variables de entorno

Se utilizan para personalizar el entorno en el que se ejecutará el SGBD, para ejecutar de forma correcta
los comandos Shell. Toman valores de un archivo profile; pero a veces, el usuario tiene que modificar
los valores.
Actividad: Realiza la instalación de los SGBD siguientes en tu equipo y crea un documento con el
procedimiento seguido. Indica también los requisitos mínimos para su instalación 30
Instalación de MySQL y ORACLE
Vídeo: Instalación de MySQL Server y MySQL

Proceso de instalación de MySQL Workbench en Windows


Windows:
– https://www.profesionalreview.com/2018/12/13/mysql-windows-10/ (sólo MySQL)
– https://cafedixital.com/blog/instalar-phpmyadmin-en-windows/ (sólo PHPMyAdmin)
– https://informaticapc.com/guias-instalacion-programas/xampp-apache-php-mysql.php

¡Importante! Crea otro usuario diferente a root siguiendo este enlace



Linux:
– https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04-
es
– https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin
-on-ubuntu-20-04-es
– https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php
-lamp-stack-on-ubuntu-20-04
Instalación de MySQL y ORACLE
Vídeo: Instalación de Oracle y SQL Developer

Proceso de instalación de Oracle en Windows


Windows:
– https://oraxedatabase.blogspot.com/2021/10/como-instalar-oracle-database-21c.html
– https://www.asesoriaensig.com.mx/instalar-oracle-sql-developer-en-windows/

Linux:
– https://lignux.com/instalacion-y-configuracion-de-oracle-database-18c-express-edition/
– https://www.sismonda.com.ar/1193-2020-11-09-sql-developer-en-ubuntu-20-04/

32
Instalación de MySQL y ORACLE

Proceso de instalación de Oracle


Propuesta Docker. ¿Sabes qué es?
– https://medium.com/@cristhianfdx/instalaci%C3%B3n-de-oracle-18c-xe-e
n-windows-10-con-docker-4b9c03e3f1fc
– https://blogs.oracle.com/oraclemagazine/post/deliver-oracle-database-18c-e
xpress-edition-in-containers

Vídeos: - ¿Qué es Docker?


- ¿Qué es Kubernetes?
- Instalación de Oracle y SQL Developer con Docker en Linux
Instalación de MySQL y ORACLE

Extra:Proceso de instalación de Access y LibreOffice Base


¿Dónde adquirirlos? Vídeo: ¿Qué es MS365?
– https://www.microsoft.com/es-es/microsoft-365/access
Importante: Si usas Google Chrome puede que te
– https://es.libreoffice.org/ pida que instales/actualices primero JRE al usar
LibreOffice Base.
Descárgalo desde Firefox o Edge para que
controles la versión de X86 o X64 de tu PC, en

Debate: Google Workspace vs Microsoft 365 Chrome puede que descargue la de x86 en
Windows.

¡Importante! Vamos a usar MySQL a partir de ahora en el curso pero deja instalado Oracle
para la unidad 5. Si hay alguna diferencia entre MySQL y Oracle se comentará en clase. 34
Herramientas gráficas

Es muy sencillo manipular una base de datos compleja si se dispone de un interfaz gráfica
de usuario que ayude al DBA a enviar comandos de administración de forma automática y
sin necesidad de conocer su sintaxis SQL.


Herramientas como PHPMyAdmin, Oracle Enterprise Manager, SQL Developer, Access,
Base o DB2 Data Studio entre otras, disponen de opciones para realizar prácticamente
cualquier opción que se pueda realizar vía SQL. Permite gestionar las bases de datos de un
servidor, crear, borrar y modificar tablas, lanzar comandos SQL, exportar e importar infor
mación, recopilar estadísticas, hacer copias de seguridad, etc.


Muchos administradores sólo conocen las herramientas gráficas de gestión y
administración de una base de datos, puesto que es más cómodo y más intuitivo, y
aprender los lenguajes de programación de la base de datos es una tarea difícil y laboriosa.


Sin embargo, conocer los comandos y las instrucciones que proporciona un SGBD
proporciona una visión extra que posibilita automatizar tareas rutinarias y permite
solucionar problemas que no se pueden solucionar sólo con las herramientas gráficas. A
un administrador que conoce a la perfección todos estos comandos, le resulta muy
sencillo actualizarse en los continuos cambios de versiones que con estas
herramientas gráficas.
35
Herramientas gráficas

Estas son algunas de las herramientas gráficas:
PHPMyAdmin

Práctica: Ya que lo tenemos instalado vamos a conocer su entorno mejor


Herramientas gráficas

Estas son algunas de las herramientas gráficas:
SQLDeveloper

Práctica: Ya que lo tenemos instalado vamos a conocer su entorno mejor


Herramientas gráficas

Estas son algunas de las herramientas gráficas:

Access (Microsoft)

Base (Libre Office)

Práctica: Ya que lo tenemos instalado vamos a conocer su entorno mejor


Herramientas gráficas

Estas son algunas de las herramientas gráficas:

Oracle Enterprise Manager:
http://www.oracle.com/lang/es/enterprise_manager/index.html

39
Herramientas gráficas

Estas son algunas de las herramientas gráficas:

DB2 Data Studio:
http://www.ibm.com/developerworks/downloads/im/data/

40
Herramientas gráficas

Estas son algunas de las herramientas gráficas:

Otras para MySQL: (Alternativas a PHPMyAdmin)
https://www.arsys.es/blog/programacion/interfaces-graficas-mysql


Otras para Oracle: (Alternativas a SQL Developer)

https://mejorsoftware.info/tools/oracle-sql-developer


En ocasiones la misma interfaz sólo tiene que establecer la conexión al SGBD que
se quiere utilizar. Un ejemplo de este tipo sería DBeaver, Navicat, Tora o Adminer.

Un conjunto genérico para estos y otros SGBD puede servir el siguiente enlace:
– https://ricondelzorro.wordpress.com/2016/04/11/herramientas-visualesgui-para-
diseno-de-bd-en-linux/
41
Intérprete comandos SGBD

La utilidad principal de un SGBD es su intérprete de
comandos. Es una aplica ción cliente cuya única misión es
enviar comandos al SGBD y mostrar los resultados devueltos
por el SGBD en pantalla.

Viene a ser el equivalente a la terminal de Windows o Linux.

Empecemos por MySQL:
mysql [options] [database]

options:
--help
{-p | --password}[=frase]
{-P | --port}[=numero]
{-h | --host}[=numero]
{-u | --user}[=usuario]
{-D | --DB}[=nombre_db]

database: nombre_db
Intérprete comandos SGBD

Ejemplos de conexión en MySQL:

#conexión con usuario y password (se conecta como root y su password )


mysql -u root -p
Enter password: *********

#conexión con usuario y password en claro a la base de datos asir


mysql -u root -pPasswordDelUsuario asir

#conexión con usuario y password en claro a la base de datos asir


# del host 192.168.3.100
mysql -u root -pPasswordDelUsuario -h 192.168.3.100 asir

#conexión con usuario y password en claro a la base de datos asir


# del host 192.168.3.100 con puerto 3306 (puerto por defecto MySQL)
mysql -u root -pPasswordDelUsuario -h 192.168.3.100 -D asir -P 3306

Actividad: Veamos cada una de las opciones de login


Veamos también cómo se crearían otros usuarios
https://www.digitalocean.com/community/tutorials/how-to-create-a-new-
user-and-grant-permissions-in-mysql 43
Intérprete comandos SGBD

Una vez iniciada la conexión se iniciará un prompt con mysql> Hay consultas que no necesitan

Ejecutad el siguiente comando a ver qué sale: tabla.
Aunque no hemos hecho use
– mysql> select version(),current_date(); mysql puede acceder a ella si lo
ponemos así o si fuera externa
– Mysql> SELECT user,host FROM mysql.user; a esta base de datos.

A la hora de ejecutar instrucciones SQL hay que tener en cuenta lo siguiente:

Un comando consiste en una sentencia SQL terminada en ‘;’.

Cuando se escribe un comando, mysql lo manda al servidor para que lo ejecute, muestra
los resultados y vuelve al prompt, indicando que está listo para recibir más consultas.

Muestra los resultados en forma de tabla (filas y columnas). La primera fila contiene las
etiquetas para las columnas y las filas siguientes muestran los resultados de la consulta.
En el tema siguiente aprenderemos a seleccionar estas columnas y operar con ellas.

Muestra las filas devueltas y cuánto tiempo tardó en ejecutarse, lo cual puede ofrecer
una idea de la eficiencia del servidor, aunque estos valores pueden ser imprecisos pues
dependen de muchos factores, tales como la carga del servidor, velocidad de
comunicación, etc.

Se pueden escribir comentarios por línea tras el comando SQL:
comando; -- comentario o que ocupe varias líneas (/* comentarios */)

44
Intérprete comandos SGBD

Las palabras claves pueden ser escritas en mayúsculas, minúsculas, aunque es
aconsejable escribirlas en mayúsculas para diferenciarlas de tablas, campos,
opciones,… Los entornos gráficos ayudan a identificarlas al marcarlas con colores.

Es posible escribir más de un comando en la misma línea separando por ‘;’ Ej:
mysql> select user();select now();

Si un comando necesita más de una línea basta con pulsar Intro, el comando no
termina hasta que encuentra ‘;’

Otra forma de ejecutar comandos SQL es almacenarlos en un fichero de texto y
mandarlo a ejecución mediante el comando source, que recibe como parámetro un
fichero de comandos y ejecuta uno por uno todos los comandos que tenga el fichero
(con extensión .sql). Ej: mysql> source /home/usuario/prueba.sql

Otra alternativa a ejecutar un fichero.sql es en modo batch. Esto es útil para tareas
administrativas donde se ejecutan varios ficheros de comandos, además de otras
tareas de mantenimiento del servidor a través de un shell script. Ej:
#ejecucion en modo batch
~$ mysql -u root -pPassWdUsuario <fichero.sql

#ejecucion en modo batch almacenando resultados


~$ mysql -u root -pPassWdUsuario <fichero.sql >resultado
Práctica: Vamos a probar esto con un ejemplo y cómo se haría por interfaz 45
Intérprete comandos SGBD

Este último comando dará un warning por poner la clave, por lo que suele hacerse
dentro de un fichero.sh. Ej:
#!/bin/bash
DB_USER='USER';
DB_PASSWD='PASSWORD';
DB_NAME='DATABASE';
#mysql commands
mysql --user=$DB_USER --password=$DB_PASSWD $DB_NAME <fichero.sql
exit; #Salida de MySQL, también serviría quit;


De igual forma se puede proceder con Oracle donde la terminal será SQL*Plus,
aunque el acceso será siguiendo el siguiente formato:
sqlplus [{usuario[/password>][@<host>]:port/instance [AS {SYSDBA | SYSOPER}]

Ejemplo: sqlplus system/system@localhost:1521/mibd



Por defecto hay usuarios DBA: sys, system, hr

En el ejemplo, la instancia es el database mibd

Se considera lo dicho en MySQL a excepción
de que en Oracle siempre hay from tras select por
lo que habría que hacer: select sysdate from dual;
Intérprete comandos SGBD

Ejemplos de ejecución de consultas en SQL*Plus
SQL> SELECT table_name FROM user_tables ORDER BY
table_name;


Ejemplos de uso de la tabla dual para acceder a como sysdate, user o cálculos:
(Esta tabla dual también se puede usar en MySQL)
SQL> select sysdate, user from dual;
SYSDATE USER
-------- ------------------------------
27/06/10 SYS

SQL> select 5+4 from dual;


5+4
----------
9

Por supuesto, todas estas acciones se pueden hacer igual desde las herramientas
gráficas sin problema
47
El lenguaje de definición datos

El sublenguaje de SQL que permite la
definición de datos es el DDL (Data
Definition Language).

Las funciones de este sublenguaje son:

Crear tablas, índices y otros objetos de la
base de datos (como vistas, sinónimos, etc.)

Definir las estructuras físicas donde se
almacenarán los objetos de las bases de
datos (espacios de tablas (tablespaces),
ficheros de datos (datafiles), etc.)
Nota: Vamos a usar MySQL pero es equivalente lo que se explique para Oracle y otros.
Puedes consultar ayuda en estos enlaces: SQL, MySQL 48
El lenguaje de definición datos

Ejemplo para hacer en PHPMyAdmin:
CREATE TABLE IF NOT EXISTS Actores(
Codigo INTEGER PRIMARY KEY, ¡Importante!, hay ligeras diferencias entre
Nombre VARCHAR(40), MySQL y Oracle como por ejemplo éstas. No
FechaNac DATE, olvides de consultar la sintaxis según el SGBD
Nacionalidad VARCHAR(20),
CodigoPersonaje INTEGER REFERENCES PERSONAJES(Codigo)
);

CREATE TABLE Personajes(


CodigoPersonaje INTEGER, Aunque va a crear las dos tablas, ¿no
Nombre VARCHAR(30), notas “algo” que falta en esta tabla?
FechaAparicion DATE,
Caracteristica VARCHAR(20),
CodigoActor INTEGER REFERENCES Actores(Codigo),
CodigoSuperior INTEGER REFERENCES Personajes(Codigo)
);
¿Qué ha ocurrido al Ejecuta lo siguiente y prueba de nuevo
ejecutar estas líneas? CREATE DATABASE asir;
Vamos a analizarlo USE asir;
INSTRUCCIONES ANTERIORES;
49
El lenguaje de definición datos

El lenguaje DDL de SQL incluye las siguientes
instrucciones:

CREATE tipo_objeto nombre definición: Crea un
objeto de un determinado tipo (DATABASE, TABLE,
INDEX, PROCEDURE, VIEW, etc.) con un nombre
(por ejemplo Actores o Personajes) y una definición
del campo de la tabla (CodigoPersonaje, Nombre,
etc.).
– Como se ha visto en el ejemplo, hay que seguir
un orden al crear los objetos. Primero tenemos
que definir la base de datos, luego las tablas y a
partir de ahí los índices, vistas, procedimientos,

– Después veremos que también se pueden poner
restricciones a los campos de la tabla 50
El lenguaje de definición datos

El lenguaje DDL de SQL incluye las
siguientes instrucciones:

DROP tipo_objeto nombre: Elimina un objeto
de un determinado tipo (DATABASE, TABLE,
INDEX, PROCEDURE, VIEW, etc.) con un
nombre.
– Cuando se haga drop hay que tener en
cuenta el efecto que puede tener en la BD ya
que un drop table borra la tabla y sus datos y
puede haber Foreign Key!
Debate: ¿Crees que el orden de creación de las tablas importa?
Puede que algún SGBD nos dé error por tener referencias a tablas que aún no se han creado

Práctica: Borra las tablas y la base de datos que has creado antes e intenta crearlas en un orden
diferente a ver si da algún fallo.
Buenas prácticas: Primero crea las tablas base y luego las tablas que hagan uso de referencias 51
externas. También podrías poner todas las tablas y luego definir las referencias externas.
El lenguaje de definición datos

El lenguaje DDL de SQL incluye las
siguientes instrucciones:

ALTER tipo_objeto nombre modificación: Elimina
un objeto de un determinado tipo (DATABASE,
TABLE, INDEX, PROCEDURE, VIEW, etc.) con un
nombre y le realiza la modificación.
– Por ejemplo, la sentencia ALTER TABLE Actores
DROP COLUMN Fecha, eliminaría la columna
Fecha de la tabla Actores.
– Esta agregaría la clave primaria a Personajes
ALTER table Personajes add primary key
(CodigoPersonaje)
Práctica: Sobre las tablas creada, vamos a borrar una columna y agregar otra
después. ¿Puedo borrar la columna que es PK?
¡¡Importante, esto debe hacerse cuando aún no haya datos!! 52
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una base de datos

– Donde…

nombre_db: nombre de la BD

Juego_caracteres: utf8, latin1

nombre_colación: Indica el orden del alfabeto.
Ej: Ñ tras la N no como aparece en ASCII
53
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una base de datos

Una vez creamos la base de datos hay
que acceder a ella con USE nombre_db;

Si queremos ver cuántas bases de datos
hay se puede hacer con SHOW
DATABASES;

Para evitar error al crear un nombre_db
existente se incluye la parte IF NOT
EXISTS
Práctica: Prueba a crear varias bases de datos en MySQL y una que ya
exista para probar if not exists.
Ahora prueba esto en Oracle a ver qué pasa 54
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo
de objeto con más detalle:
– Crear una base de datos en ORACLE

¿Y en Oracle es igual? NO, es más complejo

En MySQL, una sola instancia controla todas
las bases de datos, pero en Oracle, cada
base de datos está asociada a una
instancia.

Una instancia es el conjunto de procesos de
Oracle que están en ejecución en el sistema
operativo y cuya misión es controlar todo lo
referente a la gestión de la base de datos.

55
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una base de datos en ORACLE.

Para crear una base de datos en Oracle, primero
hay que crear una instancia para proceder a
invocar el comando create database pertinente.

Se puede optar por usar un script que modifica el
fichero initxxxx.ora o a través de la utilidad gráfica
dbca.

Ver ejemplo script initjardineria.ora


del pdf Moodle (página 107)

Es bastante común esto


con SGBD complejos como
es el caso de Oracle. 56
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una base de datos en
ACCESS/BASE.

Cada archivo es un base de datos propia
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de objeto
con más detalle:
– Modificar una base de datos (estructura)

No se puede hacer en ACCESS / Base


En MySQL sólo se puede cambiar el juego de
caracteres, otros aspectos serán con roles:
– ALTER DATABASE asir COLLATE latin1_spanish_ci;


En Oracle permite además hacer otros cambios como:

58
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de objeto con más
detalle:
– Borrar una base de datos

En ACCESS/Base sería eliminar el archivo


En MySQL sólo hay que hacer lo siguiente sin hacer previamente use:
(si estás dentro de la base de datos podría decirte que salgas fuera
del contexto)
– DROP DATABASE [if exists] nombre;


En Oracle se puede hacer como ACCESS con los ficheros binarios o
conectando a la propia instancia y ejecutando:


A partir de aquí, las acciones son bastante equivalentes entre los
diferentes SGBD. Puede cambiar algo de notación de la instrucción.
59
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
[esquema.]nombre_tabla(
columna1 tipo restricción de columna, Esto no lo tiene Oracle y hay
columna2 tipo restricción, que gestionarlo con PL/SQL
...
columnasN tipo restricción
[, restricciones de tabla]
) [opciones de tabla];
– Ejemplos:
CREATE TABLE Empleados( CREATE TEMPORARY TABLE departamentos (
DNI VARCHAR(10) PRIMARY KEY, dep_id int NOT NULL CHECK (dep_id>0),
Nombre VARCHAR(10) NOT NULL, departamento varchar(255),
Puesto VARCHAR(20) PRIMARY KEY (dep_id)
); );

Práctica:
- Ejecuta ambos casos 2 veces ¿Hay algún error?, ¿en las 2?, ¿Se ve la tabla departamentos?
- Incluye la opción IF NOT EXISTS a Empleados y ejecútalo 2 veces 60
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de objeto
con más detalle:
– Crear una tabla
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]
[esquema.]nombre_tabla(
columna1 tipo restricción de columna,
columna2 tipo restricción,
...
columnasN tipo restricción
[, restricciones de tabla]
) [opciones de tabla];
– Temporary: Se utiliza para crear tablas temporales, esto es, una tabla invisible al
resto de usuarios y que se borrará en el momento de la desconexión del usuario que
la creó.
– If not exists: Antes de crearla comprueba que no existe previamente
– Esquema: Es el nombre de la base de datos. Ej: Asir Permite el acceso a tablas de
otra base de datos en MySQL.
– Tipo: Es el formato del campo a guardar. Ej: número, cadena, fecha
– Restricciones: Determinan alguna característica o relación con otras tablas. Ej:
NOT NULL, Primary key, Foreign key, DEFAULT
– Opciones de tabla: Tratan el modo de operar con ella en el SGBD
Esta es la forma más general pero hay otras como like o con select. 61
Práctica: Haz uso de estas dos nuevas opciones
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla https://desarrolloweb.com/articulos/1054.php

¿Qué tipos de
datos tenemos?

En el caso de Access y
Base se toman del
formulario al crear la tabla
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla
¿Y restricciones? ¿Las podemos encadenar?
– Por campo/columna Importante, si usamos constraint para foreign key, CADA UNA
tendrá un nombre único ya que apuntan a tablas externas y no
definición_create: puede haber dos FK con el mismo nombre.
nombre_columna tipo_datos [AUTO_INCREMENT]
[NOT NULL | NULL] [DEFAULT valor] #primera forma - nivel de columna
[UNIQUE [KEY] | [PRIMARY] KEY] create table vehiculo(
[COMMENT 'string'] matricula varchar(7) primary key,
[definición_referencia] marca varchar(20),
modelo varchar(20),
definición_referencia:
REFERENCES nombre_tabla [(nombre_columna,...)] precio numeric(7,2)
[ON DELETE {CASCADE | SET NULL | SET DEFAULT | NO ACTION}] );
[ON UPDATE {CASCADE | SET NULL | SET DEFAULT | NO ACTION}]
#segunda forma - nivel de tabla
– Por tabla (tras crear campos) create table vehiculo(
matricula varchar(7),
definición_create: marca varchar(20),
definición_columna
modelo varchar(20),
| [CONSTRAINT [símbolo]] PRIMARY KEY (nombre_columna,...)
| [CONSTRAINT [símbolo]] FOREIGN KEY (nombre_columna,...) precio numeric(7,2),
[definición_referencia] constraint pk1 primary key (matricula)
);
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla
Ejemplo con referencias externas:
CREATE TABLE Countries ( Vamos a probar la siguiente instrucción a ver qué guarda
CountryID INT PRIMARY KEY, Countries y States:
CountryName VARCHAR(50), UPDATE Countries SET CountryID =3 where CountryID=1;
CountryCode VARCHAR(3)
); Ahora vamos a crearlas de nuevo con la línea que hay
en comentario (--) y a ver si cambia algo.(Primero las
CREATE TABLE States ( borraremos con la orden drop table)
StateID INT PRIMARY KEY,
StateName VARCHAR(50), En las referencias la acción por defecto será NO ACTION
StateCode VARCHAR(3), ¡OJO! Cuando creemos las tablas hay que ver el orden
CountryID INT, para definir las referencias al crearlas. La alternativa es
FOREIGN KEY (CountryID) REFERENCES Countries(CountryID) ON crearlas todas con su clave primaria y luego usar ALTER
UPDATE SET NULL TABLE para incorporar esta nueva restricción a la tabla
-- FOREIGN KEY (CountryID) REFERENCES Countries(CountryID) ON que corresponda.
UPDATE CASCADE
); ¡OJO! En el caso de ACCESS/Base no hay comando
FOREIGN KEY, se establece esto en la relación de
tablas cuando se hacen las consultas.
INSERT INTO Countries VALUES (1,'United States','USA');
INSERT INTO Countries VALUES (2,'United Kingdom','UK') ; Nota: Oracle no implementa la opción ON UPDATE por
INSERT INTO States VALUES (1,'Texas','TX',1); lo que hay que recurrir a otros métodos para realizar las
INSERT INTO States VALUES (2,'Arizona','AZ',1); acciones de actualización, como por ejemplo, mediante
TRIGGERS (disparadores)
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla
– Aunque ambos casos crean la tabla usuarios, es
recomendable dar un nombre a la restricción usando
CONSTRAINT y así poder cambiarlas luego con ALTER
TABLE.
– También podemos establecer criterios de valor con
CHECK o DEFAULT a nivel de columna o de tabla
CREATE TABLE IF NOT EXISTS usuarios ( Tabla equivalente colocando
id INT PRIMARY KEY, las restricciones al final. Sólo
CREATE TABLE IF NOT EXISTS usuarios ( NOT NULL y DEFAULT no
dni CHAR(9) UNIQUE, id INT ,
nombre VARCHAR(50) NOT NULL default "Domingo", se puede hacer eso.
dni CHAR(9) ,
edad INT CHECK (edad>=0 and edad<120)
nombre VARCHAR(50) not null default "Domingo",
); edad INT,
CONSTRAINT usu_id_pk PRIMARY KEY (id),
No hay que hacer esto para todas las restricciones, CONSTRAINT usu_dni_uq UNIQUE (dni),
normalmente se hace con PK y FK. Luego con alter table CONSTRAINT usu_edad_ck CHECK (edad>=0 and edad<120)
se añadirán otras o modificarán pero si tienen nombre es );
más fácil de cambiarlas.
Comprobemos qué pasa cuando intentamos insertar estos registros:
INSERT into usuarios values (1,"11112223Q","Domingo",36); 65
INSERT into usuarios values (2,"11112223Q","Pedro",125);
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla
– Ejemplos con restricciones de una tabla escrita en Oracle
CREATE TABLE COCHES (
matricula VARCHAR2(8),
CREATE TABLE usuarios ( marca VARCHAR2(15) NOT NULL,
id NUMBER PRIMARY KEY, color VARCHAR2(15),
dni CHAR(9) UNIQUE, codTaller VARCHAR2(10),
nombre VARCHAR2(50) NOT NULL, codProp VARCHAR2(10),
edad NUMBER CHECK (edad>=0 and edad<120) CONSTRAINT coches_mat_pk PRIMARY KEY (matricula),
); CONSTRAINT coches_codtaller_fk1 FOREIGN KEY (codTaller)
REFERENCES TALLER(codTaller),
CONSTRAINT coches_codprop_fk2 FOREIGN KEY (codProp)
Como puedes ver, se parece mucho a lo que REFERENCES PROPIETARIO(codProp),
hemos hecho en MySQL. Eso sí, ten en cuenta CONSTRAINT coches_color_ck1
CHECK (color IN ('ROJO','AZUL','BLANCO','GRIS','VERDE','NEGRO'))
que no está if not exists y verifica el tipo. );


¿Puedo ver la estructura de una tabla creada?

Podemos usar: describe nombre_tabla;

Usa el diccionario de datos

En Access/Base lo veríamos en diseño
El lenguaje de definición datos

Actividad: Crea la siguiente base de datos
de Startreck y describe en un documento las
características de cada tabla.
CREATE TABLE Actores( CREATE TABLE Planetas(
Codigo integer PRIMARY KEY, Codigo integer PRIMARY KEY,
Nombre varchar(50) NOT NULL, Galaxia varchar(50) NULL,
Fecha DATE NOT NULL, Nombre varchar(50) NOT NULL
Nacionalidad varchar(20) DEFAULT 'EEUU' );
); CREATE TABLE Capitulos(
CREATE TABLE Personajes( Temporada integer,
Codigo integer PRIMARY KEY, Orden integer,
Nombre varchar(50) NOT NULL, Titulo varchar(50) NOT NULL,
Raza varchar(20) NOT NULL, Fecha date NOT NULL,
Grado varchar(20) NOT NULL, PRIMARY KEY (Temporada, Orden)
CodigoActor integer NOT NULL, );
CodigoSuperior integer NULL, CREATE TABLE PersonajesCapitulos(
FOREIGN KEY (CodigoActor) CodigoPersonaje integer PRIMARY KEY,
REFERENCES Actores (Codigo), Temporada integer NOT NULL,
FOREIGN KEY (CodigoSuperior) Orden integer NOT NULL,
REFERENCES Personajes(Codigo) FOREIGN KEY (Temporada,Orden)
); REFERENCES Capitulos(Temporada,Orden)
);
Aunque ahora lo tenéis claro, no viene mal poner comentarios en el script
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla
Opciones de crear tabla en MySQL
opciones_tabla: opción_tabla
[opción_tabla] ...
#Ejemplo de creación de tabla en MySQL
opción_tabla: create table if not exists Pedido(
ENGINE = nombre_motor codigo int auto_increment primary key,
| AUTO_INCREMENT = valor fecha datetime,
| [DEFAULT] CHARACTER SET estado
juego_caracteres enum(‘Pendiente’,’Entregado’,’Rechazado’)
)
[COLLATE colación]
comment = ‘tabla de pedidos a proveedores’
| CHECKSUM = {0 | 1} autoincrement = 10000
| COMMENT = 'string' max_rows=1000000
| MAX_ROWS = valor checksum=1
| MIN_ROWS = valor engine=innodb;

Esta tara la suele hacer el administrador que conoce mejor cómo


optimizar el SGBD, nosotros lo dejaremos por defecto. 68
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Crear una tabla
Opciones de crear tabla en MySQL
– El almacenamiento físico de una tabla en MySQL está
controlada por un software especial denominado Motor
de almacenamiento. Mediante la opción
'ENGINE=nombre_motor' se indica el motor de
almacenamiento para la tabla. Puede ser, entre otros,
innodb, que son tablas transaccionales con bloqueo de
registro y claves foráneas, myIsam por defecto usado
por MySQL y que genera tablas operadas a gran
velocidad, pero sin control de integridad referencial y
Memory, que genera tablas que están almacenadas en
memoria en lugar de un archivo físico.
– AUTO_INCREMENT: permite indicar el valor inicial para
campos de tipo AUTO_INCREMENT. 69
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de objeto
con más detalle:
– Crear una tabla
Opciones de crear tabla en MySQL
– '[DEFAULT] CHARACTER SET': Especifica el conjunto de
caracteres para la tabla y COLLATE define la colación por
defecto de la tabla. Si se especifica CHECKSUM, MySQL
mantiene una suma de verificación para todos los registros.
– COMMENT: es un comentario para la tabla, hasta 60
caracteres. También es posible crear comentarios para cada
una de las columnas o la tabla. Es recomendable su uso para
el diccionario de datos
– MAX_ROWS: es el máximo número de registros que se quiere
almacenar en la tabla. No es un límite absoluto, sino un
indicador que la tabla debe ser capaz de almacenar al menos
estos registros.
– MIN_ROWS: es el mínimo número de registros que se planea
almacenar en la tabla. 70
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla

Opciones de crear
tabla en MySQL
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por
tipo de objeto con más detalle:
– Crear una tabla
Opciones de crear tabla en Oracle

En Oracle, la mayoría de las opciones tienen que ver con su
almacenamiento físico. Por ejemplo, las tablas deben ser almacenadas en
un contenedor llamado tablespace. Por defecto, si no se indican
opciones de almacenamiento, la tabla se ubica en el tablespace del
usuario, pero si se qmere ubicar en otro tablespace, se puede incluir la
opción tablespace nombre para designar otro tablespace.
#Ejemplo de creación de tablas con opciones propias de Oracle
create table Pedido(
codigo integer primary key,
fecha date,
estado varchar(10),
constraint c_estado
check (estado IN 'Pendiente','Entregado','Rechazado')
)
tablespace Administracion
storage (initial 100k next 100k minextents 1
maxextents unlimited pctincrease 0); 72
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Crear una tabla
¿Cómo sé qué tablas hay creadas en el SGBD para una BD?
mysql> show tables; SQL> select table_name from
user_tables;
+----------------------+
TABLE_NAME
| Tables_in_jardineria | ------------------------------
+----------------------+ PARTIDOS
| Clientes | ESTADISTICAS
JUGADORES
| DetallePedidos |
EQUIPOS
| ... |
| Productos |
+----------------------+

MYSQL ORACLE

En Oracle, se pueden consultar las vistas user_tables, dba_tables y all_tables


para ver esta información, dependiendo de los permisos en esa instancia. 73
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Crear una tabla
Actividad: Crear las tablas para diferentes ejemplos vistos en el tema 2 de
modelo relacional. Realiza el script .sql de MySQL de cada caso y colocando el
tipo de dato más adecuado. Cada caso será una base de datos propia con sus
tablas. También realizaremos el mismo proceso sobre Access / Base.
Caso 1: Genera tanto la base de datos en Base como en MySQL

No olvidéis el proceso del modelo relacional,


lo vas a necesitar en el examen

Haremos este caso paso a paso tal y como


habría que hacerlo en el examen.
Pasos:
1) Borrar la base de datos si existe
2) Crear la base de datos y acceder a ella
3) Crear las tablas en orden y con valores
apropiados a las columnas
El lenguaje de definición datos

Caso 2:

Buenas prácticas:
De cara al examen y tu vida laboral, nunca
entregues un fichero sin saber si funciona
correctamente. Prueba de vez en cuando que lo
que llevas escrito está bien.
El lenguaje de definición datos

Caso 3:
El lenguaje de definición datos

Caso 4:

Puede ser que de un error aquí si


considera que tiene que estar
creada la tabla antes de hacer la
referencia. En ese caso, quítala y
ya la añadiremos con alter table.
El lenguaje de definición datos

Caso 5:
El lenguaje de definición datos

Caso 6:
El lenguaje de definición datos

Caso 6:

EMPLEADO(id, nombre, apellido1, apellido2, teléfono, dirección, tipo)

CURSO(id, nombre, descripción, duración, coste)

CURSO_TIENE_PRERREQUISTO_CURSO(id_curso, id_curso_prerrequisito,
es_obligatorio)
– id_curso: FK (Foreign Key) de CURSO(id)
– id_curso_prerrequisito: FK (Foreign Key) de CURSO(id)

EDICIÓN(id, fecha_inicio, fecha_fin, horario, lugar, id_curso, id_empleado_capacitado)
– id_curso: FK (Foreign Key) de CURSO(id)
– id_empleado_capacitado: FK (Foreign Key) de EMPLEADO(id)

EMPLEADO_RECIBE_EDICIÓN(id_empleado, id_edicion)
– id_empleado: FK (Foreign Key) de EMPLEADO(id)
– id_edicion: FK (Foreign Key) de EDICIÓN(id)
El lenguaje de definición datos

Caso 7:
El lenguaje de definición datos

Caso 7:

PROFESOR(id, nombre, apellido1, apellido2, despacho, teléfono, tipo)

PROYECTO_INVESTIGACIÓN(id, nombre, programa_id, descripción, fecha_inicio,
fecha_fin, presupuesto, id_doctor)
– id_doctor: FOREIGN KEY de PROFESOR(id)

PROFESOR_TRABAJA_PROYECTO(id_profesor, id_proyecto, fecha_inicio, fecha_fin)
– id_profesor: FOREIGN KEY de PROFESOR(id)
– id_proyecto: FOREIGN KEY de PROYECTO(id)

DOCTOR_SUPERVISA_NO_DOCTOR(id_doctor, id_no_doctor, fecha_inicio, fecha_fin)
– id_doctor: FOREIGN KEY de PROFESOR(id)
– id_no_doctor: FOREIGN KEY de PROFESOR(id)

PUBLICACIÓN(id, título, tipo)

REVISTA(id, volumen, número, página_inicio, página_fin)
– id: FOREIGN KEY de PUBLICACIÓN(id)

CONGRESO(id, tipo, ciudad, país, fecha_inicio, fecha_fin)
– id: FOREIGN KEY de PUBLICACIÓN(id)

PROFESOR_ESCRIBE_PUBLICACIÓN(id_profesor, id_publicación)
– id_profesor: FOREIGN KEY de PROFESOR(id)
– id_publicación: FOREIGN KEY de PUBLICACIÓN(id)
El lenguaje de definición datos

Caso 8:
El lenguaje de definición datos



Caso 8:
PROVINCIA(id, nombre)

LOCALIDAD(id, nombre, id_provincia)
– id_provincia: FOREIGN KEY de PROVINCIA(id)

LIBRO(id, título, isbn, año_publicación, descripción, tipo)

LIBRO_PAPEL(id, fecha_impresión, lugar_impresión, precio)
– id: FOREIGN KEY de LIBRO(id)

LIBRO_EBOOK(id, tamaño_archivo, precio)
– id: FOREIGN KEY de LIBRO(id)

CLIENTE(id, nombre, apellido1, apellido2, dirección, email, teléfono, id_localidad)
– id_localidad: FOREIGN KEY de LOCALIDAD(id)

AUTOR(id, nombre, apellido1, apellido2, url, dirección, teléfono, id_localidad)
– id_localidad: FOREIGN KEY de LOCALIDAD(id)
• EDITORIAL(id, nombre, dirección, url, teléfono, id_localidad)
– id_localidad: FOREIGN KEY de LOCALIDAD(id)

ALMACÉN(id, dirección, teléfono, id_localidad)
– id_localidad: FOREIGN KEY de LOCALIDAD(id)

CESTA(id, fecha_compra, id_cliente)
– id_cliente: FOREIGN KEY de CLIENTE(id)

AUTOR_ESCRIBE_LIBRO(id_autor, id_libro)
– id_autor: FOREIGN KEY de AUTOR(id)
– id_libro: FOREIGN KEY de LIBRO(id)

EDITORIAL_PUBLICA_LIBRO(id_editorial, id_libro)
– id_editorial: FOREIGN KEY de EDITORIAL(id)
– id_libro: FOREIGN KEY de LIBRO(id)

ALMACÉN_ALMACENA_LIBRO(id_almacen, id_libro, stock)
– id_almacen: FOREIGN KEY de ALMACEN(id)
– id_libro: FOREIGN KEY de LIBRO(id)
El lenguaje de definición datos

Caso 9:
El lenguaje de definición datos

Caso 10:
El lenguaje de definición datos

¿Y qué mas se puede hacer una vez creada la
tabla?
– Renombrar una tabla Práctica: Probemos
algunos ejemplos

Sintaxis MySQL y Oracle
RENAME TABLE nombre_tabla TO nuevo_nombre_tabla
[, nombre_tabla TO nuevo_nombre_tabla] …

Ejemplo: RENAME TABLE Usuarios TO Otra;



Access/Base: Botón derecho y renombrar
– Copiar una tabla

Sintaxis MySQL y Oracle
CREATE TABLE nombre_tabla AS select *|columnas from tablaOrigen;
CREATE TABLE nombre_tabla LIKE tablaOrigen;

Ejemplo: CREATE TABLE Actrices LIKE Actores;


Access/Base: Copiar y Pegar con otro nombre
87
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Borrar una tabla
Sólo se puede con tablas temporales
 MySQL/Oracle
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name]…
[CASCADE CONSTRAINTS]→ De momento sólo ORACLE
Elimina la tabla teniendo en cuenta las dependencias
 Access/Base por clave externa y borrando esas tablas en cascada.
Borrar la tabla en propiedades o SUPR

➔ Ejemplos Actividad: Probemos


algunos ejemplos

DROP TABLE IF EXISTS Persona;


DROP TABLE Actores, clientes;
DROP TABLE Countries;
¿Qué pasa si ejecutas una tabla que tiene
referencias externas en MySQL?
Habrá que borrar primero la que hace
referencia hasta que incorporen CASCADE 88
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Modificar una tabla
– Con lo visto hasta ahora cabría pensar que
modificar una tabla es borrarla y crearla de
acuerdo a las nuevas especificaciones.
– Esto es posible si la tabla no tiene datos,
pero... ¿qué ocurre si hay un centenar o un
millar de registros? No queda otra opción que
ejecutar una sentencia ALTER TABLE para evitar
la pérdida de datos.
– Hay muchas opciones a utilizar con la orden
ALTER TABLE

89
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Modificar una tabla con ALTER TABLE
ALTER TABLE nombre_tabla
especificación_alter [, especificación_alter] ...

especificación_alter:
ADD definición_columna [FIRST | AFTER nombre_columna ]
| ADD (definición_columna,...)
| ADD [CONSTRAINT [símbolo]]
PRIMARY KEY (nombre_columna,...)
| ADD [CONSTRAINT [símbolo]]
UNIQUE (nombre_columna,...)
| ADD [CONSTRAINT [símbolo]]
FOREIGN KEY (nombre_columna,...)
[definición_referencia]
| CHANGE [COLUMN] anterior_nombre_columna definición_columna
[FIRST|AFTER nombre_columna]
| RENAME COLUMN anterior_nombre_columna TO nuevo_nombre_columna
| MODIFY definición_columna [FIRST | AFTER nombre_columna]
| DROP COLUMN nombre_columna
| DROP PRIMARY KEY
| DROP FOREIGN KEY fk_símbolo
90
| opciones_tabla
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de objeto
con más detalle:
– Modificar una tabla con ALTER TABLE
– La opción ADD permite añadir una columna o
restricción y se puede especificar el lugar donde se
va a insertar mediante las cláusulas AFTER (después
de una columna) y FIRST (la primera columna).
Oracle no admite las cláusulas AFTER y FIRST.
– Con la opción MODIFY se cambia el tipo de datos de
una columna y se añaden restricciones.
– Con la opción DROP se pueden eliminar las
restricciones de claves foráneas y primarias,
dejando el tipo de dato y su contenido intacto.
– Para cambiar el nombre de una columna, Oracle usa
la cláusula RENAME y MySQL la cláusula CHANGE y
dónde colocarla.
91
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de objeto
con más detalle:
– Modificar una tabla con ALTER TABLE
Ejemplos:


MySQL
ALTER TABLE Mascotas ADD COLUMN Especie
VARCHAR(10) AFTER Raza; Se hará igual en Oracle
o MySQL
Oracle

ALTER TABLE Clientes DROP PRIMARY KEY;


ALTER TABLE Clientes DROP COLUMN CodigoCliente;
ALTER TABLE Clientes ADD COLUMN Nif VARCHAR(10)
PRIMARY KEY FIRST ;

ACCESS/Base: Se hace en modo diseño
92
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Modificar una tabla con ALTER TABLE
Actividades en MySQL: Probemos algunos ejemplos de ALTER TABLE

Cambia el nombre de la tabla ProveedorSuministraPieza a Suministros

Crea una nueva columna “tipo” a la tabla Categoría de tipo int tras nombre

Coloca la restricción de valor por defecto de provincia a “Almería” en Proveedor

Borra la PK de Pieza y coloca la nueva PK con código y nombre. Antes tendrás que
borrar las FK

Crea un nueva columna “marca” a la tabla Pieza que esté al principio

Añade una restricción a proveedores para que el código esté entre 1 y 20 (Hay
dos opciones, una sobre columna y otra sobre tabla con check)

Cambia el tipo de fecha en Suministros a varchar(20) con MODIFY

Haz lo mismo que antes pero borrándola primero y colocando una nueva en su
lugar.

Agrega la restricción NOT NULL al campo nombre en Categoría

Crea el script con las órdenes para borrar las tablas de la base de datos. (Hay
varias formas de hacerlo)

93
El lenguaje de definición datos
Actividades en MySQL: Probemos algunos ejemplos de ALTER TABLE

Crea la tabla Doctor con una columna “cargo” y cambia la referencia externa
de proyecto_Investigacion a la nueva tabla

Cambia la clave primaria de la tabla Supervisa para que todos los campos
sean PK

Cambia la restricción de FK de Revista para que tenga la opción ON UPDATE
CASCADE

Crea una nueva columna “editorial” a la tabla Publicación entre id y título

Crea una nueva columna “DNI” al principio de Profesor

Cambia el tipo de presupuesto en la tabla Proyecto_investigacion a double y
con restricciones not null y por defecto 0

Cambia el nombre de la tabla Proyecto_Investigacion a Proyectos

Elimina la columna de título en Publicación

Crea una copia de la tabla Profesor con nombre OtrosProfesores

Antes de borrar las tablas, escribe el script que borra primero las FK

94
El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Crear índice
Los índices permiten acelerar búsquedas de registros
por uno o varios campos que no tienen por qué ser
la clave primaria (ésta ya es un índice)
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
ON tbl_name (key_part,...)
key_part: {col_name [(length)] | (expr)} [ASC | DESC];

– Ejemplos:
CREATE TABLE t1 (
col1 VARCHAR(10), CREATE INDEX prueba ON t1(col2);
col2 VARCHAR(20), ALTER TABLE t1 ADD INDEX otro (col1);
INDEX (col1, col2(10))
);
– Para borrar el índice habría que hacer:
DROP INDEX index_name ON tbl_name;

Actividad: Montemos un índice de ejemplo 95


El lenguaje de definición datos

Vamos a ir viendo estas operaciones por tipo de
objeto con más detalle:
– Crear vistas
Una vista es una tabla que permite almacenar una
consulta SELECT como si fuera una tabla. Se emplea
cuando esta SELECT se ejecuta mucho o para sacar
informes.
CREATE [OR REPLACE]
VIEW view_name [(column_list)]
AS select_statement

– Ejemplo:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, Price FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);

– Para borrar una vista habría que hacer:


DROP VIEW [IF EXISTS] view_name [, view_name];

Actividad: Montemos una vista de ejemplo 96


El lenguaje de definición datos


Por último, vamos a ver qué se genera al exportar
una base de datos creada y cómo se puede
importar un fichero SQL desde MySQL con
PHPMyAdmin.

Actividades de refuerzo: Realiza el ejercicio de Moodle a modo de simulación de


examen.
Actividad de ampliación: Realiza el curso de OpenWebinars
https://openwebinars.net/academia/portada/admin-bbdd-mysql-introduccion/ para ver
cómo se administra una base de datos MySQL

También podría gustarte