Unidad 3
Unidad 3
Unidad 3
●
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
5
Punto de partida
●
Para comparar, vamos a centrarnos en los más utilizadas:
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)
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
●
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
●
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
●
¿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
Access (Microsoft)
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:
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
●
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}]
●
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
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.
●
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;
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
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:
●
●
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] …
●
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
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
●
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;
– Ejemplo:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName, Price FROM Products
WHERE Price > (SELECT AVG(Price) FROM Products);
●
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.