Untitled

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 960

2

3
4
5
6
7
8
9
10
11
12
Fundamentos de bases de datos
1-2: Introducción a la base de datos
Prácticas
Ejercicio 1: Identificar las consideraciones de diseño de base de datos para los escenarios de casos dados

Visión general
En esta práctica, evaluará los datos que se deben obtener para crear un sencillo y eficaz
• Sistema de registro del alumno
• Sistema de gestión de bibliotecas

Tareas
1. El distrito escolar ABC desea crear un sistema de registro e información del alumno en línea para recopilar información
relacionada con los alumnos. El sistema se debe diseñar como un proceso en línea para permitir que los nuevos alumnos se
registren en línea. También debe permitir que los alumnos existentes actualicen y revisen toda la información. Cree una lista de
los datos importantes que se deben recopilar y almacenar en la base de datos de registro de alumnos.

2. La comunidad XYZ desea crear un sistema de gestión de bibliotecas. El objetivo es que la base de datos administre todas las
transacciones de la biblioteca. La base de datos debe almacenar todos los datos relevantes para la gestión de los libros, la
gestión de clientes, y las actividades diarias de la biblioteca. Cree una lista de los datos importantes que se deben recopilar y
almacenar en la base de datos de gestión de bibliotecas.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
Las palabras "datos" e "información" se suelen utilizar como sinónimos. Sin embargo, tienen significados
diferentes.
• Los datos son material sin procesar a partir del que puede sacar conclusiones; hechos de los que puede
deducir nuevos hechos.
• La información es conocimiento, inteligencia, una parte concreta de los datos con un significado o
función especial. La información suele ser el resultado de la combinación, comparación y realización de
cálculos con los datos.

6
La diferencia entre datos e información se puede explicar mediante un ejemplo como el de las
puntuaciones en las pruebas. En una clase, si cada alumno recibe una puntuación numerada, se pueden
calcular las puntuaciones para determinar la media de la clase. Se pueden calcular las medias de las clases
para determinar la media de la escuela. Por lo tanto, en este supuesto, ¿cómo se puede distinguir entre
datos e información?
• Para los datos, la puntuación en la prueba de cada alumno es una parte de los datos.
• La información es la puntuación media de la clase o la puntuación media de la escuela.

7
Toda organización necesita recopilar y mantener datos para satisfacer sus necesidades. Un sistema de
información se puede definir como un sistema formal para almacenar y procesar datos. La mayoría de las
organizaciones utiliza en la actualidad una base de datos para automatizar sus sistemas de información.
Una base de datos es una recopilación organizada de datos que se trata como una unidad. El objetivo de
una base de datos es recopilar, almacenar y recuperar datos relacionados para su uso por parte de las
aplicaciones de base de datos. Una aplicación de base de datos es un programa de software que interactúa
con una base de datos para acceder a los datos y manipularlos. Normalmente, una base de datos está
gestionada por un administrador de bases de datos (DBA).

8
Una base de datos relacional es una recopilación de registros que se almacenan en tablas. Cada tabla de la
base de datos relacional contiene filas de registros y columnas que contienen campos de información sobre
cada registro. Una tabla en una base de datos relacional también se puede denominar entidad. Una fila en
una base de datos relacional también se puede denominar instancia.
Cada tabla de registros tendrá una relación con otra tabla de registros si las dos tablas comparten un
campo (o columna).

9
En esta diapositiva se muestran dos tablas: Order Details y Customer. Las tablas están relacionadas entre sí
por un atributo común, ID y Customer ID.
Imagine un único pedido realizado por un cliente. Cada pedido contendrá uno o más detalles del pedido.
Cada detalle estará relacionado con un cliente.
Los datos proporcionan información sobre los detalles de los pedidos realizados por los clientes. Por
ejemplo, la compañía podría recopilar información sobre productos que se suelen adquirir en conjunto. Los
paquetes de productos podrían ofrecerse para optimizar la comercialización de los productos para los
clientes.

10
Un DBMS tiene los siguientes elementos:
• El código de núcleo gestiona la memoria y el almacenamiento para el DBMS.
• El repositorio de metadatos se denomina diccionario de datos.
• El lenguaje de consulta permite que las aplicaciones accedan a los datos.

11
Hardware: Partes físicas de una computadora; por ejemplo, teclado, pantalla, mouse, unidad de disco,
memoria.
Software: Programas (conjuntos de instrucciones) que indican al hardware lo que debe hacer.
Sistema operativo: Programa de software que controla y gestiona directamente el hardware; por ejemplo,
Microsoft Windows.
Aplicación: Programa de software que lleva a cabo tareas específicas en nombre de los usuarios de
equipos. Por ejemplo, Microsoft Word o Excel.
Cliente: Estación de trabajo o computadora de escritorio, que incluye pantalla, teclado y mouse. Los
clientes se comunican directamente con usuarios humanos de equipos.
Servidor: Computadora más potente que acepta las solicitudes de trabajo de los clientes, realiza el trabajo y
envía de nuevo los resultados al cliente.
Cada vez que se solicita información de una página web, la computadora cliente envía la solicitud a una
base de datos del servidor. El servidor recupera los datos de la base de datos, los convierte en información
útil y la envía de nuevo al cliente.

12
13
Las primeras aplicaciones informáticas se centraban en las tareas de oficina por naturaleza; por ejemplo,
nóminas, contabilidad e inventario. Estas aplicaciones accedían a los datos almacenados en los archivos de
la computadora, convertían los datos en información significativa y generaban informes para cumplir las
necesidades de la organización. Estos sistemas se denominaban sistemas basados en archivos.
La evolución durante décadas de la tecnología de computación, junto con las necesidades y demandas de
las organizaciones, ha supuesto el desarrollo de una tecnología de base de datos desde los primitivos
sistemas basados en archivos hasta los robustos sistemas de base de datos integrados de la actualidad.

14
15
16
El cambio de versión era uno de los problemas que se planteaban con varias aplicaciones en varias
estaciones de trabajo de cliente. El cambio de versión en una aplicación de software garantizaba que todos
y cada uno de los servidores y clientes tuvieran ese cambio de versión para el grid computing.

17
Grid computing trata la computación como una utilidad, al igual que la compañía eléctrica. No sabe dónde
está el generador o la forma en que está conectada la red eléctrica. Tan solo pide electricidad y la obtiene.

18
La mayoría de personas utilizan servicios en la nube (basados en la web) en todo momento casi sin darse
cuenta. Algunos ejemplos de computación en la nube son el almacenamiento de archivos en línea (como
fotografías), el uso de servicios de suscripción de películas o los juegos en línea.

19
20
21
22
• Las bases de datos se utilizan:
– Para realizar un seguimiento de las compras con tarjetas de débito y crédito, lo que permite generar
balances mensuales.
– Para integrar orígenes de información heterogéneos para actividades relacionadas con el negocio,
como compras en línea, reservas de paquetes de vacaciones y consultas médicas.
– En el sector sanitario, para mantener y realizar un seguimiento de los detalles de la asistencia
sanitaria a pacientes.
– En el área de la edición digital y bibliotecas digitales, para gestionar y proporcionar datos textuales y
multimedia.

23
24
Fundamentos de bases de datos
1-3: Tipos de modos de base de datos
Prácticas
Ejercicio 1: Identificar los modelos de bases de datos

Visión general
En esta práctica, tendrá que identificar el tipo de modelo de base de datos representado en las instantáneas proporcionadas del modelo.

Tareas
1. Identifique el tipo de modelo de base de datos representado en las instantáneas proporcionadas del modelo:

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
2
3
4
El modelado de datos es la primera parte del proceso de desarrollo de bases de datos. El modelado de
datos conceptual es el examen de un negocio y los datos de negocio con el fin de determinar la estructura
de la información de negocio y las reglas que la rigen. Esta estructura constituye la base del diseño de la
base de datos. Un modelo conceptual es relativamente estable durante largos períodos de tiempo. El
modelado de datos físico (o creación de base de datos) está relacionado con la implantación en un software
técnico y un entorno de hardware determinados. La implantación física depende en gran medida del
estado actual de la tecnología y está sujeta a cambios a medida que cambia rápidamente la tecnología
disponible.

5
6
Los archivos planos sirven como solución para tareas de base de datos simples. El diseño del archivo plano
incluye toda la información de la base de datos en una tabla o una lista con campos que representan todos
los parámetros. Un archivo plano puede contener varios campos, a menudo con datos duplicados que son
propensos a la corrupción de datos.

7
8
Cada campo solo contiene un valor. El tipo de entidad de un registro define qué campos contiene el
registro.
Un registro en el modelo de base de datos jerárquica se corresponde con una fila en el modelo de base de
datos relacional. Un tipo de entidad se corresponde con una tabla.
En un modelo de base de datos jerárquica:
• Cada registro secundario solo tiene un principal.
• Un registro principal puede tener uno o más registros secundarios.
Para recuperar datos de una base de datos jerárquica, es necesario recorrer todo el árbol a partir del nodo
raíz.
Ventajas:
• Adición y supresión sencilla de la información nueva
• Acceso más rápido a los datos en la parte superior de la jerarquía
Desventajas:
• Se ve aumentado el espacio de almacenamiento

9
• Acceso más lento a los datos en la parte inferior de la jerarquía

9
10
En un modelo de base de datos de red, cada registro puede tener varios registros principales y secundarios,
formando una estructura de gráfico generalizada. El modelo de red permite una forma más natural de
modelar la relación entre registros.

11
La diapositiva muestra un ejemplo de un modelo de red que almacena información sobre los detalles de la
cuenta bancaria de diferentes personas. En el ejemplo, los registros están conectados entre sí a través de
enlaces, representados por líneas.

12
Ventajas
• Menor mantenimiento
• Modelado del mundo real
• Alta capacidad de reutilización del código
Desventajas: Muchos sistemas de aplicaciones de información no se benefician del modelado orientado a
objetos porque es más adecuado para entornos dinámicos e interactivos.

13
En el gráfico de la diapositiva se muestra una clase Employee definida con dos atributos:
• El atributo id es el identificador del empleado.
• El atributo lastName es el apellido del empleado.
La clase Employee tiene dos métodos:
• getId()
• setId(String anId)
El atributo ID y el método getId() son privados y, por lo tanto, solo se puede acceder a ellos en la clase. El
atributo lastName y el método setId(String anId) son públicos y otras clases pueden acceder a ellos
también.
Al crear una instancia, los atributos almacenan información individual y privada relevante solo para el
empleado. La información contenida en una instancia de empleado se conoce solo para ese empleado en
particular. Cada instancia de Employee tiene su propio estado. Puede acceder a ese estado solo si el
creador de la clase lo define de forma que le proporcione acceso.

14
15
16
En el ejemplo de la diapositiva, la tabla Employees contiene una columna que se relaciona con el valor de
Department_ID de la tabla Departments. La inclusión de Department_ID define la relación en el modelo de
base de datos relacional.

17
18
Fundamentos de bases de datos
1-4: Requisitos de negocio
Prácticas
Ejercicio 1: Requisitos de negocio

Visión general
En esta práctica, analizará el escenario de caso proporcionado e identificará las reglas de negocio.

Tareas
1. LibBook es una biblioteca digital de éxito que alquila CD y proporciona acceso a Internet para examinar su repositorio de artículos
y revistas. Con el crecimiento del negocio, LibBook necesita mejorar su sistema de información para adaptarse a los cambios
propuestos en el negocio. LibBook atrae a nuevos miembros con facilidad y el número de miembros crece rápidamente.
Sin embargo, el número de miembros no es estable, lo que supone un motivo de preocupación. La idea principal es introducir
el concepto de inscripción en LibBook. Los miembros pagarán una cuota de miembro y, en un principio, habrá tres tipos de
miembros (corporativo, alumno, particular) aunque se pueden introducir otros más adelante. La inscripción para alumnos es
gratuita. Los miembros corporativos y de profesorado deben pagar una cuota pero se les otorgan privilegios. El tipo de miembro
solo se puede cambiar si se aporta una justificación válida.

Su tarea consiste en identificar las reglas de negocio y las restricciones asociadas a partir del escenario del caso
descrito.

2. El hospital Star Care es un hospital con varias especialidades que atiende las necesidades de diferentes pacientes. A cada
médico registrado en este hospital se le asigna un ID único que empieza por las letras "DC". El hospital garantiza que los médicos
asociados tienen un mínimo de siete años de experiencia laboral. Cada paciente se debe registrar en el hospital en su primera
visita. Cuando llega un paciente, se le asigna un número de paciente único que empieza por las letras "PT".

Su tarea consiste en identificar las reglas de negocio y las restricciones asociadas a partir del escenario del caso descrito.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 1, lección 4, ejercicio: Requisitos de negocio (objetivo 3 de S1L4)


Mediante el texto proporcionado en el escenario anterior, identifique los requisitos de negocio que le permitirán
comprender los procesos de negocio implicados en la ejecución de este tipo de organización. Utilice las
siguientes categorías como ayuda:
• Regla de negocio: se utiliza para comprender los procesos de negocio y la naturaleza, rol y ámbito de los
datos.
• Suposición: se puede definir como un hecho o afirmación que se da por sentado.
• Problema: se puede definir como una situación o escenario que requiere atención y una posible solución
para solventar la situación.

Elabore una lista de las necesidades de negocio, las reglas y las suposiciones según el escenario, la
investigación y los objetivos. (Las respuestas pueden variar).

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
• El componente básico de un archivo en un sistema de archivos es un elemento de datos. Los ejemplos
de elementos de datos en el mundo real son: apellido, nombre, dirección e ID de empleado.
• Una base de datos es un objeto más complejo. Es una recopilación de datos almacenados
interrelacionados que debe satisfacer las necesidades de muchos usuarios. Una base de datos también
debe cumplir las reglas del negocio y los procesos de la organización.
• Ventajas de utilizar una base de datos en lugar de un sistema de archivos simple:
– Disponibilidad de los datos para un amplio grupo de usuarios
– Integración de los datos para un acceso y modificación más sencillos al realizar transacciones
complejas
– Integridad de datos y reducción de redundancia de datos

5
El archivo plano representado en las diapositivas muestra información redundante sobre cada alumno. Las
modificaciones necesarias incluyen la identificación de cada alumno de forma única y la eliminación de las
columnas/campos recurrentes.

6
7
8
9
10
11
12
Se conoce como "restricción" a la limitación de una regla de negocio.

13
14
15
16
17
18
19
Fundamentos de bases de datos
2-1: Bases de datos relacionales
Prácticas
Ejercicio 1: Analizar las funciones de una base de datos relacional

Visión general
En esta práctica, analizará las funciones de las bases de datos de varias tablas a partir de un conjunto de ejemplos.

Tareas
1. Identifique las posibles tablas y campos asociados del escenario proporcionado.
Book.com es una tienda virtual en línea en Internet donde los clientes pueden examinar el catálogo y seleccionar los productos
que deseen.
a. Cada libro tiene un título, ISBN, año y precio. La tienda también conserva la información del autor y del editor de
cualquier libro.
b. Para los autores, la base de datos conserva el nombre, la dirección y la URL de su página inicial.
c. Para los editores, la base de datos conserva el nombre, la dirección, el número de teléfono y la URL de su sitio web.
d. La tienda tiene varios almacenes, cada uno de los cuales tiene un código, una dirección y un número de teléfono.
e. El almacén tiene en stock muchos libros. Un libro puede estar en stock en varios almacenes.
f. La base de datos registra el número de copias de un libro almacenadas en stock en varios almacenes.
g. La librería conserva el nombre, la dirección, el ID de correo electrónico y el número de teléfono de sus clientes.
h. Un cliente es propietario de varios carritos de la compra. El carrito de la compra se identifica mediante un Shopping_Cart_ID y
contiene varios libros.
i. Algunos carritos de la compra pueden contener más de una copia del mismo libro. La base de datos registra el número de
copias de cada libro que hay en cualquier carrito de la compra.
j. En ese momento, se necesitará más información para completar la transacción. Normalmente, se le pedirá al cliente que
rellene o seleccione una dirección de facturación, una dirección de envío, una opción de envío e información de pago como el
número de tarjeta de crédito. Se enviará una notificación por correo electrónico al cliente en cuanto se realice el pedido.

2. ABC Ltd planea automatizar su sistema de pedidos de venta y de control de stock. Un estudio de viabilidad recomienda
encarecidamente que se instale un sistema de base de datos relacional. Los detalles de ventas y de control de stock de ABC son
los siguientes:
a. Los clientes envían pedidos de productos. Cada pedido puede contener solicitudes de cantidades variables de uno o más
productos de la gama de ABC. ABC mantiene un archivo de stock que muestra los detalles de cada uno de los productos y el
proveedor preferido, la cantidad en stock, el nivel de nuevos pedidos y otros detalles.
b. ABC entrega los productos que tiene en el stock en respuesta al pedido del cliente y se genera una factura por los artículos
enviados. Los artículos que no están en stock se incluyen en una lista de pedidos pendientes y estos artículos normalmente
se vuelven a pedir al proveedor preferido. En ocasiones, los artículos se piden a orígenes alternativos.
c. En respuesta a las facturas que se envían a los clientes de ABC, estos envían los pagos. El pago puede corresponder a una
factura, aparte de una factura, a varias facturas o a facturas parciales.
d. Identifique las tablas y campos asociados del escenario anterior.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
Una base de datos de archivos planos es más sencilla y menos costosa de utilizar. Se ajusta a las
necesidades de muchos negocios pequeños y usuarios individuales.
Un archivo plano tiene muchas limitaciones porque contiene TODOS los datos en UNA tabla.
Estos son algunos inconvenientes adicionales de las bases de datos de archivos planos:
• No hay soporte para el acceso de varios usuarios
• Limitada a bases de datos pequeñas
• Funcionalidad limitada
• Problemas de integridad
• Sin seguridad
• Sin copia de seguridad ni recuperación
• No hay protección de datos en acceso simultáneo

6
7
Un sistema de gestión de bases de datos relacionales (RDBMS) almacena los datos en tablas. Cada tabla
recibe un nombre por parte del usuario que la crea. El usuario suele elegir un nombre relacionado con los
datos que se almacenarán en la tabla; por ejemplo, STUDENTS, EMPLOYEES, LOCATIONS. Cuando
se crea una tabla, el usuario también crea y nombra las columnas relacionadas con las características
específicas que se almacenan para cada registro.

8
9
En comparación con el sistema de archivos planos, el RDBMS tiene varias ventajas:
• Menos redundancia: En un sistema de archivos planos, hay mucha redundancia. Por ejemplo, los
nombres de autores se almacenan varias veces.
• Prevención de inconsistencias: Si se almacena el mismo fragmento de información en más de un lugar,
los cambios en los datos deben realizarse en todos los lugares en los que se almacenen los datos.
• Eficacia: Una base de datos suele ser más eficaz que un sistema de archivos planos, debido a que un
fragmento de información se almacena en menos ubicaciones.
• Integridad de los datos: En un sistema de base de datos, es más fácil mantener la integridad de los
datos porque a cada columna se asignan tipos de dato potentes.
• Confidencialidad: Es más fácil mantener la confidencialidad de la información si el almacenamiento de
los datos está centralizado en una ubicación.

10
La columna PAYROLL_ID es una clave única. Esto significa que el sistema no permite dos filas con el
mismo payroll_id.
En este ejemplo, la clave foránea department_id hace referencia a una fila en la tabla
DEPARTMENTS. Puede saber que Dana Smith trabaja en el departamento 10. Si deseara obtener más
información sobre el departamento de Dana Smith, debería consultar la fila department_id = 10 en
la tabla DEPARTMENTS.

11
12
13
14
Fundamentos de bases de datos
2-2: Modelos de datos conceptuales y físicos
Prácticas
Ejercicio 1: Modelos Conceptuales y Físicos

Visión general
En esta práctica, ilustrará la diferencia entre una idea y un resultado físico.

Tareas
1. Proporcione cinco razones para crear un modelo de datos conceptual.

2. Enumere dos ejemplos de modelos conceptuales y modelos físicos.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
6
Un modelo de datos lógico describe los datos con tantos detalles como sea posible, sin tener en cuenta
cómo se implantará físicamente en la base de datos. Normalmente se deriva de un modelo de datos
conceptual.

* Hablaremos sobre la opcionalidad y la cardinalidad más adelante en el curso

7
El modelado físico se ocupa de la conversión del modelo de datos lógico en un modelo de base de datos
relacional. Cada modelo relacional puede tener uno o más modelos físicos, uno para cada RDBMS en el que
despliegue.

* Hablaremos sobre las vistas, índices y otros objetos de base de datos más adelante en el curso

8
9
El modelo conceptual está relacionado con la visión del mundo real y la comprensión de los datos. El
modelo físico especifica cómo se ejecutará en una instancia de gestión de la base de datos concreta.

10
11
El diagrama se creó mediante la herramienta Oracle SQL Data Modeling, de la que hablaremos en la
Sección 4 del material del curso.

12
El diagrama se creó mediante la herramienta Oracle SQL Data Modeling, de la que hablaremos en la
Sección 4 del material del curso.

13
14
El diagrama se creó mediante la herramienta Oracle SQL Data Modeling, de la que hablaremos en la Sección 4
del material del curso.

15
16
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 2, lección 3, ejercicio 1: Entidades y atributos

Identificación de entidades (objetivo 1 de S2L3)


Mediante el análisis del texto en el escenario especificado, identifique las posibles entidades que tendrán que
representarse en un sistema de base de datos relacional. Las entidades suelen ser los sustantivos de la descripción del
escenario; sin embargo, no todos los sustantivos se convierten en entidad. Piénselo detenidamente, pero recuerde que
está identificando las posibles entidades y no creando una lista definitiva.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 2, lección 3, ejercicio 2: Entidades y atributos

Identificación de atributos (objetivo 2 de S2L3)

Para entender mejor el sistema, se celebró una reunión con el manager de la tienda Oracle Baseball League. A
continuación se ofrecen detalles de la transcripción de la conversación mantenida:

Transcripción de la reunión

Entrevistador: En la información proporcionada, ha indicado que existen dos tipos de cliente: individual y equipo. ¿Qué
información guarda sobre los clientes y cómo distingue los dos tipos de cliente?

Manager: De todos los clientes, realizamos un seguimiento del nombre, la dirección, el número de teléfono, la dirección
de correo electrónico y, dado el caso, el equipo al que pertenecen. También se realiza un seguimiento del saldo actual
del cliente en nuestro sistema.

Entrevistador: Ha dicho que los clientes pueden realizar un pedido de cualquier artículo de la lista de inventario. ¿Qué
tipos de artículos pueden comprar?

Manager: Los clientes individuales pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas
serigrafiadas y pantalones. Además, los equipos pueden realizar pedidos de toda la equipación, así como de pelotas,
camisetas de calentamiento y para jugar, y obtener un descuento sobre la lista de precio según el número de jugadores
de dicho equipo. Cuando un equipo compra artículos de la tienda, es necesario que el cliente registrado de ese equipo
realice el pedido.

Entrevistador: ¿Tiene alguna información específica sobre artículos vendidos que desea registrar en el sistema?

Manager: Los clientes nunca compran artículos sin verlos, así que siempre hay una descripción y un precio disponible. El
seguimiento de los artículos de inventario forma parte del negocio, así como la descripción y el precio. Realizamos un
seguimiento del nombre, color (si procede), tamaño (si procede) y categoría del artículo. Hay tres categorías de artículos
que utilizamos: ropa, equipación y otros. Para nuestro inventario, también realizamos un seguimiento del coste unitario
del mayorista, así como del número de unidades disponibles; cuando no disponemos de unidades, se registra un cero en
el sistema.

Entrevistador: ¿Cómo registra los artículos que han pedido los clientes?

Manager: Cuando un cliente realiza un pedido, registramos los siguientes detalles de la compra: la fecha, los artículos
comprados, el tamaño del artículo, el color, el número de unidades y el precio de cada unidad. También nos gustaría
guardar el precio total del pedido para todos los artículos solicitados.

Entrevistador: Existen tres representantes de ventas en la empresa, ¿cuál es su función?

Manager: Cada cliente de equipo tiene asignado un representante de ventas como vendedor que trabaja a comisión; no
se permite que dos vendedores atiendan al mismo cliente. Aunque los representantes de ventas solo atienden a los
equipos, es sabido que atienden quejas de los clientes individuales.

Entrevistador: ¿Cómo registra los detalles de los representantes de ventas en el sistema?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Manager: Para cada uno de los tres representantes de ventas, realizamos un seguimiento de su nombre, dirección,
teléfono, dirección de correo electrónico, comisión total y tipo de comisión.

Analizando el texto del escenario especificado, identifique las posibles entidades que se utilizarán para almacenar
información sobre las entidades identificadas previamente. Los atributos suelen encontrarse al identificar los sustantivos
que describen otros nombres (nuestras entidades).

Posibles entidades

• Customer

• Team

• Sales Representative

• Order

• Item

• Inventory List

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 2, lección 3, ejercicio 3: Entidades y atributos

Identificación de atributos obligatorios/opcionales (objetivo 3 de S2L3)

Utilice la transcripción de la entrevista y las entidades y atributos ya identificados en la lección anterior y, a


continuación, marque cuáles cree que serán obligatorios (*) u opcionales (o). Tenga en cuenta que los atributos
opcionales pueden estar en blanco, a diferencia de los obligatorios, que deben tener un valor. Compruebe si alguno de
los atributos podría describirse como volátil; si es así, pueden cambiarse por un equivalente no volátil.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 2, lección 3, ejercicio 4: Entidades y atributos

Uso de la notación de Barker (objetivo 4 de S2L3)


Utilice la notación de Barker para visualizar la información representada por las entidades y los atributos identificados.
Para facilitar la comprensión de cada softbox, ponga los atributos en su orden lógico y coloque todos los atributos
obligatorios antes de los opcionales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Fundamentos de bases de datos
2-3: Entidades y atributos
Prácticas
Ejercicio 1: Identificar y representar las entidades como el comienzo de un ERD

Visión general
En esta práctica, identificará y agregará las entidades de una base de datos académica o, en otras palabras, un sistema de gestión
de escuela.

Para su comodidad, aquí se muestra un resumen de cómo funciona la base de datos académica (sistema de gestión de escuela):
a. Una escuela/universidad tiene diferentes departamentos que ofrecen cursos a los alumnos en una determinada sesión
académica.
b. Cada uno de estos cursos lo imparte un profesor.
c. Los alumnos pueden inscribirse en diferentes cursos en una sesión académica.
d. Además de los detalles de registro, la universidad/escuela debe mantener también la información principal sobre el alumno.
e. El departamento mantiene los datos de asistencia del alumno, que determinarán si un alumno puede optar a los exámenes
de esa sesión académica o no.
f. Para cada sesión académica, se realizan exámenes y los resultados se comparten con el alumno en un período de tiempo
estipulado.
g. El departamento también mantiene un registro del tiempo de conexión y desconexión del profesorado para sus necesidades
de generación de informes.

Tareas
1. Con la información proporcionada anteriormente, identifique y cree las entidades del sistema de gestión de escuela.

Ejercicio 2: Identificar y agregar atributos y la correspondiente notación de obligatorio y opcional


para ERD

Visión general
En esta práctica, identificará los atributos y la notación de opcionalidad asociada a ellos en las entidades que ha creado en el ejercicio 1.

Tareas
1. Agregue los atributos adecuados y si son opcionales u obligatorios (*, °) a todas las entidades de la base de datos académica.

COURSE DEPARTMENT STUDENT FACULTY

PARENT EXAM
ACADEMIC
SESSION INFORMATION

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Database Foundations
2-3
Entidades y atributos

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados.

2
Objetivos
• En esta lección se abordan los siguientes objetivos:
−Identificar entidades
−Identificar atributos
−Identificar atributos obligatorios, opcionales, volátiles y no
volátiles
−Describir las notaciones Barker, Bachman y de ingeniería de la
información

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 3

3
Entidad
• Información de la que se debe realizar un seguimiento
• Nombre de cosas que puede mostrar en una lista
(normalmente en forma de sustantivo)

EMPLOYEE DEPARTMENT

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 4

Las entidades son categorías de cosas que son importantes para un negocio y sobre las que se debe
conservar información. Las entidades contienen datos e información que el negocio debe conocer y
recordar. Estos son algunos ejemplos de entidades:
• PERSON: Agent, insured, employee, customer
• PLACE: State, country, municipality
• THING: Inventory item, vehicle, product
• CONCEPT: Policy, risk, coverage, job
• ORGANIZATION: Agency, department
• EVENT: Service request, claim, election

4
Identificación de entidades: Ejemplo
La gerente del hotel del distrito, Sharon Ferguson,
desea gestionar la información que guarda su
compañía sobre sus hoteles, huéspedes y
habitaciones. Sharon es responsable de varios hoteles
en distintas ubicaciones. Quiere saber qué
habitaciones tiene en cada hotel y el precio de cada
una. También desea saber qué habitaciones ha
reservado un huésped para una fecha determinada.

GUEST ENTIDADES HOTEL

ROOM RESERVATION

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 5

5
Tipos de entidad
• Una entidad se puede clasificar como uno de los
siguientes tipos:

Nombre Descripción Ejemplo


Principal Existe de forma CUSTOMER, INSTRUCTOR
independiente
Característica Existe gracias a otra ORDER, CLASS OFFERING
entidad (principal)
Intersección Existe gracias a dos o más ORDER ITEM, CLASS
entidades ENROLLMENT

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 6

6
Entidades e instancias
JOB
• Las entidades
oficinista
contienen instancias violinista
controlador
• Una instancia de contable financiero
camarera
entidad es una única gestor
profesor
incidencia de una
entidad
Entidad Instancia
• Las entidades
PERSON John Smith
representan un juego
PRODUCT Uña de cobre de 2,5 x 35 mm
de instancias que son
de interés para un PRODUCT Uña
TYPE
negocio concreto
JOB Violinista
Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 7

Una instancia de una entidad puede ser una entidad por derecho propio. Por ejemplo, la instancia
"violinista" de la entidad JOB podría ser el nombre de otra entidad con instancias como Tim Kary o Jerry
Gam.
Al final del proceso de modelado de entidades, estas se transforman normalmente en tablas, donde cada
una de las filas representa una instancia individual.

7
Ejercicio 1 del proyecto

• DFo_2_3_1_Project
−Base de datos de la tienda Oracle Baseball League
Identificación de entidades

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 8

8
Atributos
• Los atributos describen entidades y son la información
específica que se debe conocer
• Se trata de los detalles de una propiedad de un
solo valor de una entidad

Age Name

Phone
Address
Number

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 9

Los atributos describen una entidad mediante la calificación, identificación, clasificación, cuantificación o
expresión del estado de la entidad. Los atributos representan un tipo de descripción o detalle, no una
instancia.
Los nombres de atributo aparecen en singular. Un valor de atributo puede ser un número, una cadena de
caracteres, una fecha o una imagen. Cada atributo tiene un tipo de dato específico en la base de datos.

9
Características de los atributos
• Los atributos se muestran en el cuadro de entidad del
ERD
• Los nombres de atributo aparecen en singular y en
minúsculas, o mayúsculas y minúsculas
• En la mayoría de los casos, el nombre del atributo no
debe incluir el nombre de la entidad, porque los
atributos se cualifican con el nombre de la entidad

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 10

10
Características de los atributos
• Los atributos se clasifican de las siguientes formas:
−Obligatorios (no se permiten valores nulos), indicados
con un *
−Opcionales (se permiten valores nulos), indicados con
una "o" en minúscula

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 11

11
Atributos volátiles y no volátiles
• Los atributos volátiles son atributos inestables.
−Ejemplo: Age
• Los atributos no volátiles son atributos estables.
−Ejemplo: Birth Date

EMPLOYEE
ID
First Name
Atributo Middle Name
no volátil
Date of Birth

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 12

12
Ejercicio 2 del proyecto

• DFo_2_3_2_Project
−Base de datos de la tienda Oracle Baseball League
−Identificación de atributos

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 13

13
Atributos obligatorios y opcionales
• Los atributos obligatorios deben tener un valor
• Los atributos opcionales pueden no tener un valor y
pueden estar en blanco (valor nulo)

EMPLOYEE
* ID Atributos
obligatorios
* First Name
Atributos
o Middle Name
opcionales
o Date of Birth

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 14

14
Atributos únicos y compuestos
• Los atributos únicos o atómicos son los atributos que
no se pueden dividir en subpartes
• Los atributos compuestos son los atributos que se
pueden dividir en subpartes más pequeñas que
representan atributos básicos con diferentes
significados propios
EMPLOYEE
Name
ID
First Middle Last Atributo Atributo
Name Name Name compuesto único

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 15

El ID de empleado, la edad y el sexo son ejemplos de atributos simples.

15
Atributos de un único valor y de varios valores
• Los atributos de un único valor pueden tener un solo
valor en un momento concreto
−Ejemplo: Student Last Name
• Los atributos de varios valores pueden tener más de un
valor al mismo tiempo
−Ejemplo: Address

EMPLOYEE

Last_ Name Address


Atributo de Atributo de
un único valor varios valores

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 16

16
Ejercicio 3 del proyecto

• DFo_2_3_3_Project
−Base de datos de la tienda Oracle Baseball League
Identificación de atributos obligatorios/opcionales

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 17

17
Notación de Barker: Reglas para representar las
entidades
• Una entidad se representa mediante un rectángulo con
las esquinas redondeadas
• La entidad debe tener un nombre y el nombre se debe
colocar dentro de la entidad en la esquina superior
izquierda
• El nombre de la entidad debe estar en mayúsculas
• El nombre de la entidad debe estar en singular

EMPLOYEE

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 18

En este curso se utiliza la notación de Barker.

18
Notación de Barker: Reglas para representar los
atributos
• Los atributos se deben escribir para que todos los
usuarios, y no solo los desarrolladores, puedan
comprenderlos
• Los atributos se deben escribir con la primera letra de
cada palabra en mayúsculas y el resto en minúsculas
• Junto a cada atributo se debe colocar un símbolo que
representa el tipo de atributo
(* si es obligatorio u opcional, EMPLOYEE
y # si es un UID) # Id
* First Name
* Last Name
* Date of Birth
* Telephone Number
Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 19

19
Notación de Barker: Reglas para representar
relaciones
• Una relación puede existir como máximo entre dos
entidades
• Puede existir una relación en la misma entidad
(recursiva)
• Una relación tiene dos perspectivas
• Ambas perspectivas de una relación se deben etiquetar

EMPLOYEE DEPARTMENT
works in
contains

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 20

20
Notación de Bachman
EMPLOYEE
• Entidad (representada P Id
con un cuadro) * First Name
* Last Name
• Atributos * Date of Birth
• Líneas de relación Telephone Number

EMPLOYEE works in DEPARTMENT


contains

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 21

La notación de Bachman también es un modelo binario.


• Atributos:
– Se muestra * para indicar que no es nulo y que no hay ninguna notación de atributos nulos.
– Se muestra P para el UID y F para el atributo creado a través de la relación.

• Líneas de relación:
– Se muestra una flecha en lugar de una pata de gallo para la cardinalidad máxima.
– Se muestra un círculo abierto o un círculo relleno en lugar de una línea discontinua y una línea sólida para la cardinalidad
mínima.

La relación se representa como una línea que conecta las entidades asociadas. A la relación se le asigna una
frase que describe la asociación en ambos extremos de la línea.
En la notación de Bachman, una subclase se representa como un cuadro interno dentro de la superclase.

21
Notación de ingeniería de información

EMPLOYEE works in
DEPARTMENT

contains

Un EMPLOYEE solo trabaja en un DEPARTAMENT.


Un DEPARTAMENT contiene cero o más EMPLOYEES.

cero o más cero o uno

uno o más solo uno

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 22

La notación de ingeniería de información también es un método binario. Es sencillo y fácil de leer, y se


ajusta perfectamente a la lógica de alto nivel y al modelado de datos de la empresa.
No permite una relación ternaria y no muestra los atributos relacionados con una relación. Las
restricciones tanto de cardinalidad como de participación se combinan en la notación de mínimo/máximo
(barra y pata de gallo).
La única desventaja de esta notación es que no soporta la identificación de atributos de una entidad.

22
Notaciones del modelo de datos
Notación Notación de Notación de Ingeniería de la
(Leer de izquierda a derecha)
Barker Bachman información
Cero o uno

Solo uno

Cero o más

Una o más

Llave primaria/ # P
clave única

Nota: En este curso se utiliza la notación de Barker

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 23

23
Notaciones del modelo de datos: Ejemplos

EMPLOYEE DEPARTMENT
Notación de works in
Barker contains

Notación de EMPLOYEE works in DEPARTMENT


Bachman contains

Notación de
EMPLOYEE works in DEPARTMENT
ingeniería de
información contains

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 24

24
Ejercicio 4 del proyecto

• DFo_2_3_4_Project
−Base de datos de la tienda Oracle Baseball League
−Uso de la notación de Barker

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 25

25
Resumen
• En esta lección, debe haber aprendido a hacer lo
siguiente:
−Identificar entidades
−Identificar atributos
−Identificar atributos obligatorios, opcionales, volátiles y no
volátiles
−Describir las notaciones Barker, Bachman y de ingeniería de la
información

Dfo 2-3
Entidades y atributos Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 26

26
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 2, lección 4, ejercicio 1: Identificadores únicos

Reconocimiento de identificadores únicos o UID (objetivo 1 de S2L4)

Mediante los softboxes de notación de Barker, creados en el ejercicio anterior, identifique las posibles claves de
candidatos (atributos que pueden usarse para identificar una entidad de forma exclusiva) que haya en las entidades.

• Si puede identificar todos los UID portadores de información (natural), agregue un signo # para indicar la
opcionalidad del atributo y desplácelo a la parte superior de la lista de atributos.
• Si hay más de un atributo (compuesto) que combinados convierten la entidad en única, agregue un signo #
antes de cada nombre de atributo y desplace todos ellos a la parte superior de la lista.

Posible entidades y atributos

CUSTOMER
ORDER
* Name
* Date
* Address
* Items purchased
* Phone number
* Item size
* Email
* Color
* Current balance
* Price
o Team they belong to
* Number of units
* Total Order Price

TEAM
ITEM
* Name
* Name
* Number of players
* Description
o Discount
* Price
* Category
SALES o Color
REPRESENTATIVE o Size
* Name
* Address
* Phone number INVENTORY LIST
* Email * Cost of the unit
* Commission rate * Units on hand

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 2, lección 4, ejercicio 2: Identificadores únicos

Reconocimiento de identificadores únicos artificiales (objetivo 2 de S2L4)

Mediante los softboxes de notación de Barker creados anteriormente, identifique y asigne los identificadores únicos que
se utilizarán para identificar de forma exclusiva las entidades.

• Si no se ha asignado ningún identificador portador de información, asigne uno artificial. Normalmente,


utilizamos el ID o número como nombre del identificador artificial.
• Si se ha reconocido un identificador portador de información, deberá elegir si lo va a utilizar como
identificador único primario o secundario. Si va a utilizarlo como un identificador secundario, deberá crear
un identificador artificial e incluir el signo # del identificador portador de información entre paréntesis.

Posible entidades y atributos

CUSTOMER ORDER
# Email * Date
* Name * Items purchased
* Address * Item size
* Phone number * Color
* Current balance * Price
o Team they belong to * Number of units
* Total Order Price

TEAM
ITEM
* Name
* Name
* Number of players
* Description
o Discount
* Price
* Category
SALES o Color
REPRESENTATIVE o Size
# Email
* Name
* Address INVENTORY LIST
* Phone number * Cost of the unit
* Commission rate * Units on hand

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
2-4: Identificadores únicos
Prácticas
Ejercicio 1: Identificar el identificador único y las llaves primarias correspondientes

Visión general
En esta práctica, identificará los identificadores únicos y las correspondientes llaves primarias de los escenarios especificados.

Tareas
1. ¿Cómo se busca una canción determinada en una recopilación completa? ¿Cuál sería un identificador único de SONG?

2. Piense en todos los alumnos de la clase. Cada alumno se describe mediante diferentes rasgos o atributos. ¿Qué atributo o
atributos permiten seleccionar un único alumno respecto al resto de la clase?

3. Para cada entidad, seleccione el atributo que pueda ser el identificador único de cada entidad.

Entidad: STUDENT
Atributos: student ID, first name, last name, address

Entidad: MOVIE
Atributos: title, date released, producer, director

Entidad: LOCKER
Atributos: size, location, number

Ejercicio 2: Identificar los identificadores únicos y agregarlos al ERD

Visión general
En esta práctica, identificará los identificadores únicos y los agregará a un ERD.

Tareas
1. Utilice el ERD de la base de datos académica de los ejercicios anteriores para identificar lo siguiente:
a. Identificadores únicos
b. Identificadores únicos candidatos

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
El UID puede ser portador de información cuando sus valores tienen algún significado de negocio. Un UID
no portador de información en ocasiones se conoce como una clave artificial. Un UID portador de
información en ocasiones se conoce como una clave natural.

6
7
8
9
10
11
12
No existe ninguna convención sobre la creación de diagramas estándar para etiquetar UID secundarios.

13
14
15
16
17
18
19
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 2, lección 5, ejercicio 1: Relaciones

Reconocer ejemplos de relaciones (objetivo 1 de S2L5)

Las relaciones representan una asociación entre dos o más entidades. Mediante las reglas de negocio, identificadas
anteriormente en este proyecto y enumeradas a continuación, identifique las posibles asociaciones entre las entidades.

Reglas de negocio
• Los clientes pueden ser individuales o representar un equipo.
• Los clientes pueden adquirir artículos de la lista de inventario.
• Los equipos obtienen descuentos en función del número de jugadores.
• Las compras de los clientes se almacenan como pedidos en la base de datos.
• Los representantes de ventas trabajan principalmente con clientes de equipos, pero también pueden tratar con
clientes individuales.

Posible entidades y atributos

ORDER
CUSTOMER
# Id
# Number
* Date
(#) Email
* Items purchased
* Name
* Item size
* Address
* Color
* Phone number
* Price
* Current balance
* Number of units
o Team they belong to
* Total Order Price

TEAM ITEM
# Id # Number
* Name * Name
* Number of players * Description
o Discount * Price
* Category
o Color
SALES o Size
REPRESENTATIVE
# Id
(#) Email
* Name INVENTORY LIST
* Address # Id
* Phone number * Cost of the unit
* Commission rate * Units on hand

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League
Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 2, lección 5, ejercicio 2: Relaciones

Identificar la opcionalidad de las relaciones (objetivo 2 de S2L5)

Las relaciones son bidireccionales y deben ser obligatorias u opcionales.

Parte 1:
Para las relaciones identificadas en el ejercicio anterior, escriba la opcionalidad de la relación entre ambas entidades
(recuerde que la relación existe en ambas direcciones); ya se ha completado la primera.

CUSTOMER TEAM
# Number #Id
(#) Email * Name
* Name
* Address * Number of players
* Phone number o Discount
* Current balance
o Team they belong to

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
De izquierda a derecha
• Cada CUSTOMER puede representar a un TEAM.
De derecha a izquierda
• Cada TEAM debe estar representado por un CUSTOMER.

CUSTOMER SALES
# Number REPRESENTATIVE
(#) Email # Id
* Name (#) Email
* Address * Name
* Phone number * Address
* Current balance * Phone number
o Team they belong to * Commission rate

De izquierda a derecha

De derecha a izquierda

CUSTOMER ORDER
# Number # Id
(#) Email * Date
* Name * Items purchased
* Address * Item size
* Phone number * Color
* Current balance * Price
o Team they belong to * Number of units
* Total Order Price
De izquierda a derecha

De derecha a izquierda

ORDER
# Id ITEM
* Date # Number
* Items purchased * Name
* Item size * Description
* Color * Price
* Price * Category
* Number of units o Color
* Total Order Price o Size

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
De izquierda a derecha

De derecha a izquierda

ITEM INVENTORY LIST


# Number #Id
* Name * Cost of the unit
* Description * Units on hand
* Price
* Category
o Color
o Size

De izquierda a derecha

De derecha a izquierda

Parte 2:
Las líneas de relación representan una relación bidireccional entre dos entidades; por lo tanto, debe
considerarlas dos líneas independientes que se originan en su entidad y se cruzan en el medio. Mediante las
descripciones que anotó en la parte 1, complete las líneas de relación para que representen la opcionalidad de
cada relación; ya se ha completado la primera.

CUSTOMER TEAM
# Number #Id
(#) Email * Name
* Name * Number of players
* Address o Discount
* Phone number
* Current balance
o Team they belong to

CUSTOMER SALES
# Number REPRESENTATIVE
(#) Email # Id
* Name (#) Email
* Address * Name
* Phone number * Address
* Current balance * Phone number
o Team they belong to * Commission rate

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
CUSTOMER ORDER
# Number # Id
(#) Email * Date
* Name * Items purchased
* Address * Item size
* Phone number * Color
* Current balance * Price
o Team they belong to * Number of units
* Total Order Price

ORDER
# Id ITEM
* Date # Number
* Items purchased * Name
* Item size * Description
* Color * Price
* Price * Category
* Number of units o Color
* Total Order Price o Size

ITEM INVENTORY LIST


# Number #Id
* Name * Cost of the unit
* Description * Units on hand
* Price
* Category
o Color
o Size

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 2, lección 5, ejercicio 3: Relaciones

Identificar la cardinalidad de las relaciones (objetivo 3 de S2L5)

Para las relaciones identificadas en el ejercicio anterior, determine la cardinalidad mediante el análisis de la descripción
proporcionada para cada relación. Si la descripción utiliza "un" o "una", debería ser una relación de 1 (punta única); sin
embargo, si utiliza "varios" o "uno o más", debería ser una relación M (pata de gallo). Agregue la cardinalidad a las
siguientes entidades agregando cualquier notación de pata de gallo necesaria.

CUSTOMER TEAM
# Number #Id
(#) Email * Name
* Name * Number of players
* Address o Discount
* Phone number
* Current balance
o Team they belong to

• Cada CUSTOMER puede representar a un TEAM.


• Cada TEAM debe estar representado por un CUSTOMER.

CUSTOMER SALES
# Number REPRESENTATIVE
(#) Email # Id
* Name (#) Email
* Address * Name
* Phone number * Address
* Current balance * Phone number
o Team they belong to * Commission rate

• Cada CUSTOMER se puede asignar a un SALES REPRESENTATIVE.


• Cada SALES REPRESENTATIVE debe asignarse a una o más entidades CUSTOMER.

CUSTOMER ORDER
# Number # Id
(#) Email * Date
* Name * Items purchased
* Address * Item size
* Phone number * Color
* Current balance * Price
o Team they belong to * Number of units
* Total Order Price

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
• Cada CUSTOMER debe realizar una o más entidades ORDER.
• Cada ORDER debe realizarlo un CUSTOMER.

ORDER
# Id ITEM
* Date # Number
* Items purchased * Name
* Item size * Description
* Color * Price
* Price * Category
* Number of units o Color
* Total Order Price o Size

• Cada ORDER debe incluir una o más entidades ITEM.


• Cada ITEM puede ser parte de una o más entidades ORDER.

ITEM INVENTORY LIST


# Number #Id
* Name * Cost of the unit
* Description * Units on hand
* Price
* Category
o Color
o Size

• Cada ITEM debe estar en una INVENTORY LIST.


• Cada INVENTORY LIST puede incluir una o más entidades ITEM.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 2, lección 5, ejercicio 4: Relaciones

Uso de una matriz de relaciones (objetivo 5 de S2L5)

Una matriz de relaciones muestra si cada entidad de fila de la parte izquierda de la matriz se relaciona con cada entidad
de columna que se muestra en la parte superior de la matriz y cómo lo hacen.
• Si una entidad de fila se relaciona con una entidad de columna, el nombre de esa relación se muestra en el
cuadro de intersección.
• Si una entidad de fila no se relaciona con una entidad de columna, el cuadro de intersección está vacío.
• Las relaciones recursivas se pueden representar colocando el nombre de dicha relación en la diagonal.

Parte 1:
Cree una matriz de relaciones para validar las relaciones que ya ha identificado a lo largo de este proyecto. Utilice las
descripciones de las entidades para crear los nombres de la relación en el cuadro de intersección.

Parte 2:
Utilice los nombres que ha agregado a los cuadros de intersección de la matriz de relaciones para agregar las etiquetas
correctas a las relaciones correspondientes de los ERD.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
2-5: Relaciones
Prácticas
Ejercicio 1: Identificar las relaciones del ERD

Visión general
En esta práctica, identificará las relaciones a partir de los diagramas ERD y escribirá las sentencias en lenguaje ERD.

Tareas
1. Interprete la relación. ¿Se corresponde el texto con el diagrama?

a. Cada EMPLOYEE se puede asignar a uno o más DEPARTMENTs.


Cada DEPARTMENT debe responsabilizarse de uno o más EMPLOYEEs.

b. Cada EMPLOYEE se debe asignar a un único DEPARTMENT.


Cada DEPARTMENT debe responsabilizarse de uno o más EMPLOYEEs.

c. Cada EMPLOYEE se debe asignar exactamente a un DEPARTMENT.


Cada DEPARTMENT puede ser responsable exactamente de un EMPLOYEE.

2. Interprete cada relación del modelo que aparece a continuación. Para cada relación de ERD, escriba la sentencia ERD y sus
comentarios. Utilice sus conocimientos sobre personas y ciudades normales en sus comentarios.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Ejercicio 2: Analizar y modelar relaciones

Visión general
En esta práctica, analizará y modelará las relaciones para las siguientes entidades que ha creado anteriormente en la base de datos
académica.

Tareas
1. Escriba en lenguaje ERD cada una de las relaciones de la base de datos académica, incluyendo los nombres de relación,
la opcionalidad y la cardinalidad. Dibuje el ERD incluyendo las relaciones.

COURSE DEPARTMENT STUDENT


# ID # ID # ID
* Name * Name * First Name
* Head * Last Name
* Registration Year
* Email
* Number of Working Days
* Number of Days Off
FACULTY ACADEMIC SESSION o Eligibility for Exam
# ID # ID
* First Name * Name
* Last Name EXAM
* Email # ID
* Login Date * Type
* Login Time o Start Date
o Details PARENT INFORMATION
* Name
# ID
o Description
* Parent 1 First Name
* Parent 1 Last Name
o Parent 2 First Name
o Parent 2 Last Name

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
2
3
4
Una relación representa las reglas de negocio que enlazan entidades. Cada relación siempre tiene dos
reglas de negocio. En el ejemplo de la diapositiva, las reglas de negocio son:
• Un DEPARTMENT puede contener uno o varios EMPLOYEEs.
• Un EMPLOYEE debe asignarse a un único DEPARTMENT.

5
En un modelo de datos conceptual, una relación es cualquier asociación, vinculación o conexión entre las
entidades de interés para el negocio.

6
7
8
Para enlazar estas dos tablas y determinar la información sobre empleados y departamentos, se debe
insertar una columna DEPARTMENT_ID correspondiente en la tabla EMPLOYEES para hacer referencia a
los ID de departamento existentes en la tabla DEPARTMENTS. En este caso, la columna DEPARTMENT_ID
de la tabla EMPLOYEES es una clave foránea que hace referencia a una columna con el mismo nombre en
la tabla DEPARTMENT. Este es un ejemplo de una relación entre dos tablas.

9
10
11
12
13
14
15
La cardinalidad de una relación solo responde si el número es singular o plural; no da como respuesta un
número plural específico.

16
La primera pregunta que debemos responder es la siguiente: ¿Cuál es la cardinalidad mínima en cada
dirección de la relación?
En el ejemplo de la diapositiva, responda a las siguientes preguntas:
1. ¿Debe un EMPLOYEE asignarse a un DEPARTMENT? La respuesta es "siempre".
2. ¿Existe alguna situación en la que un EMPLOYEE no se asigne a un DEPARTMENT?
La respuesta es "no". Siempre se debe asignar un EMPLOYEE a un DEPARTMENT. (Obligatorio)
3. ¿Debe un DEPARTMENT estar compuesto por un EMPLOYEE?
La respuesta es "no". Un DEPARTMENT no tiene que estar compuesto por un EMPLOYEE. (Opcional)
Cuando la cardinalidad mínima es opcional, el valor puede ser cero. Cuando la cardinalidad mínima es
obligatoria, el valor debe ser al menos uno.
Tenga en cuenta que la línea de relación en la diapositiva se trazó intencionadamente sin la cardinalidad
máxima.

17
La segunda pregunta que debemos responder es la siguiente: ¿Cuál es la cardinalidad máxima en cada
dirección de la relación?
En el ejemplo de la diapositiva, responda a las siguientes preguntas:
1. ¿Debe un EMPLOYEE asignarse a más de un DEPARTMENT?
La respuesta es "no". Siempre se debe asignar un EMPLOYEE a un único DEPARTMENT. (Uno)
2. ¿Puede un DEPARTMENT estar compuesto por más de un EMPLOYEE?
La respuesta es "sí". Un DEPARTMENT puede estar compuesto por uno o más EMPLOYEEs. (Varios)
Cuando la cardinalidad máxima es uno, el valor solo puede ser uno. Cuando la cardinalidad máxima es
varios, el valor puede ser uno o más.

18
19
20
Hay tres tipos de relaciones:
• De varios a uno (M:1) o de uno a varios (1:M): Hay una pata de gallo en un lado de la relación. La dirección
de la pata de gallo determina si la relación es M:1 o 1:M. Este tipo de relación es el más común.
• De varios a varios (M:M) Hay una pata de gallo en ambos lados de la relación. Es habitual ver relaciones
M:M en un ERD de alto nivel al inicio de un proyecto.
• De uno a uno (1:1): Este tipo de relación es una línea sin pata de gallo en ninguno de los lados. Estos tipos
de relaciones son poco comunes.
Nota: La notación es ligeramente distinta en Oracle SQL Developer Data Modeler, donde de uno a varios es
1:N y de varios a varios es M:N.

21
En la relación de uno a varios (1:M), se puede relacionar un único registro en una entidad (SALES
REPRESENTATIVE) con uno o varios registros en otra entidad (CUSTOMER), pero un único registro de
CUSTOMER solo se puede relacionar con un SALES REPRESENTATIVE.

22
23
En la relación de varios a varios (M:M), varios registros en una entidad coinciden con varios registros en
otra entidad.

24
El ejemplo de la diapositiva es una relación de uno a uno porque la cardinalidad es una línea sin pata de
gallo en ninguna de las direcciones.
Estos tipos de relaciones son las menos habituales porque pueden ser una entidad que contiene atributos.

25
26
27
28
Para asignar la matriz a un ERD, dibuje un cuadro para cada entidad y, a continuación, dibuje la relación e
indique la regla de negocio. Este método resulta útil para determinar el tipo y la cardinalidad de cada
relación.
Para ayudar en la transformación entre la matriz y el ERD, siga estos pasos:
a. Determine la existencia de una relación.
b. Nombre la relación.
c. Determine la cardinalidad de la relación.

29
30
El primer paso para crear una relación consiste en determinar su existencia. Pregúntese si existe una
relación significativa entre ENTITY A y ENTITY B.
En el ejemplo de la diapositiva, plantéese las siguientes preguntas:
• ¿Existe una relación significativa entre DEPARTMENT y EMPLOYEE? La respuesta es "sí".
• ¿Existe una relación significativa entre DEPARTMENT y ACTIVITY? La respuesta es "no".
• ¿Existe una relación significativa entre ACTIVITY y EMPLOYEE? La respuesta es "sí".
Registre las relaciones entre ACTIVITY, DEPARTMENT y EMPLOYEE en una matriz de relaciones. Las
marcas de verificación indican que existe una relación.
Se utiliza una matriz de relaciones para examinar sistemáticamente cada par de entidades.

31
El primer paso para crear una relación consiste en determinar su existencia. Pregúntese si existe una
relación significativa entre ENTITY A y ENTITY B.
En el ejemplo de la diapositiva, plantéese las siguientes preguntas:
• ¿Existe una relación significativa entre DEPARTMENT y EMPLOYEE? La respuesta es "sí".
• ¿Existe una relación significativa entre DEPARTMENT y ACTIVITY? La respuesta es "no".
• ¿Existe una relación significativa entre ACTIVITY y EMPLOYEE? La respuesta es "sí".
Registre las relaciones entre ACTIVITY, DEPARTMENT y EMPLOYEE en una matriz de relaciones. Las
marcas de verificación indican que existe una relación.
Se utiliza una matriz de relaciones para examinar sistemáticamente cada par de entidades.

32
Los nombres de las relaciones representan un rol y tienden a ser verbos pasivos, denominaciones de roles
de nombres o preposiciones. Trate de no utilizar "related to" (relacionado con) o "associated with"
(asociado a) como nombres de relaciones porque son débiles y no tienen un significado específico.
A continuación, se muestra una lista de ejemplos de pares de nombres de relaciones para ayudarle a
nombrar relaciones:
• based on/the basis for (basado en/la base para)
• bought from/the supplier of (comprado a/el proveedor de)
• description of/for (descripción de/para)
• operated by/the operator for (operado por/el operador para)
• represented by/the representation of (representado por/la representación de)
• responsible for/the responsibility of (responsable de/la responsabilidad de)
Registre los nombres de relaciones en la matriz de relaciones como se muestra en la diapositiva.**

33
34
35
Fundamentos de bases de datos
2-6: Modelado de relaciones entre entidades (ERD)
Prácticas
Ejercicio 1: Identificar los componentes del ERD

Visión general
En esta práctica, identificará los componentes en un determinado ERD simple.

Tareas
1. Identifique las posibles entidades y los atributos del escenario determinado.
Una compañía tiene varios departamentos. Cada departamento tiene un supervisor y al menos un empleado. Los empleados se
deben asignar por lo menos a un departamento, pero posiblemente, también a varios. Se debe asignar al menos un empleado a
un proyecto, pero puede que un empleado esté de vacaciones y no se asigne a ningún proyecto. Los campos de datos
importantes son los nombres de los departamentos, proyectos, supervisores y empleados, así como el número de supervisor y de
empleado y un número de proyecto único.

2. Interprete el escenario de negocio especificado. Dibuje las entidades HAIRSTYLIST y CLIENT. Muestre los atributos asociados a
cada entidad y especifique si son obligatorios u opcionales. Identifique los UID. Siga las convenciones sobre creación de
diagramas tratadas. Indique el lenguaje de ERD de las relaciones.

"En nuestro salón, tenemos varios estilistas. Todos ellos son empleados asalariados, por lo que se mantiene un registro de su
nombre, apellidos, dirección, número de teléfono, número de la seguridad social y salario. Durante el transcurso de un día, un
estilista puede atender a varios clientes. En un día con menos actividad, puede que un estilista no tenga que atender a nadie.
Tenemos varios clientes sin cita previa y cada uno se asigna un estilista. Solo les pedimos su nombre. También tenemos clientes
que llaman para concertar una cita. En estos casos, les pedimos su nombre, apellidos y número de teléfono. También les
preguntamos si desean que les atienda un determinado peluquero. Si no tienen ninguna preferencia, les asignamos uno.
Por supuesto, podrán cambiar a otro estilista en su siguiente visita al salón. Estamos interesados en realizar un seguimiento de
las citas diarias, es decir, qué estilista trabaja con qué cliente un determinado día".

3. Interprete el escenario de negocio especificado. Dibuje las entidades TEACHER y COURSE y CLASS. Muestre los atributos debajo
de cada entidad. Especifique si son obligatorios u opcionales. Identifique los UID. Indique el lenguaje de ERD de las relaciones.

"Tenemos varios profesores en la escuela. A un profesor se le pueden asignar hasta tres clases por semestre. Si un profesor está
de vacaciones sabáticas, no impartirá clases ese semestre. Mantenemos un registro del nombre, los apellidos, la dirección,
el número de teléfono y la dirección de correo electrónico del profesor.

Nuestra escuela ofrece muchos cursos, tales como: Modelado de datos, Introducción a SQL, Trigonometría, Física y Biología.
Cada curso tiene un código. Por ejemplo: Modelado de datos sería DM001, Trigonometría sería TR004, etc. Durante cada
semestre, un mismo curso se puede impartir en varias clases, por lo que podría haber dos clases de Física, tres clases de
Biología, etc. Cada clase solo la puede impartir un profesor. Asignamos un ID único para cada clase, además de realizar un
seguimiento del día en que se imparte, el horario y el aula".

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 2, lección 6, ejercicio: Modelado de relaciones entre entidades (objetivo 5 de S2L6)

El diagrama de relación de entidad (ERD) permite representar gráficamente la información del sistema y tiene los
siguientes cuatro objetivos:
• Capturar toda la información necesaria.
• Asegurarse de que la información solo aparece una vez.
• No modelar ninguna información derivada de otra información que ya esté modelada.
• Localizar información en un lugar previsible y lógico.

Como ya se han identificado las entidades, sus atributos y las relaciones entre ellas, ahora se puede empezar a crear el
ERD final, que mostrará cómo se enlaza el sistema.

Con la información recopilada a lo largo de este proyecto, genere un ERD que cumpla los cuatro objetivos especificados
anteriormente. Cree el ERD siguiendo la convención de creación de diagramas.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
El arquitecto tiene la formación para convertir las ideas en modelos. El arquitecto atiende a la descripción
de las ideas y realiza varias preguntas que se plasman posteriormente en un diagrama (el plano) que
permite la explicación y el análisis, dar consejo, describir las opciones razonables, documentarlas y
confirmarlas con los futuros propietarios. Este diagrama proporciona a los futuros propietarios un plano de
la casa que desean.

Un contratista necesita el plano de la casa con una descripción exacta de los materiales que se van a
utilizar, el tamaño de las vigas del techo, la capacidad de la fontanería, entre otras especificaciones. El
contratista sigue el plano y tiene los conocimientos para construir lo que hay en el plano en una realidad
física.

5
6
El modelado conceptual tiene un método de análisis y diseño formal que utiliza un juego de reglas y
directrices para capturar la semántica de un dominio. Los métodos formales incluyen notaciones textuales
o gráficas para crear, presentar, validar y manipular modelos de datos. Aclara la identificación de entidades
y relaciones. Proporciona una base para la discusión y la acotación.

7
8
9
10
11
12
El modelo de datos debe permanecer igual incluso si no se utiliza ninguna base de datos; por ejemplo,
cuando los datos se guardan finalmente en hojas de papel en un archivador.

13
14
15
16
El modelado de datos también utiliza terminología específica del sector, que denominamos ERDish, para el
objetivo de esta clase. Le proporcionará un lenguaje común tanto al recopilar las reglas de negocio de su
cliente como al comunicarlas a los administradores de la base de datos que implantarán su diseño.
Ya ha hablado y escrito este lenguaje al identificar las relaciones y la opcionalidad y cardinalidad
especificadas.

17
18
19
21
22
23
24
25
26
27
28
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 3, lección 1, ejercicio 1: Más sobre relaciones

Resolución de relaciones de varios a varios (objetivo 2 de S3L1)

Al finalizar el ERD inicial, se mostró al cliente para confirmar que el negocio se había reflejado correctamente en el
diseño. A continuación, se proporciona una transcripción de esa reunión:

Transcripción de la reunión

Entrevistador: ¿Cree que hay algún problema importante en el diseño de su nuevo sistema?

Manager: Parece que se ha tenido todo en cuenta, ¿significa que ya está casi terminado?

Entrevistador: No del todo; aún tenemos mucho por hacer antes de que pueda ser un sistema de base de datos en
funcionamiento. Tengo unas cuantas preguntas más para aclarar algunos puntos antes de finalizar el diseño.

Manager: Ningún problema.

Entrevistador: Un cliente puede representar a un equipo; ¿tiene cada equipo un único representante designado o puede
haber muchas personas que realicen pedidos en nombre del equipo?

Manager: Solo puede haber una persona designada como representante oficial del equipo.

Entrevistador: ¿Puede la misma persona representar a varios equipos?

Manager: No, solo se puede asignar a un solo equipo a la vez.

Entrevistador: En una de nuestras reuniones anteriores, comentó que cada representante de equipo está asignado a un
único representante de ventas. ¿Cómo se asignan los representantes de ventas a sus equipos?

Manager: Se asigna a uno de los representantes de ventas el rol de supervisor y será responsable de la asignación de
equipos individuales a todos los representantes de ventas, incluidos ellos mismos.

Entrevistador: ¿Indicó también que, en ocasiones, los representantes de ventas gestionan quejas de clientes
individuales?

Manager: Sí, si un cliente tiene un problema con un pedido, un representante de ventas le ayudará a solucionarlo.

Entrevistador: Cuando un cliente realiza un pedido, ¿se puede transferir al pedido a otra persona?

Manager: No, el pedido se realiza entre la compañía y la persona que realizó el pedido; eso no cambia nunca.

Entrevistador: ¿Puede un cliente registrar solo una única dirección como destino de entrega o puede tener varias?
Manager: Permitimos que nuestros clientes registren varias direcciones para que se pueden entregar los pedidos en la
ubicación que más les convenga. Una dirección solo se puede asignar a un único cliente.

Entrevistador: Si guarda varias direcciones de los clientes, ¿guarda también varias direcciones de los representantes de
ventas?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Manager: No, solo guardamos la información de la dirección actual de nuestros empleados. Si cambian de dirección,
actualizamos la información. No es necesario realizar un seguimiento de su historial de direcciones.

Entrevistador: Volviendo a los clientes: ¿puede un cliente ser tanto un representante de equipo como un cliente
individual?

Manager: Absolutamente, pero tendrán dos cuentas separadas para que las compras de una cuenta no afecten a las
compras de la otra.

Entrevistador: Los equipos obtienen un descuento según el número de jugadores, ¿cómo funciona esto?

Manager: Un equipo necesita un mínimo de nueve jugadores para recibir un descuento. Si un equipo tiene un mínimo
de nueve jugadores en su lista, estos obtienen un 5 % de descuento. Si tienen un mínimo de 25 jugadores, obtienen un
10 % de descuento. Para más de 40 jugadores, el descuento es del 20 %. Se asigna el descuento adecuado al equipo.

Entrevistador: ¿Hay algo que esté pensando introducir y que podría afectar al sistema ahora o en el futuro?

Manager: Estamos introduciendo un esquema de tarjeta de fidelización para clientes individuales. Sería un esquema
opcional que permitiría a los dueños de la tarjeta de fidelización asistir a ventas especiales por la noche, donde es
posible adquirir artículos a un precio reducido.

Entrevistador: ¿Querrá registrar lo que cada dueño de tarjeta de fidelización compra en estos eventos?

Manager: No, la restricción es que solo los clientes que tienen tarjetas de fidelización podrán acceder a la tienda. No
necesitamos saber los artículos que compran.

Entrevistador: Entonces, ¿quiere que realicemos un seguimiento del precio de los artículos a lo largo del tiempo para
que pueda cambiarlos?

Manager: Sí, eso nos lo facilitaría todo.

En las bases de datos relacionales, se pueden tener los siguientes tres tipos de relación, que representan los requisitos
de información y las reglas del negocio:

• De varios a uno (M:1) o de uno a varios (1:M)


• De varios a varios (M:M)
• De uno a uno (1:1)
Si tiene relaciones de varios a varios (M:M) en el ERD, tendrá que resolverlas antes de seguir adelante. Recuerde que
para resolver una relación M:M debe:

• Suprimir la relación M:M.


• Crear una nueva entidad (intersección).
• Crear dos relaciones de identificación en el lado de varios de la nueva entidad de intersección.
• Identificar y crear atributos adicionales en la entidad de intersección si es necesario. Piense cómo almacenaría
las cantidades de cada artículo y cuántos artículos se enviarían al cliente realmente.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
• Evaluar si las dos relaciones de identificación existentes constituyen un UID para la entidad de intersección o si
debe crearse un UID artificial para la nueva entidad.
• Agregar las etiquetas de relación a las nuevas relaciones de identificación.

Punto de partida sugerido:

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 3, lección 1, ejercicio 2: Más sobre relaciones

Identificar e ilustrar relaciones no transferibles (objetivo 3 de S3L1)

En este ejercicio, se utiliza el escenario adicional y la transcripción de la reunión proporcionada en el ejercicio anterior.

Una relación no transferible no se puede mover entre las instancias de las entidades que conecta y tiene que ser
obligatoria.

Lea la transcripción de la reunión e identifique las relaciones no transferibles que pueda haber.
Represente las relaciones no transferibles en el ERD para el sistema.

Punto de partida sugerido:

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 3, lección 1, ejercicio 3: Más sobre relaciones

Identificar y representar entidades de supertipo y subtipo (objetivo 4 de S3L1)

En este ejercicio, se utiliza el escenario adicional y la transcripción de la reunión proporcionada en los ejercicios
anteriores.

Los subtipos/supertipos permiten representar entidades que tienen atributos comunes como un grupo.
• Cada subtipo es una especialización de un supertipo y, por lo tanto, debe estar incluido dentro de una entidad.
• Los atributos y las relaciones comunes para todos los subtipos deben aparecer solo en el supertipo, pero se
heredan en cada subtipo.
• Un subtipo puede tener, y por lo general tendrá, sus propios atributos y relaciones.
• No puede haber nunca un subtipo solamente; debe crearse otro subtipo que contenga el resto.

Con el escenario dado, represente cualquier grupo de supertipos y subtipos que se hayan identificado en el ERD.

Punto de partida sugerido:

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 3, lección 1, ejercicio 4: Más sobre relaciones

Identificar relaciones jerárquicas, recursivas y de arco (objetivo 5 de S3L1)

En este ejercicio, se utiliza el escenario adicional y la transcripción de la reunión proporcionada en las lecciones
anteriores.

Parte 1: relaciones recursivas

Una relación recursiva permite representar una relación que tiene una entidad consigo misma.

Una relación recursiva requiere que un atributo de la entidad dependa de otro atributo de esa entidad. Asegúrese de
que ambos atributos estén presentes en la entidad antes de representar la relación recursiva.

Con el escenario especificado, identifique y represente algunas relaciones recursivas que se hayan identificado en el
ERD.

Parte 2: relaciones de arco

Un arco es un grupo de relaciones exclusivas, que se define de forma que solo puede existir una de las relaciones para
cualquier instancia de una entidad.

Todas las relaciones incluidas en un arco deben pertenecer a la misma entidad y deben tener la misma cardinalidad.

En el ejercicio anterior, ha creado un supertipo/subtipo de cliente que indicaba cómo un cliente puede ser un individuo
o representante de equipo. Otra forma de hacerlo habría sido usando un arco.

Como ERD separado que solo detalla información de cliente, indique cómo podría representarse al cliente mediante un
arco.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
3-1: Más sobre relaciones
Prácticas
Ejercicio 1: Resolver relaciones M:M

Visión general
En esta práctica, resolverá las siguientes relaciones M: M dentro de la base de datos académica. Agregue atributos adicionales en las
entidades de intersección cuando sea necesario.

Tareas
1. Resuelva las relaciones M: M entre STUDENT y COURSE mediante una relación de bloqueo.

STUDENT
COURSE # ID
enroll
# ID * First Name
* Name * Last Name
* Registration Year
have enrolled
* Email
* Number of Working Days
* Number of Days Off
o Eligibility for Exam

2. Resuelva las relaciones M: M entre FACULTY y COURSE.

COURSE teach FACULTY


# ID # ID
* Name * First Name
taught by * Last Name
* Email
* Login Date
* Login Time
o Details

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
3. Resuelva relaciones M: M entre STUDENT,COURSE y EXAM.

STUDENT
# ID
COURSE enroll * First Name
# ID * Last Name
* Name * Registration Year
have enrolled
* Email
* Number of Working Days
* Number of Days Off
have o Eligibility for Exam

take
be for

EXAM
taken by
# ID
* Type
o Start Date
* Name
o Description

Ejercicio 2: Adición de la opción de no transferibilidad para un ERD

Visión general
En esta práctica, creará el ERD a partir de un escenario especificado y le agregará la opción de no transferibilidad.

Tareas
1. Se asignará un STUDENT a un EXAM RESULT tras realizar un examen. Una vez que se ha recibido un EXAM RESULT, no se
puede transferir a otro STUDENT.

Ejercicio 3: Identificar y representar las entidades supertipo y subtipo

Tareas
1. El profesorado puede serlo a tiempo completo o parcial. El profesorado a tiempo completo recibirá un salario y tiene derecho a un
plan de seguro. El profesorado a tiempo parcial cobra por horas y no recibe beneficios. Vuelva a dibujar la siguiente entidad como
un supertipo con entidades subtipo que reflejen la nueva información.

FACULTY
# ID
* First Name
* Last Name
* Email
* Login Date
* Login Time
o Details

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Ejercicio 4: Examinar las relaciones exclusivas (arcos)

Tareas
1. Determine cómo se deben modelar las relaciones exclusivas en el siguiente escenario.

Cada instancia de COURSE en la base de datos académica puede llevarse a cabo ONLINE o en una ubicación SEATED. Cada
ubicación SEATED tiene un nombre de edificio, un número de sala y una fecha/hora en la que se ofrece el curso (COURSE). Las
clases ONLINE tienen un ID de inicio de sesión y una contraseña necesarios para abrir el curso. Modele la nueva información
como arco en la base de datos académica.

Ejercicio 5: Modelar datos jerárquicos

Tareas
1. En esta práctica, modelará las entidades, las relaciones, los atributos y los identificadores únicos de la jerarquía de un hotel. El
hotel tiene varias plantas, varias suites en cada planta y varias habitaciones en cada suite.

Ejercicio 6: Modelar datos jerárquicos y relaciones recursivas

Tareas
1. Desarrolle dos ERD para representar la siguiente situación. Desarrolle uno como una estructura jerárquica y otro como una
estructura recursiva.

Curves Dynamics vende productos en Estados Unidos. Se divide en cuatro regiones de ventas principales: las regiones Northern,
Eastern, Southern y Western. Cada región de ventas tiene un código de región único. Cada región de ventas se divide en cuatro
distritos de ventas. Por ejemplo, la región Western se divide en los distritos Rocky Mountain, Northwest, Pacific Coast y Pacific.
Cada distrito tiene un código de distrito único.

Cada distrito está formado por territorios de ventas. El distrito de Rocky Mountain se compone de tres territorios: Wyoming-
Montana, Colorado y Utah-New Mexico. El distrito Northwest está formado por dos territorios: Washington y Oregon-Idaho. El
distrito Pacific Coast está formado por dos territorios: California y Nevada. El distrito Pacific incluye el territorio Hawaii y Alaska.
Cada territorio tiene un código de territorio único.

Cada territorio de ventas está dividido en áreas de ventas. Por ejemplo, Colorado está formado por dos áreas de ventas: Front
Range y Western Slope. Cada área de ventas tiene un código de área único.

Cada vendedor es responsable de una o varias áreas de ventas y tiene cuotas de ventas específicas. Cada gestor de ventas es
responsable de uno o varios distritos de ventas y directores de ventas, que son responsables de una o varias regiones de ventas.
Cada gestor de ventas es responsable de los territorios de sus distritos. Las responsabilidades de los empleados no se
superponen. Un área de ventas es siempre responsabilidad de un único vendedor, y las responsabilidades de gestores y
directivos no se superponen. En ocasiones, los vendedores, gestores y directores están de baja o tienen funciones especiales y
no tendrán responsabilidades del área de ventas. Todo el personal de ventas se identifica mediante ID de empleado.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Ejercicio 7: Desarrollo de un ERD completo mediante un supertipo/subtipos y arcos

Tareas
1. Desarrolle un ERD para los siguientes requisitos de información:

Right-Way Rental Truck Company alquila pequeños camiones de mudanzas y remolques para uso local y unidireccional. Hay
347 oficinas de alquiler en el oeste de Estados Unidos. El inventario de alquiler incluye un total de 5750 vehículos, que incluyen
distintos tipos de camiones y remolques. Los datos de los que se debe realizar un seguimiento son los acuerdos de alquiler y las
asignaciones de vehículos. Cada oficina de alquiler alquila los vehículos que tiene en inventario a los clientes que están
preparados para tomar posesión del vehículo. No se realizan reservas y no se realiza ningún seguimiento de cuándo se espera
que el cliente devuelva el vehículo alquilado. La oficina central supervisa la distribución de vehículos y controla las transferencias
de vehículos de una oficina de alquiler a otra.

Cada oficina de alquiler tiene un nombre de oficina como "Madison Right-Way" y una dirección. Cada oficina tiene también un
número de oficina de tres dígitos único. Cada oficina es la sede de algunos vehículos, y cada vehículo depende de una sola sede.

Cada vehículo posee un ID de vehículo, un estado de registro y un número de registro de matrícula. Hay cinco tipos diferentes de
vehículos: Camiones de 36 pies, camiones de 24 pies, camiones de 10 pies, remolques cubiertos de 8 pies y remolques abiertos
de 6 pies, cada uno con un código de tipo. Se debe realizar un seguimiento de la última fecha de mantenimiento y la fecha de
caducidad del registro de todos los vehículos. Además, en el caso de los camiones, se debe almacenar la lectura del
cuentakilómetros actual, la capacidad del depósito de gasolina y si tiene o no una radio operativa. Para desplazamientos largos,
los clientes realmente prefieren una radio. El kilometraje actual se registra antes del alquiler del camión y posteriormente, de
nuevo, cuando se entrega. Además, para los remolques se debe registrar la capacidad máxima de carga.

La mayoría de los acuerdos de alquiler son para clientes individuales, pero un acuerdo de alquiler puede ser tanto para un
individuo como para una compañía. Un pequeño porcentaje de los camiones se alquila a compañías. A cada compañía se le
asigna un número de compañía y se realiza un seguimiento del nombre y la dirección de la compañía. El grupo de ventas
corporativas gestiona toda la información por separado.

Para cada cliente individual, se realiza un seguimiento de la siguiente información: nombre, teléfono particular, dirección, y estado,
número y fecha de caducidad del carné de conducir del conductor. Si un cliente daña un vehículo, lo abandona, o bien no paga
completamente la factura, el cliente se etiqueta como riesgo deficiente y no podrá volver a alquilar.

Solo una persona o una compañía puede obtener un contrato de alquiler, y se redacta un contrato de alquiler independiente para
cada vehículo. Los clientes pueden alquilar dos o más vehículos al mismo tiempo. Cada contrato de alquiler se identifica mediante
el número de la oficina de alquiler de origen y un número de contrato de alquiler. Además, se realiza un seguimiento de la fecha
de alquiler, la duración prevista del alquiler, la oficina de alquiler de origen, la oficina de alquiler de entrega del vehículo, el importe
del depósito pagado, la tasa de alquiler por día acordada y la tarifa por milla acordada. Para los remolques, no hay ningún cargo
por kilometraje.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
2
3
4
Se crea una relación de identificación cuando el UID de una entidad incluye la relación con otra entidad.
Tenga en cuenta que una relación que se incluya en un UID debe ser obligatoria y única en la dirección que
participa en el UID.

5
En el ejemplo de la diapositiva, se necesitan EMPLOYEE y PROJECT para que WORK ASSIGNMENT sea
único, por lo que ambas relaciones se incluyen en el UID para WORK ASSIGNMENT.
Tenga en cuenta que WORK ASSIGNMENT es una entidad de intersección que es la resolución entre una
relación M:M Este tema se trata en una lección posterior.

6
7
8
Nota: La selección de un nombre para la entidad de intersección suele ser difícil. Déjelo en blanco en un
principio, mueva las relaciones y agregue los atributos. Normalmente en este punto suele verse más claro
cuál debe ser el nombre.
Si no tiene ningún atributo adicional en la entidad de intersección, puede dejarla como una relación M:M y
Oracle SQL Developer Data Modeler creará la tabla de intersección en el modelo relacional.

9
10
Se necesita una tercera entidad, denominada entidad de intersección, para resolver la relación M:M.
Para resolver la relación M:M de la diapositiva anterior, realice los siguientes pasos:
a. Suprima la relación M:M.
b. Cree una nueva entidad denominada BOOK TRN.
c. Cree dos relaciones de identificación: una desde MEMBER y otra desde BOOK.
d. Identifique y cree atributos adicionales en la entidad de intersección BOOK TRANSACTION.
e. Evalúe si las dos relaciones de identificación constituyen un UID para la entidad de intersección o si se
necesitan otros atributos.
TRNS ID es un UID artificial que se puede utilizar en lugar de las relaciones de bloqueo. Se trata de un
método alternativo, ni mejor ni peor.
Nota: No todas las entidades de intersección tienen atributos adicionales.

11
12
Hay una relación M:M entre EMPLOYEE y JOB. No hay forma de almacenar información sobre los
trabajos de un empleado. La entidad JOB HISTORY intersection almacena esta información con
dos relaciones de identificación para las entidades EMPLOYEE y JOB.

Una relación de bloqueo se asigna a una columna de clave ajena en el lado de varios, igual que cualquier
otra relación M:1. El UID de la entidad de intersección normalmente procede de las relaciones de origen y
se representa con barras.

13
14
15
16
17
18
19
20
21
22
23
24
La generalización es el proceso de extracción de las características compartidas de dos o más entidades y su
combinación en un supertipo generalizado. Las características compartidas pueden ser atributos,
asociaciones o métodos.
En la diapositiva del ejemplo, CAR y TRUCK comparten los mismos atributos comunes, por lo que esos
atributos comunes se agrupan para formar la entidad supertipo denominada Vehicle.

25
La especialización es la creación de nuevos subtipos a partir de una entidad existente. Si resulta que ciertos
atributos, asociaciones o métodos se aplican solo a algunos de los objetos de la entidad, se puede crear un
subtipo.
En el ejemplo de la diapositiva, el supertipo EMPLOYEE se desglosa en dos subtipos, CURRENT EMPLOYEE y
EX-EMPLOYEE.

26
27
28
29
30
31
Una de las técnicas para modelar relaciones consiste en crear un juego de relaciones M:1 jerárquicamente.
En el ejemplo de la diapositiva, una organización tiene una estructura jerárquica:
• Un elemento COMPANY puede constar de uno o más elementos DIVISION.
• Un elemento DIVISION puede constar de uno o más elementos DEPARTMENT.
• Un elemento DEPARTMENT puede constar de uno o más elementos TEAM.
Los UID de un juego de entidades jerárquicas se pueden propagar a distintas relaciones. Cree atributos
artificiales para facilitar la identificación de las entidades en una relación jerárquica.

32
En este ejemplo, cada jefe es un empleado también. Por lo tanto no es una entidad nueva, sino tan solo un
subjuego de las instancias de la entidad EMPLOYEE. Esta relación varios a uno es opcional en ambas
direcciones. Es igual que la relación entre dos entidades distintas.

33
34
Una empresa de fabricación de automóviles necesita realizar un seguimiento de las piezas elementales,
subensamblajes, ensamblajes y productos. Los datos de la lista de materiales se pueden modelar con varias
entidades para cada categoría de "piezas" y un juego de relaciones entre cada una de dichas entidades.
El ERD de la diapositiva representa los datos como si cada una de estas categorías de piezas fuera una
entidad.

35
Considere todas las piezas elementales, subensamblajes, ensamblajes y productos como instancias de una
entidad denominada COMPONENT. De esta forma, el complejo ERD de la página anterior se puede
remodelar como una simple relación recursiva.
Suponga que algunos de los datos de instancia proporcionados en la diapositiva anterior se utilizan para
validar este modelo:
• Washers, nuts y bolts pueden ser piezas en diferentes entidades SUBASSEMBLIES, ASSEMBLIES y
PRODUCTS.
• fan blade y fan belt forman parte de fan.
• radiator cap, host y thermostat forman parte de radiator.
• cooling system, ignition system y engine block forman parte de complete engine.

36
El atributo de cantidad está asociado a la relación recursiva y, por lo tanto, se debe resolver. Resuelva la
relación recursiva M:M mediante la adición de la entidad de intersección ASSEMBLY RULE y dos relaciones
1:M de nuevo a la entidad COMPONENT. ASSEMBLY RULE contendrá el atributo Quantity.
Si vuelve a usar los datos de instancia, la instancia ASSEMBLY RULE para washers a fan tendrá una
relación 1:M con la instancia COMPONENT para washer y una segunda relación 1:M con la instancia
COMPONENT para fan. La entidad ASSEMBLY RULE registrará la cantidad de elementos washer que
forman parte de un único elemento fan.

37
38
39
La implantación de supertipo y subtipo (arco) genera una tabla para cada entidad. La tabla de supertipos
tiene una clave ajena para cada tabla de subtipos. Estas claves ajenas representan relaciones exclusivas y
son opcionales porque solo una clave ajena puede tener un valor para cada fila de la tabla.

40
41
Cada elemento MEMBERSHIP solo lo puede contener un elemento FACULTY o un único elemento
STUDENT.
Cada elemento FACULTY puede contener uno o varios elementos MEMBERSHIP. Cada elemento
STUDENT puede contener uno o varios elementos MEMBERSHIP. Un elemento MEMBERSHIP no puede
estar tanto en un elemento FACULTY como en un elemento STUDENT. El arco modela la exclusividad
mutua.
Los arcos se pueden representar gráficamente para relaciones opcionales y para relaciones obligatorias,
pero las dos relaciones que participen en el arco debe tener la misma cardinalidad.

42
43
44
Fundamentos de bases de datos
3-2: Seguimiento de cambios de datos
Prácticas
Ejercicio 1: Realizar un seguimiento del cambio de datos a lo largo del tiempo

Visión general
En esta práctica, utilizará los escenarios para identificar los datos que cambian a lo largo del tiempo y para crear modelos de ERD que
incorporen el elemento de datos a lo largo del tiempo.

Tareas
1. Cree el ERD para el escenario especificado.
En la base de datos académica, se emite una calificación a cada STUDENT para cada COURSE realizado y se almacenan en la
entidad STUDENT COURSE DETAIL. Un STUDENT puede optar por volver a realizar un COURSE para mejorar su calificación. La
administración desea mantener un registro de la calificación antigua/previa así como de la nueva. Muestre cómo se modificaría el
ERD para incluir las calificaciones históricas si el STUDENT las tuviera. **No realizaremos este cambio real en el ERD.

STUDENT COURSE DETAIL


# Course ID
# Student ID
* Grade

2. Examine el ERD que representa las asignaciones de aula para los diferentes exámenes.
a. ¿Por qué la hora de inicio forma parte del UID de ASSIGNMENT?
b. Indique al menos tres restricciones relacionadas con el tiempo. Por ejemplo: la hora de finalización debe ser posterior a la
hora de inicio. Indique si la restricción representa la intransferibilidad condicional.

ASSIGNMENT the time for CLASS ROOM


# Date of Exam # Number
# Start Time
the place for
* End Time

the time for

the event

EXAM
# ID

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 3, lección 2, ejercicio: Seguimiento de cambios de datos

Realizar un seguimiento de los datos que cambian a lo largo del tiempo (objetivo 1 de S3L2)

En este ejercicio, se utiliza el escenario adicional y la transcripción de la reunión proporcionada en los ejercicios
anteriores.

La información que existe en una única entidad solo puede almacenar un valor único (o actual). Si tuviéramos que
cambiar ese valor, se perdería toda la información histórica. Para almacenar tanto los datos históricos y actuales como
los datos alternativos, puede que debamos agregar entidades y relaciones al modelo para dar cabida a esta información
adicional.

Estas son algunas preguntas que se pueden formular y que le ayudarán a identificar la necesidad de datos históricos:

• ¿Es necesaria una pista de auditoría?


• ¿Pueden cambiar los valores de atributo a lo largo del tiempo?
• ¿Pueden cambiar las relaciones a lo largo del tiempo?
• ¿Necesita consultar datos antiguos?

Con el escenario especificado, agregue más entidades y sus correspondientes relaciones que sean necesarias para
almacenar cualquier dato que pueda cambiar con el tiempo o donde sean necesarias alternativas.

Punto de partida sugerido de la tarea

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
2
3
4
5
6
Como se muestra en el ejemplo de la diapositiva, la entidad CONTRACT se creó inicialmente con cuatro
atributos. Debido a que los atributos están incluidos en una entidad, el estado y la fecha efectiva del
contrato cambiarán al estado actual y la fecha efectiva cada vez que el contrato cambie. Si necesita realizar
un seguimiento cuando el estado de un determinado contrato cambie, cree una entidad adicional y mueva
el estado y la fecha efectiva a la nueva entidad. De esta forma, se puede realizar un seguimiento de la
información sobre cuándo ha cambiado el estado de un contrato.
Si el estado cambia más de una vez en el mismo día, debe incluir un atributo de valor de estado actual en el
identificador único.

7
Puede que tenga que agregar una entidad para realizar un seguimiento de cómo cambia una relación a lo
largo del tiempo. En el ejemplo de la diapositiva, una persona puede alquilar un apartamento, pero un
apartamento puede estar vacío. Si desea realizar un seguimiento de los apartamentos que están alquilados
en un momento concreto, agregue una entidad para almacenar la información de alquiler sobre un
apartamento.

8
En la entidad RENTAL, el código del apartamento y la fecha en vigencia del alquiler son el identificador
único. No debería incluir el ID de la persona porque está almacenando alquileres históricos y actuales. No
tendrá dos alquileres para el mismo apartamento con la misma fecha efectiva.

9
10
11
Si un sistema permite a un usuario modificar o eliminar información concreta, puede decidir conservar
valores antiguos. Esto se denomina registro o diario y es común en los modelos de tipo financiero.
En el ejemplo de la diapositiva, un cliente puede realizar varios pagos y puede realizar cambios en un pago.
Si desea realizar un seguimiento de esos cambios, puede almacenar el historial en la entidad PAYMENT
MODIFICATION.

12
13
14
15
El UID de RENTAL HISTORY es la fecha alquilada y el UID deJEWELRY DETAIL (se muestra por la
relación de bloqueo). No se está realizando un seguimiento del ID de cliente en RENTAL HISTORY.

16
17
18
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 3, lección 3, ejercicio 1: Normalización y reglas de negocio

Uso de la normalización para validar datos (objetivo 3 de S3L3)


Convertir la base de datos a formato no normalizado

Antes de iniciar el proceso de normalización, debe convertir los datos a un formato no normalizado (UNF).
• Formato no normalizado (UNF)
- Elimine los campos calculados que se puedan derivar de otros atributos.
- Asegúrese de que cada entidad tenga un identificador único.
- Elimine datos duplicados donde la información se almacene en varias entidades.

Extraiga los datos que se están utilizando actualmente en representaciones de ERD y conviértalos al formato no
normalizado para que los datos se pueden considerar UNF.

Punto de partida sugerido de la tarea

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 3, lección 3, ejercicio 2: Normalización y reglas de negocio

Uso de la normalización para validar datos (objetivo 3 de S3L3)


Primer formato normal

La normalización es un concepto de las bases de datos relacionales, pero sus principios se aplican al modelado de datos.
• Primer formato normal (1NF)
- Los datos son atómicos (todos los atributos deben tener un solo valor).
- Las entradas de una columna son del mismo tipo.
- No puede haber filas duplicadas en la tabla, lo que significa que la tabla tiene un grupo de columnas
que identifica la fila de forma exclusiva.

Extraiga los datos no normalizados actualmente representados en el ERD y aplique los principios del primer formato
normal para que estos datos sean 1NF.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 3, lección 3, ejercicio 3: Normalización y reglas de negocio

Uso de la normalización para validar datos (objetivo 3 de S3L3)


Segundo formato normal

La normalización es un concepto de las bases de datos relacionales, pero sus principios se aplican al modelado de datos.
• Segundo formato normal (2NF)
- Los datos cumplen los requisitos de 1NF.
- Necesita que los atributos que no sean UID dependan del UID completo.
- Si los datos no son directamente dependientes del UID completo, se deberán mover a otra tabla.

Extraiga los datos actualmente representados en el ERD en 1NF y aplique los principios del segundo formato normal
para que estos datos sean 2NF.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Sección 3, lección 3, ejercicio 4: Normalización y reglas de negocio

Uso de la normalización para validar datos (objetivo 3 de S3L3)


Tercer formato normal

La normalización es un concepto de las bases de datos relacionales, pero sus principios se aplican al modelado de datos.
• Tercer formato normal (3NF)
- Cumple todos los requisitos de bases de datos tanto para 1NF como para 2NF.
- Un atributo que no es UID no puede ser dependiente de otro atributo que no es UID.
- Cada columna debe depender directamente del UID. Todos los atributos que no dependan de UID se
deben eliminar. Por ejemplo, los atributos que se pueden derivar de datos incluidos en otros
campos y tablas deben eliminarse. (Todas las dependencias transitivas deben eliminarse).
Extraiga los datos actualmente representados en el ERD en 2NF y aplique los principios del tercer formato normal para
que estos datos sean 3NF.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Fundamentos de bases de datos
3-3: Reglas de negocio y normalización
Prácticas
Ejercicio 1: Bases de datos relacionales

Visión general
En esta práctica analizará la estructura de una tabla determinada y pasará la tabla al formato normal especificado.

Tareas
1. Analice la tabla determinada que no está normalizada. La tabla contiene información específica sobre artículos como el ID de
artículo, el color del artículo y el precio unitario de cada uno de los artículos. Algunas de las filas de la tabla tienen un grupo
repetido de información. Evalúe los datos de la tabla y pase la tabla al primer formato normal:
Item ID Color Unit Price
IT001 Red, Blue $16.56
IT002 Yellow $17.48
IT003 Green $19.76
IT004 Blue, Yellow $20.00

2. Analice la tabla especificada. La tabla tiene el primer formato normal y tiene una llave primaria compuesta formada por el ID de
proveedor y el ID de almacén. La ubicación del atributo no de clave solo depende del ID de almacén.
Evalúe los datos almacenados en la tabla y pase la tabla al segundo formato normal:
Supplier ID Store ID Location
SP001 S1 New York
SP001 S3 Vermont
SP002 S1 New Hampshire
SP003 S2 Rhode Island
SP004 S3 Illinois

3. Analice la tabla determinada y los datos almacenados. En la tabla, el ID de libro es la llave primaria y la descripción de categoría
depende del ID de categoría. Evalúe los datos almacenados en la tabla y elimine la dependencia transitiva para pasar la tabla al
tercer formato normal:
Book ID Category ID Category Desc Price
1 1 Cooking $27.99
2 2 Travel $17.99
3 1 Cooking $20.99
4 3 Computers $40.99
5 2 Travel $19.99

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Ejercicio 2: Normalizar el ERD de la base de datos académica

Visión general
En esta práctica, utilizará modelos de base de datos no normalizados para crear modelos de base de datos normalizados.

Tareas
1. Para el ERD de la base de datos académica, evalúe cada entidad según las reglas de normalización, identifique los atributos mal
situados y explique qué regla de normalización viola cada atributo mal situado.

PARENT INFORMATION STUDENT


be for ACADEMIC SESSION
# ID # ID
* Parent 1 First Name # ID
* First Name
* Parent 1 Last Name * Name
* Last Name
o Parent 2 First Name * Registration Year
have
o Parent 2 Last Name * Email schedule
* Number of Working Days
* Number of Days Off
o Eligibility for Exam
be for be for
STUDENT COURSE DETAIL
EXAM RESULT
* Grade
have * Grade
have
be for given in
be for

have
COURSE
# ID have
* Name
give
DEPARTMENT
offer offered by
# ID be for
* Name
* Head have held held

be for have
contain

Host Host EXAM


# ID
belong to * Type
ONLINE SEATED
# Logon ID # Building o Start Date
* Password # Room * Name
FACULTY # Date/Time o Description
# ID
* First Name
* Last Name
* Email
* Login Date
be for
* Login Time
o Details
have
FACULTY COURSE DETAIL
FULL TIME
* Contact Hours
* salary
* insurance plan be for

PART TIME
* hourly rate

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Ejercicio 3: Validar un ERD para la normalización

Tareas
1. Evalúe los siguientes datos no normalizados en la entidad USER y desarrolle un diagrama de relación de entidad que se normaliza
al tercer formato normal.

User User Message Recorded Subject Text Server Server


ID Name ID Date ID Name

2301 Smith 54101 05/07 Meeting Today There is… 3786 IMAP05

2301 Smith 54098 07/12 Promotions I like to… 3786 IMAP05

2301 Smith 54445 10/06 Next Your next… 3786 IMAP05


Assignment

5607 Jones 54512 06/07 Lunch? Can You… 6001 IMAP08

5607 Jones 54101 05/07 Meeting Today There is… 6001 IMAP08

5607 Jones 54660 12/01 Jogging Today? Can you… 6001 IMAP08

7773 Walsh 54101 05/07 Meeting Today There is… 9988 EMEA01

7773 Walsh 54554 03/17 Stock Quote The 9988 EMEA01


latest…

0022 Patel 54101 05/07 Meeting Today There is… 9988 EMEA01

0022 Patel 54512 06/07 Lunch? Can you… 9988 EMEA01

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
2. El esquema de colores de un coche incluye especificaciones para el color de la pintura de la carrocería y los colores y materiales
del interior. Por ejemplo: el esquema de colores "Desert" incluye pintura de color plateado e interiores de piel en color gris; el
esquema de colores "Sunburst" incluye pintura dorada e interiores de piel en color crema. ¿Sigue el siguiente modelo las reglas
del tercer formato normal? Si detecta una violación de las reglas, corríjala.

CAR
# number
* make
* model
* color scheme
* paint color
* interior color

Ejercicio 4: Recopilar requisitos de base de datos y reglas de negocio

Visión general
En esta práctica, analizará el escenario de caso proporcionado e identificará las reglas de negocio.

Tareas
1. Book.com es una tienda en línea en Internet donde los clientes pueden examinar el catálogo y seleccionar los productos que
deseen.
a. Cada libro tiene un título, ISBN, año y precio. La tienda también conserva la información del autor y del editor de cualquier libro.
b. Para los autores, la base de datos guarda el nombre, la dirección y la URL de su página inicial.
c. Para los editores, la base de datos guarda el nombre, la dirección, el número de teléfono y la URL de su sitio web.
d. La tienda tiene varios almacenes, cada uno de los cuales tiene un código, una dirección y un número de teléfono.
e. El almacén tiene en stock muchos libros. Un libro puede estar en stock en varios almacenes.
f. La base de datos registra el número de copias de un libro almacenadas en stock en varios almacenes.
g. La librería conserva el nombre, la dirección, el ID de correo electrónico y el número de teléfono de sus clientes.
h. Un cliente es propietario de varios carritos de la compra. El carrito de la compra se identifica mediante un Shopping_Cart_ID y
contiene varios libros.
i. Algunos carritos de la compra pueden contener más de una copia del mismo libro. La base de datos registra el número
de copias de cada libro que hay en cualquier carrito de la compra.
j. En ese momento, se necesitará más información para completar la transacción. Normalmente, se le pedirá al cliente que
rellene o seleccione una dirección de facturación, una dirección de envío, una opción de envío e información de pago como el
número de tarjeta de crédito. Se enviará una notificación por correo electrónico al cliente en cuanto se realice el pedido.

Su tarea consiste en identificar las reglas de negocio.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
2. Identifique si la descripción proporcionada se puede categorizar como una regla de negocio estructural, de procedimiento o
programática.

Regla de negocio Regla de negocio Regla de negocio Regla de negocio


estructural de procedimiento programática
Todos los profesores
de nuestra escuela
deben disponer de
un certificado de
enseñanza válido
Cada departamento
debe ofrecer un
curso
La aprobación de las
solicitudes de viaje a
un evento debe
firmarla el gestor de
proyectos del evento
Un cliente puede
realizar varios pagos
a cuenta

Un operario de
máquinas no puede
trabajar más de 10
horas al día
El importe de alquiler
en RENTAL se
calcula a partir de la
tarifa de alquiler
multiplicada por el
número de días

Un cliente puede
tener cero, uno o
varios ORDER

El coste total de
RENTAL se calcula a
partir de la suma del
importe de seguros,
el importe de alquiler
y el cargo por retraso

La deuda de un
cliente no debe
superar el límite de
crédito del cliente

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

5
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

6
2
3
4
La normalización se puede definir como el proceso de descomposición de una tabla con inconsistencias con
el fin de crear una tabla más pequeña y bien estructurada. La normalización puede implicar la división de
una tabla en dos o más tablas y la definición de relaciones entre las tablas. El objetivo es aislar datos de
forma que las adiciones, supresiones y modificaciones de un atributo o un campo se puedan realizar en una
sola tabla y, a continuación, propagarse en el resto de la base de datos mediante el uso de relaciones bien
definidas. Edgar F. Codd, el inventor del modelo relacional, presentó el concepto de normalización.

5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
El ejemplo de la diapositiva es una regla de negocio estructural.

20
21
22
23
24
25
26
27
28
29
Fundamentos de bases de datos
4-1: Uso de Oracle SQL Developer Data Modeler para crear ERD
Prácticas
Ejercicio 1: Instalar Oracle SQL Developer Data Modeler

Visión general
En esta práctica, se instalará Oracle SQL Developer Data Modeler. Siga las instrucciones en función de si dispone de un sistema
operativo Windows, Mac o Linux

Supuestos
Debe haber descargado los archivos de instalación de Oracle Technology Network. Puede descargar los archivos desde el enlace
proporcionado:
http://www.oracle.com/technetwork/developer-tools/datamodeler/downloads/index.html

Tareas
1. Para realizar la instalación en una plataforma Windows de 32 bits o de 64 bits:
a. Asegúrese de que tiene instalado un JRE, de lo contrario, descargue el JRE del sitio web de Oracle Technology Network.
Nota: El enlace para descargar el JRE es: http://www.oracle.com/technetwork/java/javase/downloads/index.html
b. Descargue el archivo zip de Data Modeler.
c. Extraiga el archivo zip en cualquier carpeta.
d. Acceda al interior de esa carpeta.
e. Amplíe la carpeta datamodeler.
f. Haga doble clic en datamodeler.exe para 32 bits y haga doble clic en datamodeler64.exe para 64 bits.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2. Para realizar la instalación en una plataforma Linux:
a. Asegúrese de que tiene instalado un JRE, de lo contrario, descargue el JRE de Oracle Technology.
Nota: El enlace para descargar el JRE es: http://www.oracle.com/technetwork/java/javase/downloads/index.html

b. Descargue el archivo <datamodeler...noarch.rpm>.


c. Para extraer el archivo rpm, ejecute el siguiente comando:
rpm -Uhv <datamodeler...noarch.rpm>

d. Suponiendo que el archivo rpm se ha extraído en la carpeta /opt/datamodeler, defina los privilegios:
chmod -R 777 /opt/datamodeler

e. Ejecute Data Modeler, conectándose como usuario configurado.


f. Defina la variable de entorno de zona horaria ejecutando el siguiente comando:
export TMZ="GMT"

3. Para realizar la instalación en una plataforma Mac:


a. Asegúrese de que tiene instalado un JRE.
El enlace para descargar el JRE es: http://developer.apple.com/java/download/

b. Descargue el archivo zip (archivo de almacenamiento).


c. Extraiga el archivo en cualquier carpeta.
d. Haga clic dos veces en el archivo OracleDataModeler.app.

Ejercicio 2: Identificar y crear entidades, atributos y relaciones


Visión general
En esta práctica, identificará y modelará las entidades y los atributos de una base de datos académica o, en otras palabras, un sistema
de gestión de escuela.
Tareas
Para su comodidad, aquí se muestra un resumen de cómo funciona la base de datos académica (sistema de gestión de escuela):
a. Una escuela/universidad tiene diferentes departamentos que ofrecen cursos a los alumnos en una determinada sesión
académica.
b. Cada uno de estos cursos lo imparte un profesor.
c. Los alumnos pueden inscribirse en diferentes cursos en una sesión académica.
d. Además de los detalles de registro, la universidad/escuela debe mantener también la información principal sobre el alumno.
e. El departamento mantiene los datos de asistencia del alumno, que determinarán si un alumno puede optar a los exámenes
de esa sesión académica o no.
f. Para cada sesión académica, se realizan exámenes y los resultados se comparten con el alumno en un período de tiempo
estipulado.
g. El departamento también mantiene un registro del tiempo de conexión y desconexión del profesorado para sus necesidades
de generación de informes.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Este es un ERD de ejemplo:

1. Con la información proporcionada anteriormente, utilice Oracle SQL Developer Data Modeler para identificar y crear:
− Entidades para un sistema de gestión de escuela
− Atributos para cada una de las entidades identificadas
− La relación entre las entidades

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar un contrato para desarrollar un modelo de
datos para un sistema de aplicaciones de bases de datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay personas que no pueden adquirir artículos
como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes
y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos obtienen un descuento en el precio de lista
según el número de jugadores. Cuando un cliente realiza un pedido, registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que gestionan las quejas de los clientes
individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas comerciales de sus respectivos propietarios.
Sección 4, lección 1, ejercicio: Oracle SQL Developer Data Modeler

Creación de un modelo de datos lógico (objetivo 1 de S4L1)

Oracle SQL Developer Data Modeler permite crear entidades, atributos y UID con los valores correctos de opcionalidad y cardinalidad, entidades de supertipo y
subtipo, así como relaciones de arco, jerárquicas,
de bloqueo y recursivas.

1. El primer paso para crear un modelo lógico (ERD) en Oracle SQL Developer Data Modeler consiste en hacer clic en el separador Logical.
a. Si no ve el separador Logical, realice los siguientes pasos:
b. Haga clic con el botón derecho en Logical Model en el explorador.
c. Seleccione Show.

2. Cree las entidades.

3. Cree los UID para cada entidad.


a. Haga clic en la entidad para la que desee definir el UID.
b. Con los atributos seleccionados en el navegador situado a la izquierda de la ventana Entity Properties, seleccione el atributo que desee
asignar como el UID.
c. Active la casilla de control Primary UID.

4. Cree los atributos obligatorios u opcionales para cada entidad (en esta etapa, no se aplican tipos de dato a los atributos). Agregue comentarios
para explicar el atributo donde sea necesario. No incluya atributos de clave ajena, ya que estos se agregan a través de las relaciones.

5. Cree la relación entre las entidades. Puede crear una relación M:N (varios a varios), una relación 1:N (uno a varios), una identificación de
relación 1:N (uno a varios de bloqueo) o una relación 1:1 (uno a uno).
a. Defina la entidad de origen y la entidad de destino para la relación.
b. Siguiendo las reglas de nomenclatura, asigne un nombre a la entidad del primer lado seguido de dos puntos y de un nombre para la segunda
entidad de la relación (cliente:dirección del cliente).
c. Utilice el nombre de origen y destino para agregar las etiquetas a las relaciones. Estos no se mostrarán en el modelo lógico, pero se
mostrarán en el modelo físico.

6. La entidad de subtipo hereda las propiedades del supertipo.


a. Para definir una entidad como un subtipo en Oracle SQL Developer Data Modeler, debe asegurarse de que el supertipo existe.
b. Al crear la entidad, elija la lista desplegable de supertipos e identifique la entidad de supertipo.

7. Guarde su trabajo.
Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas comerciales de sus respectivos propietarios.
2
Punto de partida sugerido de la tarea
Vuelva a crear el ERD en Oracle SQL Developer Data Modeler.
TEAM INVENTORY
represent # Id LIST
CUSTOMER
TEAM * Name # Id
# Number represented * Number of players
(#) Email REPRESENTATIVE * Cost of the
* Team they belong to by o Discount unit
* First name
* Last name * Units on hand
include
* Phone number SALES
* Current REPRESENTATIVE
balance # Id
assigned (#) Email
INDIVIDUAL * First name
(o) Loyalty card
assigned * Last name
number to * Phone number PRICE
* Commission rate HISTORY
* Supervisor ID # Start date
supervise # Start time
reside at Supervised by
place get * Price
deliveries CUSTOMER o End date
SALES REP
to ADDRESS o End time
ADDRESS
# Id # Id represent
assigned to * Address line 1 assigned * Address line 1
o Address line 2 on
to o Address line 2
* City * City
* Postal code ITEM
placed by * Postal code
# Number
ORDER * Name Priced
ORDERED ITEM represent using
# Id include * Quantity ordered *
* Date * Quantity Shipped Description
* Time part of represented * Category
* Number of units by o Color
o Size

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas comerciales de sus respectivos propietarios.
3
2
3
4
5
Menú principal
El menú principal contiene algunas entradas estándar, además de las entradas de funciones específicas de
Data Modeler. Los iconos de los menús realizan acciones relevantes en el modelo de datos seleccionado
para que se muestren en la ventana de visualización. Por ejemplo, en un modelo relacional, los iconos son
New Table, New View, Split Table, Merge Tables, New FK Relation, Generate DDL, Synchronize Model with
Data Dictionary y Synchronize Data Dictionary with Model.
Explorador de objetos
La parte izquierda de la ventana de Data Modeler incluye un explorador de objetos que muestra los objetos
de modelado de datos en una estructura de árbol jerárquica. Puede seleccionar un objeto en el explorador
de objetos ampliando el nodo o nodos del árbol correspondiente y, a continuación, haciendo clic en el
objeto.
Navegador
Muestra una representación gráfica en miniatura de la vista que está seleccionada actualmente en la
ventana de visualización, a la derecha del explorador de objetos.
Nota: La captura de pantalla de la diapositiva muestra un modelo de datos relacional que ya se ha creado.

6
7
8
9
10
11
12
Los tipos de dato se tratarán con mayor detalle más adelante en el curso. Para fechas, utilice el
tipo DATE. Para texto, utilice VARCHAR y, para números, NUMERIC.
El tamaño de los atributos es el número máximo de caracteres para los tipos VARCHAR.
Para los tipos de dato NUMERIC: Precision es el número máximo de dígitos y Scale es el número
de dígitos detrás de la coma decimal.

Los tipos lógicos no son tipos de dato reales, sino nombres que se pueden asociar a tipos nativos.

13
Los tipos de dato se tratarán con mayor detalle más adelante en el curso. Para fechas, utilice el
tipo DATE. Para texto, utilice VARCHAR y, para números, NUMERIC.
El tamaño de los atributos es el número máximo de caracteres para los tipos VARCHAR.
Para los tipos de dato NUMERIC: Precision es el número máximo de dígitos y Scale es el número
de dígitos detrás de la coma decimal.

Los tipos lógicos no son tipos de dato reales, sino nombres que se pueden asociar a tipos nativos.

14
Los tipos de dato se tratarán con mayor detalle más adelante en el curso. Para fechas, utilice el
tipo DATE. Para texto, utilice VARCHAR y, para números, NUMERIC.
El tamaño de los atributos es el número máximo de caracteres para los tipos VARCHAR.
Para los tipos de dato NUMERIC: Precision es el número máximo de dígitos y Scale es el número
de dígitos detrás de la coma decimal.

Los tipos lógicos no son tipos de dato reales, sino nombres que se pueden asociar a tipos nativos.

15
16
17
18
19
20
21
22
También se pueden modificar la opcionalidad y la cardinalidad de origen y de destino en la ventana
Relation Properties.
Para marcar una relación como no transferible, desactive la casilla de control Transferable en el origen o en
el destino.

23
.

24
.

25
26
27
28
La regla de negocio de esta relación se debe entender de la siguiente manera: "Cada MEMBERSHIP puede
pertenecer a un único STUDENT o a un único FACULTY".

29
La regla de negocio de esta relación se debe entender de la siguiente manera: "Cada MEMBERSHIP puede
pertenecer a un único STUDENT o a un único FACULTY".

30
31
En este ejemplo, el UID de COURSE es un UID compuesto que consta de Course Id, Department Id
y Faculty Id.

32
La regla de negocio de esta relación se debe entender de la siguiente manera: "Un empleado puede ser
jefe de uno o varios empleados“. "Un empleado solo puede tener un único jefe“

33
34
35
Fundamentos de bases de datos
4-2: Conversión de un modelo lógico en un modelo relacional
Prácticas
Ejercicio 1: Realizar ingeniería directa de un modelo lógico a un modelo relacional

Visión general
En esta práctica realizará ingeniería directa del modelo lógico de la base de datos académica a un modelo
relacional con Oracle SQL Developer Data Modeler.

Tareas
1. Para realizar ingeniería directa del modelo lógico de la base de datos académica a un modelo relacional,
realice lo siguiente:
a. Abra el modelo lógico en Oracle SQL Developer Data Modeler.
b. Haga clic en el icono Engineer to Relational Model.
c. Acepte todos los valores por defecto y haga clic en Engineer.
d. Amplíe el nodo Relational Models en el explorador de objetos para ver los objetos creados.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 4, lección 2, ejercicio: Oracle SQL Developer Data Modeler

Convertir el modelo relacional desde el modelo de datos lógicos (objetivo 3 de S4L2)


Parte 1:

En este ejercicio, se partirá del modelo de datos lógico terminado que se creó mediante Oracle SQL Data Modeler y se
convertirá en un modelo relacional. El modelo relacional forma la base del diseño de la base de datos física.

Cree un modelo relacional en Oracle SQL Data Modeler siguiendo estos pasos:
1. Actualice los atributos de las entidades para incluir su tamaño y tipo de dato.
a. Haga doble clic en la entidad para acceder a las propiedades.
b. Seleccione los atributos en el menú de la izquierda.
c. Seleccione cada atributo y elija la opción Logical en la ventana Properties para activar la lista
desplegable de tipos de dato.
d. Seleccione el tipo de dato apropiado (VARCHAR para representar texto; no hay ninguna opción
VARCHAR2).
e. Indique el tamaño en el recuadro de tamaño.
f. Los atributos que se hayan incorporado como claves ajenas se pueden cambiar en el modelo
relacional haciendo doble clic en ellos y definiendo su abreviatura preferida.
g. Los atributos que sean nombres con palabras clave deben tener una abreviatura preferida
asignada.
h. No puede asignar claves únicas en esta etapa.
i. Para las entidades de supertipo, defina la generación de árbol secundario como tabla única en la
propiedad de subtipo.

2. Haga clic en el icono Engineer to Relational Model.

3. Asegúrese de que todos los valores sean como se esperaba, comparando la información lógica y relacional en la
vista de árbol. Corrija los valores según sea necesario.

4. En el separador General Option, haga clic en Engineer Co-ordinates para bloquear el diagrama en el lugar y
evitar el solapamiento.

5. Cuando esté satisfecho, haga clic en Engineer.

6. Amplíe el nodo Relational Model en el explorador de objetos para ver los objetos que ha creado.

7. Mueva los objetos del nodo para asegurarse de que toda la información se puede ver en el diagrama.

8. Compruebe que el resultado coincida con la asignación de la tabla y guarde su trabajo.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Instrucciones de la tarea
Utilice el documento de asignación de tablas creado en un ejercicio anterior para asignar los tipos de
dato y tamaños.

Nombre de
Nombre abreviado de la tabla
la tabla
customers ctr
Tipo de Nombre de la Tipo de dato Size
Opcionalidad
clave columna
pk * ctr_number VARCHAR2 6
uk * email VARCHAR2 50
* first_name VARCHAR2 20
* last_name VARCHAR2 30
* phone_number VARCHAR2 11
* current_balance NUMBER 6,2
o loyalty_card_number VARCHAR2 6
fk1 o tem_id VARCHAR2 4
fk2 o sre_id VARCHAR2 4

Nombre de la tabla Nombre abreviado de la tabla


customers_addresses cas
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 8
* address_line_1 VARCHAR2 30
o address_line_2 VARCHAR2 30
* city VARCHAR2 15
* postal_code VARCHAR2 7
fk * ctr_number VARCHAR2 6

Nombre de
Nombre abreviado de la tabla
la tabla
teams tem
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * id VARCHAR2 4
* name VARCHAR2 20
* number_of_players NUMBER 2
o discount NUMBER 2

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Nombre de la tabla Nombre abreviado de la tabla
sales_representatives sre
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 4
uk * email VARCHAR2 50
* first_name VARCHAR2 20
* last_name VARCHAR2 30
* phone_number VARCHAR2 11
* commission_rate NUMBER 2
fk * supervisor_id VARCHAR2 4

Nombre de la tabla Nombre abreviado de la tabla


sales_representatives_address sas
Nombre de la Tipo de Tamaño
Tipo de clave Opcionalidad
columna dato
Pk, fk * id VARCHAR2 4
* address_line_1 VARCHAR2 30
o address_line_2 VARCHAR2 30
* city VARCHAR2 15
* postal_code VARCHAR2 7

Nombre de
Nombre abreviado de la tabla
la tabla
orders odr
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * id VARCHAR2 9
* odr_date DATE
* odr_time TIMESTAMP 0
* number_of_units NUMBER 2
fk * ctr_number VARCHAR2 6

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
Nombre de la
Nombre abreviado de la tabla
tabla
ordered_items odr
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
* quantity_ordered NUMBER 3
* quantity_shipped NUMBER 3
pk, fk1 * odr_id VARCHAR2 9
pk, fk2 * itm_number VARCHAR2 10

Nombre de
Nombre abreviado de la tabla
la tabla
items itm
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * itm_number VARCHAR2 10
* name VARCHAR2 20
* description VARCHAR2 50
* category VARCHAR2 25
o color VARCHAR2 15
o size CHAR 1
fk * ilt_id VARCHAR2 11

Nombre de
Nombre abreviado de la tabla
la tabla
inventory_list ilt
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 11
* cost NUMBER 7,2
* units NUMBER 4

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

5
Nombre de
Nombre abreviado de la tabla
la tabla
price_history phy
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * start_date DATE
pk * start_time TIMESTAMP 0
* price NUMBER 7,2
o end_date DATE
o end_time TIMESTAMP 0
pk, fk1 * itm_number VARCHAR2 10

Convertir el modelo relacional desde el modelo de datos lógicos (objetivo 3 de S4L2)


Parte 2:

En este ejercicio, se partirá del modelo relacional terminado y se creará el resto de restricciones.

1. Identifique las tablas que tienen columnas únicas que aún no se han creado.
a. Haga clic con el botón derecho en la tabla y seleccione Properties.
b. Seleccione Unique Constraints en el menú.
c. Haga clic en la cruz verde para agregar una nueva restricción única.
d. Utilice el formato de tipo name_column_name_constraint abreviado de la tabla para asignar un nombre a
las restricciones.
e. Seleccione la columna que se va a establecer como única y haga clic en la flecha para agregarla
a la columna seleccionada.
f. Haga clic en OK.

2. Identifique las tablas que tienen una relación recursiva.


a. Haga clic con el botón derecho en la tabla y seleccione Properties.
b. Seleccione Foreign Keys en el menú.
c. Haga clic en la cruz verde para agregar una nueva clave ajena.
d. Seleccione la columna a la que se hace referencia (pk) y la columna que se va a utilizar para
crear el enlace.
e. Haga clic en OK.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

6
3. Compruebe que todos los nombres cumplen las reglas de nomenclatura.
a. Vaya a cada tabla y seleccione la opción Foreign Keys del cuadro de diálogo de propiedades.
b. Haga clic en el nombre y seleccione el icono de edición para abreviarlo.
c. Haga clic en OK.

4. Guarde su trabajo.

Instrucciones de la tarea
Utilice el documento de asignación de tablas creado en un ejercicio anterior para asignar las restricciones.

Nombre de
Nombre abreviado de la tabla
la tabla
customers ctr
Tipo de Nombre de la Tipo de dato Tamaño
Opcionalidad
clave columna
pk * ctr_number VARCHAR2 6
uk * email VARCHAR2 50
* first_name VARCHAR2 20
* last_name VARCHAR2 30
* phone_number VARCHAR2 11
* current_balance NUMBER 6,2
uk o loyalty_card_number VARCHAR2 6
fk1 o tem_id VARCHAR2 4
fk2 o sre_id VARCHAR2 4

Nombre de la tabla Nombre abreviado de la tabla


customers_addresses cas
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 8
* address_line_1 VARCHAR2 30
o address_line_2 VARCHAR2 30
* city VARCHAR2 15
* postal_code VARCHAR2 7
fk * ctr_number VARCHAR2 6

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

7
Nombre de
Nombre abreviado de la tabla
la tabla
teams tem
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * id VARCHAR2 4
* name VARCHAR2 20
* number_of_players NUMBER 2
o discount NUMBER 2

Nombre de la tabla Nombre abreviado de la tabla


sales_representatives sre
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 4
uk * email VARCHAR2 50
* first_name VARCHAR2 20
* last_name VARCHAR2 30
* phone_number VARCHAR2 11
* commission_rate NUMBER 2
fk * supervisor_id VARCHAR2 4

Nombre de la tabla Nombre abreviado de la tabla


sales_representatives_address sas
Nombre de la Tipo de Tamaño
Tipo de clave Opcionalidad
columna dato
Pk, fk * id VARCHAR2 4
* address_line_1 VARCHAR2 30
o address_line_2 VARCHAR2 30
* city VARCHAR2 15
* postal_code VARCHAR2 7

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

8
Nombre de
Nombre abreviado de la tabla
la tabla
orders odr
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * id VARCHAR2 9
* odr_date DATE
* odr_time TIMESTAMP 0
* number_of_units NUMBER 2
fk * ctr_number VARCHAR2 6

Nombre de la
Nombre abreviado de la tabla
tabla
ordered_items odr
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
* quantity_ordered NUMBER 3
* quantity_shipped NUMBER 3
pk, fk1 * odr_id VARCHAR2 9
pk, fk2 * itm_number VARCHAR2 10

Nombre de
Nombre abreviado de la tabla
la tabla
items itm
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * itm_number VARCHAR2 10
* name VARCHAR2 20
* description VARCHAR2 50
* category VARCHAR2 25
o color VARCHAR2 15
o size CHAR 1
fk * ilt_id VARCHAR2 11

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

9
Nombre de
Nombre abreviado de la tabla
la tabla
inventory_list ilt
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 11
* cost NUMBER 7,2
* units NUMBER 4

Nombre de
Nombre abreviado de la tabla
la tabla
price_history phy
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * start_date DATE
pk * start_time TIMESTAMP 0
* price NUMBER 7,2
o end_date DATE
o end_time TIMESTAMP 0
pk, fk1 * itm_number VARCHAR2 10

Convertir el modelo relacional desde el modelo de datos lógicos (objetivo 3 de S4L2)


Parte 3: Crear un archivo de script SQL

En este ejercicio, se partirá del modelo relacional terminado que se ha creado en el ejercicio anterior y se creará el script
SQL que generará las tablas en APEX.

Tarea: Creación de los scripts DDL


1. Asegúrese de que está en la vista relacional.
a. Hacer clic en el botón Generate DDL de la barra de herramientas.
b. Seleccione el entorno para el que desea crear el script (11g está bien).
c. Haga clic en Generate.
d. En la ventana de Generation Options, vuelva a comprobar que todo es como debe ser.
e. Haga clic en OK.
f. Guarde el archivo en una ubicación local como "Sports Script.ddl".
g. Si se detecta algún error, tendrá que volver al modelo para resolverlo antes de volver a generar el script.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

10
2
3
4
5
6
7
8
Algunas de las reglas de negocio se convierten en restricciones de control. Otras reglas complejas requieren
programación adicional. Esta asignación inicial está limitada al diseño de tablas, columnas y restricciones
que se pueden declarar. Una restricción declarativa es una restricción de negocio que se puede garantizar
en el nivel de servidor mediante el uso solo de sentencias de lenguaje de base de datos; una restricción
declarativa no requiere codificación.

9
10
11
12
13
14
15
16
17
Fundamentos de bases de datos
5-1: Asignación de entidades y atributos
Prácticas
Ejercicio 1: Crear un glosario a partir del modelo lógico

Visión general
En esta práctica, creará un glosario a partir del modelo lógico de la base de datos académica.

Tareas
1. Abra el modelo lógico de la base de datos académica.
2. Haga clic con el botón derecho en el nodo Logical Model en el explorador y seleccione "Create Glossary
from Logical Model".
3. Especifique el nombre del glosario, una breve descripción y tantos tipos de clasificación como sean
aplicables a las entradas del glosario.
4. Guarde el glosario.

Ejercicio 2: Realizar ingeniería directa en el diseño para aplicar el glosario y el estándar de nomenclatura

Visión general
En esta práctica, realizará ingeniería directa del diseño para aplicar el glosario y el estándar de nomenclatura.

Tareas
1. Para que el glosario se aplique durante la ingeniería, debe agregarlo en el cuadro de diálogo Preferences
de la página Naming Standard. Para asegurarse de que se aplica el glosario al realizar la ingeniería
directa del modelo, realice los siguientes pasos:
a. Haga clic con el botón derecho en el modelo Design en el explorador y seleccione Properties.
b. Amplíe Settings y haga clic en el nodo Naming Standard.
c. Haga clic en el icono “+” en la región Glossary y navegue hasta la ubicación del glosario.

2. Para aplicar los estándares de nomenclatura que ha definido en Task 1, realice los siguientes pasos:
a. Haga clic en el icono Engineer (>>) en la barra de tareas. Se muestra el cuadro de diálogo
Engineering to Relational Model.
b. Haga clic en el separador General Options y, a continuación, active la casilla de control Apply name
translation. Observará que se resalta y se activa por defecto la casilla de control Use preferred
abbreviations.
c. Haga clic en Engineer para realizar ingeniería en el modelo.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
Un modelo de relación de entidad (ERM) no resalta las restricciones físicas y de base de datos. Es pieza
clave para transformar el ERM en un modelo relacional que pueda servir como base para definir la
implantación física de la base de datos.

5
El modelo lógico (ERD) captura los requisitos para un negocio mediante elementos gráficos como
entidades, relaciones y arcos. Este modelo es una representación genérica y no describe las complejidades
derivadas de la implantación física.
Es decir, si intenta ajustar toda la sintaxis de un modelo lógico (ERD) directamente en el modelo físico,
puede que se pierdan reglas de negocio concretas. Para mantener estas reglas específicas y realizar un
seguimiento de las mismas, debe transformar el modelo lógico en un modelo relacional.

6
La nomenclatura de restricciones se describe en la siguiente lección.

7
Cada RDBMS puede tener sus propias restricciones de nomenclatura. Debe saber si la convención que
decida utilizar es compatible con el RDBMS que usted elija.

8
9
10
Una vez creado el glosario, se crea un archivo XML con extensión .glossary . Para modificar el glosario,
debe utilizar el editor de glosarios y no un editor de texto externo.

11
12
13
14
15
16
17
18
19
20
21
22
23
Fundamentos de bases de datos
6-1: Introducción a Oracle Application Express
Prácticas
Ejercicio 1: Introducción a Oracle Application Express

Visión general
En esta práctica, verá un documento que le guiará por las distintas funciones de Oracle Application Express.

Tareas
1. Vaya a los del Section 0 – Course Resources de Learner – Learning Path para acceder a la Guía del estudiante de
iAcademy APEX.

2. Siga la Guía del usuario para conocer las características de Oracle Application Express.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 1, ejercicio: Introducción a Oracle Application Express

Cargar y ejecutar un script en APEX

En este ejercicio, utilizará el archivo obl Sports que se le proporcionó para crear su base de datos relacional. Este archivo
se puede encontrar en la Sección 6, Lección 1 (Zip - obl Sports Script) y primero debe extraerse.

Conéctese al entorno APEX con su nombre de usuario y contraseña:


1. Haga clic en SQL Workshop.
a. Haga clic en SQL Scripts.
b. Haga clic en Upload para buscar y seleccionar el archivo obl Sports.dll en la unidad local.
c. Una vez que haya cargado el archivo, haga clic en el botón Run.
d. Seleccione Run Now.
e. Haga clic en la opción View Results y desplácese a la parte inferior de la pantalla para ver
si se han detectado errores.
f. Si hubiera algún error, haga clic en el script Edit para resolverlo.
g. Vuelva a ejecutar el script.

2. Haga clic en SQL Workshop.


a. Haga clic en SQL Commands.
b. Ejecute la siguiente consulta para comprobar que se ha creado la tabla de clientes correctamente:

DESCRIBE customers;

c. Compruebe que la descripción coincide con el documento de asignación de tablas.


d. Realice lo mismo para las otras tablas que se han creado.

3. Haga clic en SQL Workshop.


a. Haga clic en Object Browser para verificar las tablas a través de la aplicación en lugar de a través
de SQL.
b. Seleccione Tables en el menú de la izquierda.
c. Haga clic en una tabla para seleccionarla.
d. Utilice los separadores de la parte superior para examinar la información de la tabla.

4. Todos los cambios que realice en APEX son cambios permanentes por lo que no es necesario que
guarde su trabajo.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Instrucciones de la tarea
Utilice el documento de asignación de tablas creado en un ejercicio anterior para verificar la creación de la tabla.

Nombre de
Nombre abreviado de la tabla
la tabla
customers ctr
Tipo de Nombre de la Tipo de dato Tamaño
Opcionalidad
clave columna
pk * ctr_number VARCHAR2 6
uk * email VARCHAR2 50
* first_name VARCHAR2 20
* last_name VARCHAR2 30
* phone_number VARCHAR2 11
* current_balance NUMBER 6,2
o loyalty_card_number VARCHAR2 6
fk1 o tem_id VARCHAR2 4
fk2 o sre_id VARCHAR2 4

Nombre de la tabla Nombre abreviado de la tabla


customers_addresses cas
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 8
* address_line_1 VARCHAR2 30
o address_line_2 VARCHAR2 30
* city VARCHAR2 15
* postal_code VARCHAR2 7
fk * ctr_number VARCHAR2 6

Nombre de
Nombre abreviado de la tabla
la tabla
teams tem
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * id VARCHAR2 4
* name VARCHAR2 20
* number_of_players NUMBER 2
o discount NUMBER 2

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Nombre de la tabla Nombre abreviado de la tabla
sales_representatives sre
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 4
uk * email VARCHAR2 50
* first_name VARCHAR2 20
* last_name VARCHAR2 30
* phone_number VARCHAR2 11
* commission_rate NUMBER 2
fk * supervisor_id VARCHAR2 4

Nombre de la tabla Nombre abreviado de la tabla


sales_representatives_address sas
Nombre de la Tipo de Tamaño
Tipo de clave Opcionalidad
columna dato
Pk, fk * id VARCHAR2 4
* address_line_1 VARCHAR2 30
o address_line_2 VARCHAR2 30
* city VARCHAR2 15
* postal_code VARCHAR2 7

Nombre de
Nombre abreviado de la tabla
la tabla
orders odr
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * id VARCHAR2 9
* odr_date DATE
* odr_time TIMESTAMP 0
* number_of_units NUMBER 2
fk * ctr_number VARCHAR2 6

Nombre de la
Nombre abreviado de la tabla
tabla
ordered_items odr
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
* quantity_ordered NUMBER 3
* quantity_shipped NUMBER 3
pk, fk1 * odr_id VARCHAR2 9
pk, fk2 * itm_number VARCHAR2 10
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
Nombre de
Nombre abreviado de la tabla
la tabla
items itm
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * itm_number VARCHAR2 10
* name VARCHAR2 20
* description VARCHAR2 50
* category VARCHAR2 25
o color VARCHAR2 15
o size CHAR 1
fk * ilt_id VARCHAR2 11

Nombre de
Nombre abreviado de la tabla
la tabla
inventory_list ilt
Nombre de la Tipo de dato Tamaño
Tipo de clave Opcionalidad
columna
pk * id VARCHAR2 11
* cost NUMBER 7,2
* units NUMBER 4

Nombre de
Nombre abreviado de la tabla
la tabla
price_history phy
Tipo de Tipo de dato Tamaño
Opcionalidad Nombre de la columna
clave
pk * start_date DATE
pk * start_time TIMESTAMP 0
* price NUMBER 7,2
o end_date DATE
o end_time TIMESTAMP 0
pk, fk1 * itm_number VARCHAR2 10

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

5
Database Foundations
6-1
Introducción a Oracle Application Express

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados.

2
Hoja de ruta Lenguaje de Lenguaje de
Introducción a Lenguaje de Lenguaje de manipulación control de
Oracle consulta definición de de datos transacciones
Application estructurado datos (DDL) (DML) (TCL)
Express (APEX) (SQL):

Ordenamiento Unión de
Recuperación Restricción de tablas
de datos datos de datos
mediante mediante
mediante mediante JOIN
SELECT WHERE ORDER BY

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 3

3
Objetivos
• En esta lección se abordan los siguientes objetivos:
−Distinguir entre software de aplicación y software del sistema
y dar un ejemplo de cada uno
−Conectarse al entorno de práctica de Oracle Application
Express
−Ejecutar una consulta simple para recuperar información de
la base de datos
−Aplicar las reglas de SQL para
mostrar todas las columnas y un
subjuego de columnas
especificadas por criterios

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 4

4
Objetivo
• Cada día, de un modo u otro, utilizamos aplicaciones
informáticas.
−Si ha consultado hoy su correo electrónico, probablemente lo
ha hecho por medio de una aplicación.
−Si ha adquirido un producto en un supermercado, el
dependiente ha escaneado el producto mediante una
aplicación que ha calculado la cuenta y ha actualizado el
inventario del almacén.
• En este curso, aprenderá la sintaxis de SQL mediante la
aplicación Oracle Application Express.

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 5

5
Programas de aplicaciones
• Aunque las computadoras han existido durante mucho
tiempo (posiblemente antes de que naciera), su uso en
el ámbito personal y de los negocios no se produjo
hasta que se desarrollaron los programas de software
de aplicaciones
• Los programas de aplicaciones permitían al usuario
final (personas normales y corrientes) comprar
programas completamente desarrollados y listos para
usar
Ya no era necesario conocer el funcionamiento del
programa, bastaba con saber que funcionaba y que
realizaba la función que deseábamos

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 6

El software del programa de aplicación es distinto al software del sistema. El software del sistema consta
de programas de bajo nivel diseñados para interactuar con el hardware de la computadora. Los sistemas
operativos, compiladores y utilidades del sistema son ejemplos de software del sistema. Por el contrario, el
software de aplicación incluye programas para procesamiento de texto, bases de datos, juegos, correo
electrónico y gráficos.

6
Programas de aplicaciones
• Yahoo.com utiliza la base de datos Oracle para
almacenar datos
• En lugar de hacer que todos los usuarios que desean
buscar en la base de datos o recuperar correo
electrónico aprendan SQL, la aplicación ya viene con
todo el SQL (y otros lenguajes de codificación)
programado previamente
• Con solo unos clics del mouse, los usuarios pueden
acceder a toda la información que necesitan

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 7

7
Uso de aplicaciones
• Una aplicación es como un coche.
−Para conducirlo, debes saber lo suficiente para hacer que
funcione
−Tiene un "chasis" para ocultar todos los elementos que no
necesita conocer, como el modo de funcionamiento de la
transmisión o cómo se utiliza el combustible (gasolina o
diésel) para impulsar el motor
• ¿Podría conseguir el carnet de conducir si tuviera que
demostrar que conoce todos los sistemas
(eléctrico, transmisión, hidráulico, combustible, etc.)
que se utilizan para que el coche arranque?

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 8

8
Oracle Application Express
• Oracle Application Express es una herramienta de
desarrollo, despliegue y mantenimiento de
aplicaciones web

Oracle APEX
DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 9

• Oracle Application Express es una herramienta de desarrollo y despliegue basada en web que está
disponible con la base de datos Oracle. Le permite crear aplicaciones web centradas en bases de datos
que son fiables, escalables y seguras. Tiene varias funciones y asistentes incorporados que agilizan el
proceso de desarrollo. En la diapositiva se muestran algunas de las funciones clave.
• La herramienta tiene una interfaz gráfica fácil de usar. El uso de Oracle Application Express requiere
pocos conocimientos de programación.

Nota: En este curso, utilizará Oracle Application Express.

9
Componentes de Oracle Application Express
• Oracle Application Express tiene los siguientes
componentes:
−Taller de SQL
−Creador de Aplicaciones
−Explorador de Objetos
• Para obtener más información sobre SQL, utilizará el
componente SQL Workshop
• Para diseñar una aplicación, utilizará Application
Builder
• Para obtener instrucciones sobre el uso de APEX,
consulte la Guía del alumno de iAcademy en el
Member Hub

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 10

10
Ejercicio del proyecto

• DFo_6_1_Project
−Base de datos de la tienda Oracle Baseball League:
−Carga y ejecución de un script en APEX

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 11

11
Sentencia SELECT básica
• El comando SELECT * devuelve todas las filas en una
tabla
−La sintaxis es la siguiente:
SELECT *
FROM <table name>;

• Por ejemplo:
SELECT *
FROM employees;

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 12

Sintaxis: las reglas que rigen la formación de sentencias en un lenguaje de programación.


Los alumnos deben introducir el ejemplo anterior en APEX para ver los resultados.

12
Sentencia SELECT con una condición
• Para devolver un subjuego de los datos, modifique la
sentencia SELECT
• La sintaxis es la siguiente:
SELECT <column name 1, column name 2, etc.>
FROM <table name>
WHERE <condition>;

• Por ejemplo:
SELECT first_name, last_name, job_id
FROM employees
WHERE job_id = 'SA_REP';

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 13

La condición (<condition>) empieza por la palabra WHERE seguida de <column name> y un operador de
comparación (=, >, <, etc.) seguidos de un valor o IS NULL, IS NOT NULL.

13
Corrección de errores
• Al introducir comandos SQL, es importante utilizar la
ortografía correcta, de lo contrario, se mostrará un
mensaje de error
• Por ejemplo (SELECT: ortografía incorrecta):
• Se generaría el mensaje de error:
SEECT *
FROM employees;

• Para rectificar, basta con corregir la ortografía y volver


a ejecutarlo

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 14

14
Terminología
• Entre los términos clave utilizados en esta lección
se incluyen:
−Software de la aplicación
−Software del sistema
−Oracle Application Express
−Sintaxis
−Subjuego
−Operador de comparación

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 15

15
Resumen
• En esta lección, debe haber aprendido lo siguiente:
−Distinguir entre software de aplicación y software del sistema
y dar un ejemplo de cada uno
−Conectarse al entorno de práctica de Oracle Application
Express
−Ejecutar una consulta simple para recuperar información de
la base de datos
−Aplicar las reglas de SQL para
mostrar todas las columnas y
un subjuego de columnas
especificadas por criterios

DFo 6-1
Introducción a Oracle Application Express (APEX) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 16

16
Fundamentos de bases de datos
6-2: Lenguaje de consulta estructurado
Prácticas
Ejercicio 1: Utilizar la ayuda en Oracle Application Express

Visión general
En esta práctica:
• Se conectará a Oracle Application Express.
• Se familiarizará con las secciones Help de Oracle Application Express.

Supuestos
Se le ha asignado un espacio de trabajo de Oracle Application Express y las credenciales para conectarse.

Tareas
1. Acceda y conéctese a Oracle Application Express

2. Haga clic en el icono Help y familiarícese con la siguiente sección y temas:


1) Taller SQL de Oracle Application Express
a) Gestión de objetos de base de datos con el explorador de objetos
b) Uso de comandos SQL
c) Uso de scripts SQL

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
El software de Oracle se ejecuta en muchas arquitecturas de hardware y sistemas operativos. La
computadora en la que reside el software de Oracle Database se conoce como el servidor de Oracle
Database. Además, el servidor de Oracle Database puede hacer referencia al software de Oracle Database y
sus datos.

6
Una base de datos relacional puede contener una o más tablas. Una tabla es la estructura básica de
almacenamiento de RDBMS. Una tabla contiene todos los datos necesarios sobre algo del mundo real,
como empleados, facturas o clientes. La diapositiva muestra el contenido de la relación o tabla EMPLOYEES.
Los números indican lo siguiente:
1. Una única fila (o tupla), que representa todos los datos necesarios para un empleado concreto. Cada fila de una
tabla se debe identificar por una llave primaria, que no permite duplicar filas. El orden de las filas no es
importante. Se puede especificar cuando se recuperen los datos.
2. Una columna o un atributo que contiene el valor de la llave primaria. El número de employee_id identifica a un
único empleado en la tabla EMPLOYEES. En este ejemplo, la columna del número de employee_id está
designada como llave primaria. Una llave primaria debe contener un valor y el valor debe ser único.
3. Una columna que no es un valor clave. Una columna representa un tipo de dato en una tabla; en este ejemplo,
los datos son los salarios de todos los empleados. El orden de las columnas no es importante al almacenar
datos; se puede especificar el orden de la columna al recuperar los datos.
4. Una columna o atributo que contiene el valor de clave foránea, que también es una clave foránea. Una clave
foránea es una columna que define cómo se relacionan las tablas entre sí. Una clave foránea hace referencia a
una llave primaria o única en la misma tabla o en otra tabla. En el ejemplo, DEPARTMENT_ID identifica de
forma única un departamento en la tabla DEPARTMENTS.
5. Un campo puede estar en la intersección de una fila y una columna. Solo puede contener un valor.
6. Un campo puede no contener ningún valor. Esto se denomina valor nulo. En la tabla EMPLOYEES, solo aquellos
empleados que tienen el rol de representante de ventas tienen un valor en el campo COMMISSION_PCT
(comisiones).

7
Debido a que los datos sobre las diferentes entidades se almacenan en diferentes tablas, puede que tenga
que combinar dos o más tablas para responder a una pregunta determinada. Por ejemplo, puede que
desee conocer la ubicación del departamento en el que trabaja un empleado. En este caso, necesita
información de la tabla EMPLOYEES (que contiene datos sobre los empleados) y la tabla DEPARTMENTS
(que contiene información sobre los departamentos). Con RDBMS, puede relacionar los datos de una tabla
con los datos de otra utilizando las claves foráneas. Una clave foránea es una columna (o un juego de
columnas) que hace referencia a una llave primaria en la misma tabla o en otra tabla.
Tiene la posibilidad de relacionar datos de una tabla con datos de otra tabla para organizar la información
en unidades separadas y gestionables. Los datos de empleado se pueden mantener, de forma lógica,
separados de los datos de departamento almacenándolos en una tabla independiente.

8
9
10
SQL ofrece ventajas para todos los tipos de usuarios:
• Programadores de aplicaciones
• Administradores de base de datos
• Gestores
• Usuarios finales
SQL procesa los juegos de datos como grupos en lugar de como unidades individuales. Permite a los
usuarios:
• Acceder y describir los datos almacenados en la base de datos
• Definir los datos almacenados en la base de datos y manipular esos datos

11
12
• Análisis SQL: La primera etapa del procesamiento SQL es el análisis, que implica la separación de partes
de una sentencia SQL en una estructura de datos que puedan procesar otras rutinas. La base de datos
analiza una sentencia cuando lo indica la aplicación, lo que significa que solo la aplicación, no solo la
base de datos en sí, puede reducir el número de análisis. Durante el análisis, la base de datos realiza
una comprobación de la sintaxis, una comprobación de la semántica y una comprobación del pool
compartido.
• Optimización SQL: Es el proceso de selección del medio más eficaz de ejecutar una sentencia SQL. La
base de datos optimiza las consultas basándose en las estadísticas recopiladas sobre los datos reales a
los que se está accediendo. El optimizador utiliza el número de filas, el tamaño del juego de datos y
otros factores para generar posibles planes de ejecución, asignando un costo numérico a cada plan. La
base de datos utiliza el plan con el costo más reducido.
• Generación de origen de fila SQL: El generador de origen de fila es el software que recibe el plan de
ejecución óptimo desde el optimizador y produce un plan iterativo, denominado plan de consulta, que
puede utilizar el resto de la base de datos. El plan iterativo es un programa binario que, cuando se
ejecuta, genera el juego de resultados. El plan de consulta adopta la forma de una combinación de
pasos. Cada paso devuelve un juego de filas. Las filas de este juego se utilizan en el siguiente paso o, en
el último paso, se devuelven a la aplicación mediante la emisión de una sentencia SQL.
• Ejecución de SQL: El motor SQL ejecuta cada origen de fila del árbol producido por el generador de
orígenes de fila.

13
14
15
La necesidad de almacenar y manipular datos se produce en distintos sectores. Entre los ejemplos se
incluyen servicios de salud, transporte, venta al por menor y educación.
• Los datos de los pacientes se almacenan en un hospital y se denominan registros médicos.
• Las aerolíneas almacenan datos para que los pasajeros puedan adquirir sus billetes y realizar la
facturación en línea.
• Las escuelas mantienen registros de los alumnos y los profesores para realizar transcripciones.

16
17
Fundamentos de bases de datos
6-3: Definición del lenguaje de definición de datos (DDL)
Prácticas
Ejercicio 1: Creación de tablas mediante Oracle Application Express

Visión general
En esta práctica, creará las tablas para la base de datos académica.

Supuestos
A continuación, se muestra el diagrama de relación de entidad (ERD) de la base de datos académica en la que se crearán las tablas:

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Tareas
1. Cree las sentencias DDL para la creación de tablas para la base de datos académica mostradas anteriormente; incluya las
restricciones no nulas donde sea necesario. (El resto de las restricciones se agregarán posteriormente).

2. Ejecute estos comandos en Oracle Application Express.

Ejercicio 2: Modificar las tablas

Visión general
En esta práctica:
• Modificará las tablas para definir las restricciones.
• Especificará un valor por defecto para una columna.
• Definirá una tabla en estado de solo lectura.

Supuestos
Las restricciones de llave primaria y ajena se basan en el ERD mostrado en el ejercicio anterior, y las restricciones únicas
se basan en lo siguiente:
Los siguientes campos deben tener valores únicos:
• Nombre del curso en AD_COURSES
• Nombre de departamento en AD_DEPARTMENTS
• Dirección de correo electrónico del alumno en AD_STUDENTS
• Dirección de correo electrónico del profesor en AD_FACULTY
• Nombre de la sesión en AD_ACADEMIC_SESSIONS

Tareas
1. Modifique las tablas de la base de datos académica para definir las restricciones de llave primaria, de clave foránea y únicas.
2. Modifique la tabla AD_FACULTY_LOGIN_DETAILS y especifique un valor por defecto para la columna LOGIN_DATE_TIME
de SYSDATE.
3. Defina la tabla AD_PARENT_INFORMATION en un estado de solo lectura.

NOTA: Puede ejecutar las sentencias INSERT / ALTER TABLE en Oracle Application Express mediante uno de estos dos métodos:
Método 1:
a. Abra Oracle Application Express, pegue de uno en uno los comandos en la pantalla SQL Commands y ejecútelos.
Método 2:
a. Abra Oracle Application Express y utilice el mismo método de carga del script que utilizó con los comandos DDL anteriormente.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Ejercicio 3: Creación de llaves primarias, ajenas y únicas compuestas

Visión general
En esta práctica, creará una:
• Llave primaria compuesta
• Clave foránea compuesta
• Clave única compuesta
** Nota: Estas tablas no forman parte de la base de datos académica.

Tareas
1. Cree la tabla DEPT con la siguiente estructura:
Column Data Type Description
dept_id number(8) Department ID
dept_name varchar2(30) Department Name
loc_id number(4) Location ID

La llave primaria de esta tabla se debe definir como un compuesto que conste de dept_id y loc_id.

2. Cree las tablas SUPPLIERS y PRODUCTS con la siguiente estructura:

TABLA SUPPLIERS
Column Data Type Description
sup_id number(15) Supplier ID part of composite primary key
sup_name varchar2(30) Supplier Name part of composite primary key
contact_name number(4) Agent Contact Name

La llave primaria de esta tabla se debe definir como un compuesto que conste de sup_id y sup_name.

TABLA PRODUCTS
Column Data Type Description
product_id number(10) Product ID is the primary key
sup_id number(15) Supplier ID that does not hold NULL value
sup_name varchar2(30) Supplier Name that does not hold NULL value

La llave primaria de esta tabla es product_id. La clave foránea de esta tabla se debe definir como un compuesto que conste de
sup_id y sup_name.

3. Cree la tabla DEPT_SAMPLE con la siguiente estructura:


Column Data Type Description
dept_id number(8) Department ID
dept_name varchar2(30) Department Name
loc_id number(4) ID de ubicación

La clave UNIQUE de esta tabla se debe definir como un compuesto que conste de dept_id y dept_name.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Fundamentos de bases de datos
6-3: Definición del lenguaje de definición de datos (DDL)
Prácticas
Ejercicio 1: Creación de tablas mediante Oracle Application Express

Visión general
En esta práctica, creará las tablas para la base de datos académica.

Supuestos
A continuación, se muestra el diagrama de relación de entidad (ERD) de la base de datos académica en la que se crearán las tablas:

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Tareas
1. Cree las sentencias DDL para la creación de tablas para la base de datos académica mostradas anteriormente; incluya las
restricciones no nulas donde sea necesario. (El resto de las restricciones se agregarán posteriormente).

2. Ejecute estos comandos en Oracle Application Express.

Ejercicio 2: Modificar las tablas

Visión general
En esta práctica:
• Modificará las tablas para definir las restricciones.
• Especificará un valor por defecto para una columna.
• Definirá una tabla en estado de solo lectura.

Supuestos
Las restricciones de llave primaria y ajena se basan en el ERD mostrado en el ejercicio anterior, y las restricciones únicas
se basan en lo siguiente:
Los siguientes campos deben tener valores únicos:
• Nombre del curso en AD_COURSES
• Nombre de departamento en AD_DEPARTMENTS
• Dirección de correo electrónico del alumno en AD_STUDENTS
• Dirección de correo electrónico del profesor en AD_FACULTY
• Nombre de la sesión en AD_ACADEMIC_SESSIONS

Tareas
1. Modifique las tablas de la base de datos académica para definir las restricciones de llave primaria, de clave foránea y únicas.
2. Modifique la tabla AD_FACULTY_LOGIN_DETAILS y especifique un valor por defecto para la columna LOGIN_DATE_TIME
de SYSDATE.
3. Defina la tabla AD_PARENT_INFORMATION en un estado de solo lectura.

NOTA: Puede ejecutar las sentencias INSERT / ALTER TABLE en Oracle Application Express mediante uno de estos dos métodos:
Método 1:
a. Abra Oracle Application Express, pegue de uno en uno los comandos en la pantalla SQL Commands y ejecútelos.
Método 2:
a. Abra Oracle Application Express y utilice el mismo método de carga del script que utilizó con los comandos DDL anteriormente.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Ejercicio 3: Creación de llaves primarias, ajenas y únicas compuestas

Visión general
En esta práctica, creará una:
• Llave primaria compuesta
• Clave foránea compuesta
• Clave única compuesta
** Nota: Estas tablas no forman parte de la base de datos académica.

Tareas
1. Cree la tabla DEPT con la siguiente estructura:
Column Data Type Description
dept_id number(8) Department ID
dept_name varchar2(30) Department Name
loc_id number(4) Location ID

La llave primaria de esta tabla se debe definir como un compuesto que conste de dept_id y loc_id.

2. Cree las tablas SUPPLIERS y PRODUCTS con la siguiente estructura:

TABLA SUPPLIERS
Column Data Type Description
sup_id number(15) Supplier ID part of composite primary key
sup_name varchar2(30) Supplier Name part of composite primary key
contact_name number(4) Agent Contact Name

La llave primaria de esta tabla se debe definir como un compuesto que conste de sup_id y sup_name.

TABLA PRODUCTS
Column Data Type Description
product_id number(10) Product ID is the primary key
sup_id number(15) Supplier ID that does not hold NULL value
sup_name varchar2(30) Supplier Name that does not hold NULL value

La llave primaria de esta tabla es product_id. La clave foránea de esta tabla se debe definir como un compuesto que conste de
sup_id y sup_name.

3. Cree la tabla DEPT_SAMPLE con la siguiente estructura:


Column Data Type Description
dept_id number(8) Department ID
dept_name varchar2(30) Department Name
loc_id number(4) ID de ubicación

La clave UNIQUE de esta tabla se debe definir como un compuesto que conste de dept_id y dept_name.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 3, ejercicio: Lenguaje de definición de datos

Utilizar DDL para crear y actualizar tablas de base de datos (objetivo 3 de S6L3)

Parte 1: Lectura de la información de un script


En este ejercicio, utilizará el archivo "obl Sports.ddl" para consolidar su conocimiento de DDL.

Abra "obl Sports.ddl" en un editor de texto.


1. ¿Cuántas tablas se han creado utilizando la sentencia CREATE TABLE?

2. ¿Cuántas columnas se crean para la tabla de historial de precios?

3. ¿Qué sentencia se utiliza para aplicar la restricción que la columna Category de la tabla de artículos debe
tener un valor?

4. ¿Cuál es el nombre de la restricción de clave foránea entre las tablas de clientes y direcciones de
clientes?

5. ¿Cuáles son los valores mínimo y máximo que se pueden almacenar en la columna commission_rate
para la tabla sales_representatives?

6. ¿Cuáles son los valores mínimo y máximo que se pueden almacenar en la columna Price de la tabla
price_history?

7. ¿Cuáles son las 3 columnas que forman la llave primaria de la tabla price_history?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Parte 2: Actualización de restricciones
Conéctese a APEX y vaya al entorno de comandos SQL.

Modificación de columnas
1. Ejecute el comando DESCRIBE en la tabla de pedidos para ver su estructura.
2. Tarea: Agregue una restricción por defecto que use la fecha de hoy para asignar un valor a la columna odr_date
de la tabla de pedidos si no se proporciona la fecha.
3. Vuelva a ejecutar el comando DESCRIBE para verificar que se ha ejecutado correctamente.

Adición de restricciones de control


1. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.
2. Tarea: Agregue una restricción de control que no permita que el saldo actual de clientes sea inferior a cero.
3. Vuelva a ejecutar el comando DESCRIBE para verificar que se ha ejecutado correctamente.
4. Las restricciones de control no se muestran en los resultados de un comando DESCRIBE.
a. Vaya al explorador de objetos.
b. Seleccione la tabla de clientes.
c. Haga clic en el separador CONSTRAINTS.
d. Verá la restricción aquí.

Adición de columnas
El cliente ha decidido que quiere tener una columna independiente para el número de teléfono móvil del cliente. Esta es
una columna opcional que deberá tener capacidad para almacenar 11 dígitos.
1. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.
2. Tarea: Agregue una columna que cumpla con los requisitos del cliente.
3. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.

Borrado de columnas
El cliente ha decidido que no necesita la columna de números de teléfono móvil porque la mayoría de los
clientes solo tienen un número de contacto que ya se encuentra en la columna phone_number existente.
1. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.
2. Tarea: Borre la columna que se creó para almacenar el teléfono móvil.
3. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos. Le acaban de adjudicar
un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de datos de una pequeña
tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 3, ejercicio: Lenguaje de definición de datos

Utilizar DDL para crear y actualizar tablas de base de datos (objetivo 3 de S6L3)

Parte 1: Lectura de la información de un script


En este ejercicio, utilizará el archivo "obl Sports.ddl" para consolidar su conocimiento de DDL.

Abra "obl Sports.ddl" en un editor de texto.


1. ¿Cuántas tablas se han creado utilizando la sentencia CREATE TABLE?

2. ¿Cuántas columnas se crean para la tabla de historial de precios?

3. ¿Qué sentencia se utiliza para aplicar la restricción que la columna Category de la tabla de artículos debe
tener un valor?

4. ¿Cuál es el nombre de la restricción de clave foránea entre las tablas de clientes y direcciones de
clientes?

5. ¿Cuáles son los valores mínimo y máximo que se pueden almacenar en la columna commission_rate
para la tabla sales_representatives?

6. ¿Cuáles son los valores mínimo y máximo que se pueden almacenar en la columna Price de la tabla
price_history?

7. ¿Cuáles son las 3 columnas que forman la llave primaria de la tabla price_history?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Parte 2: Actualización de restricciones
Conéctese a APEX y vaya al entorno de comandos SQL.

Modificación de columnas
1. Ejecute el comando DESCRIBE en la tabla de pedidos para ver su estructura.
2. Tarea: Agregue una restricción por defecto que use la fecha de hoy para asignar un valor a la columna odr_date
de la tabla de pedidos si no se proporciona la fecha.
3. Vuelva a ejecutar el comando DESCRIBE para verificar que se ha ejecutado correctamente.

Adición de restricciones de control


1. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.
2. Tarea: Agregue una restricción de control que no permita que el saldo actual de clientes sea inferior a cero.
3. Vuelva a ejecutar el comando DESCRIBE para verificar que se ha ejecutado correctamente.
4. Las restricciones de control no se muestran en los resultados de un comando DESCRIBE.
a. Vaya al explorador de objetos.
b. Seleccione la tabla de clientes.
c. Haga clic en el separador CONSTRAINTS.
d. Verá la restricción aquí.

Adición de columnas
El cliente ha decidido que quiere tener una columna independiente para el número de teléfono móvil del cliente. Esta es
una columna opcional que deberá tener capacidad para almacenar 11 dígitos.
1. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.
2. Tarea: Agregue una columna que cumpla con los requisitos del cliente.
3. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.

Borrado de columnas
El cliente ha decidido que no necesita la columna de números de teléfono móvil porque la mayoría de los
clientes solo tienen un número de contacto que ya se encuentra en la columna phone_number existente.
1. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.
2. Tarea: Borre la columna que se creó para almacenar el teléfono móvil.
3. Ejecute el comando DESCRIBE en la tabla de clientes para ver su estructura.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
Database Foundations
6-3
Lenguaje de definición de datos (DDL)

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados.

2
Objetivos
• En esta lección se abordan los siguientes objetivos:
−Identificar los pasos necesarios para crear tablas de base de
datos
−Describir la finalidad del lenguaje de definición de datos
(DDL)
−Mostrar las operaciones DDL necesarias para crear y
mantener las tablas de una base de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 3

3
Objetos de base de datos

Objeto Descripción
Tabla Es la unidad básica de almacenamiento; consta
de filas.
Vista Representa de forma lógica subjuegos de datos
de una o más tablas.
Secuencia Genera valores numéricos.
Índice Mejora el rendimiento de algunas consultas.
Sinónimo Ofrece un nombre alternativo para un objeto.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 4

Nota: En este curso, vamos a crear y recuperar información de la unidad básica de almacenamiento, las
tablas. Hay más objetos de base de datos disponibles que los enumerados, pero no se tratan en este curso.

4
Reglas de nomenclatura para tablas y columnas
• Los nombres de tabla y de columna deben:
−Empezar por una letra
−Tener entre 1 y 30 caracteres
−Contener solo A–Z, a–z, 0–9, _, $ y #
−No ser un duplicado de otro nombre de objeto propiedad del
mismo usuario
−No ser una palabra reservada del servidor de Oracle

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 5

Nota: Los nombres no son sensibles a mayúsculas/minúsculas. Por ejemplo, EMPLOYEES se considera lo
mismo que eMPloyees o eMpLOYEES. Sin embargo, los identificadores entre comillas son sensibles a
mayúsculas/minúsculas.

Para obtener una lista completa de las palabras reservadas, consulte:


https://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm#CJHIIICD

5
Sentencia CREATE TABLE
• Para emitir una sentencia CREATE TABLE, se debe
disponer de lo siguiente:
−El privilegio CREATE TABLE
−Un área de almacenamiento

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr][, ...]);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 6

Para crear una tabla, un usuario debe tener el privilegio CREATE TABLE y un área de almacenamiento en
la que crear los objetos. El administrador de la base de datos (DBA) utiliza sentencias de lenguaje de control
de datos (DCL) para otorgar privilegios a los usuarios.
En la sintaxis:
• schema es el mismo nombre que el del propietario.
• table es el nombre de la tabla.
• DEFAULT expr especifica un valor por defecto si se omite un valor en la sentencia INSERT.
• column es el nombre de la columna.
• datatype es el tipo de dato y la longitud de la columna.

Nota: Se necesita el privilegio CREATE ANY TABLE para crear una tabla en cualquier esquema distinto
del esquema del usuario.

6
Sentencia CREATE TABLE
• Especifique en la sentencia:
−Nombre de la tabla
−Nombre de columna, tipo de dato de columna, tamaño de
columna
−Restricciones de integridad (opcional)
−Valores por defecto (opcional)
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 7

7
Creación de tablas
• Crear una tabla:
CREATE TABLE dept(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
create_date DATE DEFAULT SYSDATE
);

• Para confirmar que se ha creado la tabla, ejecute el


comando DESCRIBE

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 8

Nota: Puede ver la lista de las tablas que posee realizando consultas en el diccionario de datos. Por
ejemplo, select table_name from user_tables;

Para obtener más información sobre las tablas del diccionario de datos, consulte:
https://docs.oracle.com/database/121/GMSWN/apc.htm#GMSWN600

8
Creación de tablas
• Confirmar la creación de la tabla:

DESCRIBE dept;

Table Column Data Type Length Precision Scale Primary Key Nullable Default Comment

DEPT DEPTNO NUMBER - 2 0 - - -

DNAME VARCHAR2 14 - - - - -

LOC VARCHAR2 13 - - - - -

CREATE_DATE DATE 7 - - - SYSDATE -

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 9

9
Tipos de dato
Tipo de dato Descripción
VARCHAR2(size) Datos de caracteres de longitud variable
(Se debe especificar un tamaño máximo; el tamaño mínimo es 1).
Tamaño máximo: 32767 bytes
CHAR(size) Datos de tipo carácter de longitud fija de longitud (size) en bytes.
(El tamaño por defecto y mínimo es 1; el tamaño máximo es 2000)
NUMBER(p, s) Datos numéricos de longitud variable. La precisión es p, y la escala,
s. (La precisión es el número total de dígitos decimales,
y la escala el número de dígitos a la derecha del punto decimal;
la precisión puede ir de 1 a 38, y la escala de –84 a 127).
DATE Valores de fecha y hora hasta el segundo más próximo entre el
1 de enero del 4712 a.C. y el 31 de diciembre del 9999 d.C.
LONG Datos de caracteres de longitud variable (hasta 2 GB).

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 10

10
Tipos de dato
Tipo de dato Descripción
CLOB Objeto grande de caracteres (CLOB) que contiene caracteres de un solo byte o multibyte. El
tamaño máximo es (4 GB - 1) * (DB_BLOCK_SIZE); almacena datos del juego de caracteres
nacional.
NCLOB CLOB que contiene caracteres Unicode. Se soportan los juegos de caracteres de ancho fijo y
variable y ambos utilizan el juego de caracteres nacional de la base de datos. El tamaño
máximo es
(4 GB - 1) * (tamaño de bloque de base de datos); almacena datos del juego de caracteres
nacional.
RAW (Size) Datos binarios raw con una longitud en bytes especificada por size.
Debe especificar size para un valor RAW. El tamaño ( size) máximo es:
32767 bytes si MAX_SQL_STRING_SIZE = EXTENDED
4000 bytes si MAX_SQL_STRING_SIZE = LEGACY
LONG RAW Datos binarios raw de longitud variable hasta 2 GB.
BLOB Objeto grande binario. El tamaño máximo es (4 GB - 1) * (parámetro de inicialización
DB_BLOCK_SIZE (de 8 TB a 128 TB)).
BFILE Datos binarios almacenados en un archivo externo (hasta 4 GB).
ROWID Cadena de base 64 que representa la dirección única de una fila en su tabla
correspondiente. Este tipo de dato es principalmente para valores devueltos por la
pseudocolumna ROWID

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 11

11
Ejemplo: Creación de una tabla con diferentes tipos
de datos

CREATE TABLE print_media(


product_id NUMBER(6),
id NUMBER(6),
desc VARCHAR2(100),
composite BLOB,
msourcetext CLOB,
finaltext CLOB,
photo BLOB,
graphic BFILE
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 12

12
Tipos de dato de fecha

Tipo de dato Descripción


TIMESTAMP Permite almacenar los datos de tiempo como fecha con segundos
fraccionarios. Almacena el valor de año, mes, día, hora, minuto y segundo
del tipo de dato DATE, así como el valor para segundos fraccionarios.
Existen diversas variaciones de este tipo de dato, como, por ejemplo,
WITH TIMEZONE y WITH LOCALTIMEZONE.
INTERVAL YEAR TO Permite almacenar el tiempo como un intervalo de años y meses.
MONTH Se utiliza para representar la diferencia entre dos valores de fecha y hora
en los que las únicas partes significativas son el año y el mes.
INTERVAL DAY TO Permite almacenar el tiempo como un intervalo de días, horas, minutos y
SECOND segundos; se utiliza para representar la diferencia exacta entre dos valores
de fecha y hora.
TIMESTAMP WITH Variante de TIMESTAMP que incluye el nombre de la región de zona
TIME ZONE horaria o el desplazamiento de zona horaria en su valor.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 13

Puede utilizar varios tipos de dato de fecha.


Ejemplo de TIMESTAMP WITH TIMEZONE:
CREATE TABLE table_tstz (c_id NUMBER, c_tstz TIMESTAMP WITH
TIME ZONE);
INSERT INTO table_tstz VALUES(1, '01-JAN-2003 2:00:00 AM –
07:00');

13
Ejemplos: Tipos de dato de fecha
• Ejemplo de tipo de dato TIMESTAMP:
CREATE TABLE table_ts(
c_id NUMBER(6),
c_ts TIMESTAMP
);

INSERT INTO table_ts


VALUES(1, '01-JAN-2003 2:00:00');

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 14

14
Ejemplos: Tipos de dato de fecha
• Ejemplo de una tabla con las columnas TIMESTAMP,
INTERVAL YEAR TO MONTH e INTERVAL DAY TO
SECOND:
CREATE TABLE time_table(
start_time TIMESTAMP,
duration_1 INTERVAL DAY (6) TO SECOND (5),
duration_2 INTERVAL YEAR TO MONTH
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 15

15
Opción DEFAULT
• Especifica un valor por defecto para una columna
durante la operación CREATE TABLE
• Esta opción evita que se introduzcan valores nulos en
las columnas si se inserta una fila sin un valor para la
columna
... hire_date DATE DEFAULT SYSDATE, ...

• Los valores literales, expresiones o funciones SQL son


valores válidos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 16

Observe el siguiente ejemplo, donde la sentencia inserta el valor NULL en lugar del valor por defecto:
INSERT INTO hire_dates values(45, NULL);

En el siguiente ejemplo, la sentencia inserta SYSDATE para la columna HIRE_DATE, ya que es el valor
DEFAULT:
INSERT INTO hire_dates(id) values(35);

16
Opción DEFAULT
• El nombre de otra columna o una pseudocolumna son
valores no válidos
• El tipo de dato por defecto debe coincidir con el tipo
de dato de la columna
CREATE TABLE hire_dates(
id NUMBER(8),
hire_date DATE DEFAULT SYSDATE
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 17

17
Escenario de caso: Creación de tablas

¿Cómo crear las


tablas para la
base de datos de
biblioteca
simplificada?

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 18

18
Escenario de caso: Creación de tablas
CREATE TABLE AUTHORS
CREATE TABLE BOOK_TRANSACTIONS ( ID NUMBER(3),
( ID VARCHAR2(6), NAME VARCHAR2(60)
TRAN_DATE DATE DEFAULT SYSDATE, );
TYPE VARCHAR2(10),
BOOK_ID VARCHAR2(6),
MEMBER_ID NUMBER(4)
);

CREATE TABLE PUBLISHERS


( ID NUMBER(2),
NAME VARCHAR2(100)
);

CREATE TABLE MEMBERS


( ID NUMBER(4),
FIRST_NAME VARCHAR2(50),
LAST_NAME VARCHAR2(50),
STREET_ADDRESS VARCHAR2(50), CREATE TABLE BOOKS
CITY VARCHAR2(20), ( ID VARCHAR2(6),
STATE VARCHAR2(2), TITLE VARCHAR2(255),
ZIP VARCHAR2(10)); PUBLISHER_ID NUMBER(2),
AUTHOR_ID NUMBER(3)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 19

19
Escenario de caso: Creación de tablas
CREATE TABLE authors(
id NUMBER(3),
name VARCHAR2(60)
); Creación
correcta de
CREATE TABLE members( tablas
id NUMBER(4),
first_name VARCHAR2(50),
last_name VARCHAR2(50),
street_address VARCHAR2(50),
Creación de city VARCHAR2(20),
state VARCHAR2(2),
tablas zip VARCHAR2(10)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 20

20
Escenario de caso: Creación de tablas
CREATE TABLE publishers(
id NUMBER(2),
name VARCHAR2(100) NOT NULL
);
Creación
correcta de
CREATE TABLE books( tablas
id VARCHAR2(6),
title VARCHAR2(255)NOT NULL,
publisher_id NUMBER(2),
author_id NUMBER(3)
Creación de );
tablas

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 21

21
Inclusión de restricciones
• Las restricciones aplican reglas en el nivel de tabla
• Las restricciones garantizan la consistencia e integridad
de la base de datos
• Los siguientes tipos de restricciones son válidos:
−NOT NULL
−UNIQUE
−PRIMARY KEY
−FOREIGN KEY
−CHECK

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 22

22
Restricciones de integridad de datos

Restricciones Descripción
NOT NULL La columna no puede contener un valor nulo.
UNIQUE Los valores de una columna o una combinación de
columnas deben ser únicos para todas las filas de la tabla.
PRIMARY KEY La columna (o una combinación de columnas) debe
contener el valor AND IS NOT NULL único para todas las
filas.
FOREIGN KEY La columna (o una combinación de columnas) debe
establecer y aplicar una referencia a una columna o una
combinación de columnas de otra tabla (o de la misma).
CHECK Una condición debe ser true.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 23

23
Directrices de restricción
• Asignar un nombre a una Constraint Type
restricción (de lo contrario,
SYS_C0014370 Primary Key
el servidor de Oracle genera un
nombre con el formato SYS_Cn)
• Es fácil hacer referencia a las restricciones si se les asigna
un nombre significativo. (Por ejemplo,
employee_employee_id_pk)
• Crear una restricción en uno de los siguientes momentos:
− En el momento de la creación de la tabla
− Después de la creación de la tabla
• Definir una restricción en el nivel de columna o de tabla
• Ver una restricción en el diccionario de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 24

Por ejemplo, al crear una tabla, si especifica una columna para que sea la llave primaria sin utilizar la
palabra reservada "CONSTRAINT", Oracle genera un nombre de restricción, como se muestra a
continuación:
CREATE TABLE DEPT_SAMPLE(DEPT_ID NUMBER(2) PRIMARY KEY, DEPARTMENT_ID VARCHAR2(50));

24
Directrices de restricción
• Las restricciones de nivel de columna se incluyen al
definir la columna
• Las restricciones de nivel de tabla se definen al final de
la definición de tabla y deben hacer referencia a la
columna o las columnas a las que pertenece la
restricción
• Funcionalmente, una restricción de nivel de columna
es lo mismo que una restricción de nivel de tabla
• Las restricciones NOT NULL solo se pueden definir en
el nivel de columna
• Las restricciones que se aplican a más de una columna
se deben especificar en el nivel de tabla
DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 25

25
Definición de restricciones
• Sintaxis de CREATE TABLE con CONSTRAINTS:

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 26

En la sintaxis:
• schema es el mismo nombre que el del propietario.
• table es el nombre de la tabla.
• DEFAULT expr especifica un valor por defecto que se utiliza si se omite un valor en la sentencia INSERT.
• column es el nombre de la columna.
• datatype es el tipo de dato y la longitud de la columna.
• column_constraint es una restricción de integridad como parte de la definición de columna.
• table_constraint es una restricción de integridad como parte de la definición de tabla.

26
Definición de restricciones
• Sintaxis de restricción de nivel de columna:
column [CONSTRAINT constraint_name] constraint_type,

• Sintaxis de restricción de nivel de tabla:

column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 27

27
Ejemplos: Definición de restricciones
• Restricción de nivel de columna:

CREATE TABLE employees(
employee_id NUMBER(6)CONSTRAINT emp_emp_id_pk
PRIMARY KEY,
first_name VARCHAR2(20),
...
);

• Restricción de nivel de tabla:


CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10),
CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 28

En este ejemplo, la restricción de llave primaria utiliza el UID designado para dicha entidad y crea la llave
primaria (esta se puede crear en el nivel de columna o de tabla); en las diapositivas 33 a 34 encontrará más
información sobre las restricciones de llave primaria.

Nota: Los ejemplos de esta diapositiva y los de las siguientes solo muestran una parte del código utilizado
para crear la tabla employees y, por lo tanto, no se pueden ejecutar tal y como aparecen.

28
Restricción NOT NULL
• Garantiza que no se permiten los valores nulos
para la columna:
EMPLOYEE_ FIRST_ SALARY COMMISSION DEPARTMENT EMAIL PHONE_ HIRE_
ID NAME _PCT _ID NUMBER DATE
100 Steven 24000 - 90 SKING 515.123.4567 17-Jun-1987
101 Neena 17000 - 90 NKOCHHAR 515.123.4568 21-Sep-1989
102 Lex 17000 - 90 LDEHAAN 515.123.4569 13-Jan-1993
200 Jennifer 4400 - 10 JWHALEN 515.123.4444 17-Sep-1987
205 Shelley 12000 - 110 SHIGGINS 515.123.8080 07-Jun-1994
206 William 8300 - 110 WGIETZ 515.123.8181 07-Jun-1994
141 Trenna 3500 - 50 TRAJS 650.121.8009 17-Oct-1995
Ausencia de la restricción NOT NULL (cualquier
Restricción NOT NULL fila puede contener un valor nulo para esta
(La llave primaria aplica columna)
la restricción NOT NULL) Restricción
NOT NULL

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 29

La creación de restricciones NOT NULL aplica los atributos obligatorios en el diseño.

29
Restricción NOT NULL
• Solo se puede definir en el nivel de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE CONSTRAINT hire_date_nn
NOT NULL,
...
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 30

30
Restricción UNIQUE
• Una restricción de integridad de clave UNIQUE
requiere que todos los valores de la columna o de un
juego de columnas sean únicos
• Si la restricción UNIQUE tiene más de una columna, el
grupo de columnas se denomina clave única
compuesta
• Las restricciones UNIQUE permiten la entrada de
valores nulos
• Un valor nulo en una columna (o en todas las columnas
de una clave UNIQUE compuesta) cumple siempre una
restricción UNIQUE

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 31

Nota: Debido al mecanismo de búsqueda de restricciones UNIQUE en más de una columna, no puede
tener valores idénticos en las columnas no nulas de una restricción de clave UNIQUE compuesta
parcialmente nula.

31
Restricción UNIQUE
Restricción UNIQUE
EMPLOYEES
EMPLOYEE_ID LAST_NAME EMAIL
100 King SKING
101 Kochhar NKOCHHAR
102 De Haan LDEHAAN
200 Whalen JWHALEN
205 Higgins SHIGGINS

INSERTAR EN

208 Smith JSMITH Permitido


209 Smith JSMITH No permitido: Ya existe

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 32

32
Restricción UNIQUE
• Definida en el nivel de tabla o de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25) CONSTRAINT
emp_email_uk UNIQUE,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE, OR
...
CONSTRAINT emp_email_uk UNIQUE(email)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 33

Una clave única compuesta se define en el nivel de tabla. Por ejemplo:


ALTER TABLE DEPT_SAMPLE ADD CONSTRAINT unq_dept_det UNIQUE (DEPT_ID, DEPARTMENT_NAME) ;

Nota: El servidor de Oracle aplica la restricción UNIQUE mediante la creación implícita de un índice único
en la columna o columnas de clave única.

33
Restricción PRIMARY KEY
• Una restricción PRIMARY KEY crea una llave primaria
para la tabla
• Solo se puede crear una llave primaria para cada tabla
• La restricción PRIMARY KEY es una columna o un juego
de columnas que identifica de forma única cada fila de
una tabla
• Ninguna columna que forme parte de la llave primaria
puede contener un valor nulo
• Se debe crear una llave primaria compuesta en el nivel
de la tabla

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 34

Por ejemplo:
create table dept(
dept_id number(8),
dept_name varchar2(30),
loc_id number(4),
constraint pk_dept primary key(dept_id,loc_id));

Nota: Puesto que la unicidad forma parte de la definición de restricción de llave primaria, el servidor de
Oracle aplica la unicidad mediante la creación implícita de un índice único en la columna o columnas de
llave primaria.

34
Restricción PRIMARY KEY
DEPARTMENTS PRIMARY KEY

DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

10 Administration 200 1700


20 Marketing 201 1800
50 Shipping 124 1500
60 IT 103 1400
… No permitido
(valor nulo) INSERTAR EN
NULL Public Accounting 124 2500

50 Finance 124 1500


No permitido (50 ya existe)
Nota: Consulte en la diapositiva 27 ejemplos de codificación de restricción de llave primaria.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 35

35
Restricción FOREIGN KEY
• La restricción FOREIGN KEY (o integridad referencial)
designa una columna o una combinación de columnas
como clave foránea
• Establece una relación con una llave primaria en la
misma tabla o en una diferente
• A continuación, se muestran las directrices para las
restricciones de clave foránea:
−El valor de clave foránea debe coincidir con un valor existente
de la tabla principal o ser un valor NULL
−Las claves foráneas se basan en los valores de datos y son
punteros puramente lógicos, en lugar de físicos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 36

36
Restricción FOREIGN KEY
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

10 Administration 200 1700


20 Marketing 201 1800
50 Shipping 124 1500
… …
FOREIGN KEY
SALARY
EMPLOYEE_ID DEPARTMENT_ID
100 24000 90
101 17000 90
102 17000 90

200 Ford 9 No permitido
INSERTAR EN (9 no existe)
200 Ford 60 Permitido
DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 37

37
Restricción FOREIGN KEY
• Definida en el nivel de tabla:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE,
...
department_id NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 38

Las claves foráneas compuestas se deben crear mediante la definición de nivel de tabla.
En la diapositiva, el ejemplo define una restricción FOREIGN KEY en la columna DEPARTMENT_ID de la
tabla EMPLOYEES, mediante la sintaxis de nivel de tabla. El nombre de la restricción es EMP_DEPT_FK.
La clave foránea se puede definir también en el nivel de columna, siempre que la restricción esté basada
en una sola columna. La sintaxis difiere en que las palabras clave FOREIGN KEY no aparecen. Por
ejemplo:
CREATE TABLE employees
(...
department_id NUMBER(4) CONSTRAINT emp_deptid_fk
REFERENCES departments(department_id),
...
)

38
Restricción FOREIGN KEY
• Definida en el nivel de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE,
...
department_id NUMBER(4) CONSTRAINT emp_dept_fk
REFERENCES departments(department_id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 39

Se debe crear una clave foránea compuesta en el nivel de la tabla, por ejemplo:
CREATE TABLE supplier
( sup_id numeric(15) not null,
sup_name varchar2(45) not null,
contact_name varchar2(45),
CONSTRAINT sup_pk PRIMARY KEY (sup_id, sup_name)
);

39
Restricción FOREIGN KEY: Palabras clave
• FOREIGN KEY: Define la columna en la tabla secundaria
en el nivel de restricción de tabla
• REFERENCES: Identifica la tabla y la columna en la tabla
principal
• ON DELETE CASCADE: Suprime las filas dependientes
de la tabla secundaria cuando se suprime una fila de la
tabla principal
• ON DELETE SET NULL: Convierte los valores de clave
foránea dependiente en nulos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 40

Sin las opciones ON DELETE CASCADE u ON DELETE SET NULL, la fila de la tabla principal no se puede
suprimir si se hace referencia a ella en la tabla secundaria. Y estas palabras clave no se pueden utilizar en la
sintaxis en el nivel de columna.

40
Restricción CHECK
• Define una condición que debe cumplir cada fila
• No puede hacer referencia a columnas de otras tablas

CREATE TABLE employees(


...
salary NUMBER(8,2) CONSTRAINT emp_salary_min
CHECK (salary > 0),
...
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 41

Para cumplir la restricción, en cada fila de la tabla se debe definir la condición como TRUE o desconocida
(debido a un valor nulo).
Una sola columna puede tener varias restricciones CHECK que hagan referencia a la columna en su
definición. No hay ningún límite en cuanto al número de restricciones CHECK que puede definir en una
columna.
Las restricciones CHECK se pueden definir en el nivel de tabla o de columna.

41
CREATE TABLE: Ejemplo de Restricción CHECK

CREATE TABLE employees(


employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE,
...
CONSTRAINT hire_date_min CHECK
(hire_date > '01-JAN-2018’)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 42

42
Escenario de caso: Creación de tablas

¿Cómo agregar
restricciones a las
tablas de la base de
datos de biblioteca
simplificada?

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 43

43
Escenario de caso: Adición de restricciones
CREATE TABLE authors(
id NUMBER(3),
name VARCHAR2(60),
CONSTRAINT atr_id_pk PRIMARY KEY (ID)
);

CREATE TABLE members(


id NUMBER(4),
first_name VARCHAR2(50),
last_name VARCHAR2(50),
street_address VARCHAR2(50),
city VARCHAR2(20),
state VARCHAR2(2),
zip VARACHAR2(10),
CONSTRAINT mbr_id_pk PRIMARY KEY (ID)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 44

44
Escenario de caso: Adición de restricciones
CREATE TABLE publishers(
id NUMBER(2),
name VARCHAR2(100) NOT NULL,
CONSTRAINT plr_id_pk PRIMARY KEY (ID)
) ;

CREATE TABLE books(


id VARCHAR2(6),
title VARCHAR2(255)NOT NULL,
publisher_id NUMBER(2),
author_id NUMBER(3),
CONSTRAINT bok_id_pk PRIMARY KEY (ID),
CONSTRAINT bok_atr_fk FOREIGN KEY (author_id)
REFERENCES authors(id),
CONSTRAINT bok_plr_fk FOREIGN KEY (publisher_id)
REFERENCES publishers(id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 45

45
Escenario de caso: Adición de restricciones
CREATE TABLE book_transactions(
id VARCHAR2(6),
tran_date DATE DEFAULT SYSDATE NOT NULL,
type VARCHAR2(10) ,
book_id VARCHAR2(6) ,
member_id NUMBER(4),
CONSTRAINT btn_id_pk PRIMARY KEY (ID),
CONSTRAINT bok_btn_fk FOREIGN KEY (book_id)
REFERENCES books(id),
CONSTRAINT bok_mbr_fk FOREIGN KEY (member_id)
REFERENCES members(id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 46

46
Lenguaje de definición de datos
• La creación de tablas forma parte del lenguaje de
definición de datos de SQL
• Entre otras sentencias DDL se incluyen:
−ALTER: Para modificar la estructura de un objeto
−DROP: Para eliminar un objeto de la base de datos
−RENAME: Para cambiar el nombre de un objeto de base
de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 47

47
Sentencia ALTER TABLE
• Utilice la sentencia ALTER TABLE para cambiar
la estructura de tabla:
−Agregar una columna
−Modificar una definición de columna existente
−Definir un valor por defecto para la nueva columna
−Borrar una columna
−Cambiar el nombre de una columna
−Cambiar una tabla al estado de solo lectura

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 48

Después de crear una tabla, puede que necesite cambiar la estructura de la tabla por cualquiera de las
siguientes razones:
• Ha omitido una columna.
• Debe cambiar la definición de columna o su nombre.
• Debe eliminar columnas.
• Desea definir la tabla en modo de solo lectura.

48
Sentencia ALTER TABLE
• Utilizar la sentencia ALTER TABLE para agregar,
modificar y borrar columnas:
ALTER TABLE table
ADD (column data type [DEFAULT expr]
[, column data type]...);

ALTER TABLE table


MODIFY (column data type [DEFAULT expr]
[, column data type]...);

ALTER TABLE table


DROP (column [, column] …);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 49

En la sintaxis:
• table es el nombre de la tabla.
• ADD|MODIFY|DROP es el tipo de modificación.
• column es el nombre de la columna.
• data type es el tipo de dato y la longitud de la columna.
• DEFAULT expr especifica el valor por defecto de una columna.

49
Adición de columnas
• Puede utilizar la cláusula ADD para agregar columnas:
ALTER TABLE employees
ADD termination_date DATE;

• La nueva columna se convierte en la última:


EMPLOYEE_ID LAST_NAME HIRE_DATE TERMINATION_DATE

100 King 17-Jun-1987 -


101 Kochhar 21-Sep-1989 -
102 De Haan 13-Jan-1993 -
200 Whalen 17-Sep-1987 -

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 50

Nota: Si una tabla ya contiene filas cuando se agrega una columna, la nueva columna será inicialmente nula
o utilizará el valor por defecto para todas las filas. Solo puede agregar una columna NOT NULL obligatoria
a una tabla que contenga datos en las demás columnas si especifica un valor por defecto. Puede agregar
una columna NOT NULL a una tabla vacía sin el valor por defecto.

Consulte la diapositiva 9 para consultar el código para crear esta tabla.

50
Modificación de columnas
• Puede cambiar el tipo de dato, tamaño y valor por
defecto de una columna:
ALTER TABLE employees
MODIFY first_name VARCHAR2(30);

• El cambio de un valor por defecto solo afecta a las


inserciones posteriores en la tabla
• Las modificaciones están sujetas a determinadas
condiciones

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 51

A continuación, se muestran las directrices para modificar una columna:


• Puede aumentar el ancho o la precisión de una columna numérica.
• Puede aumentar el ancho de las columnas de caracteres.
• Puede reducir el ancho de una columna si:
– La columna solo contiene valores nulos.
– La tabla no tiene filas.
– La disminución del ancho de columna no es inferior a los valores existentes en dicha columna.
• Puede cambiar el tipo de dato si la columna solo contiene valores nulos. La única excepción son las
conversiones de CHAR a VARCHAR2, que se pueden realizar con los datos de las columnas.
• Solo puede convertir una columna CHAR al tipo de dato VARCHAR2 o una columna VARCHAR2 al tipo
de dato CHAR si la columna contiene valores nulos o si no cambia el tamaño.
• El cambio a un valor por defecto de una columna solo afecta a las inserciones posteriores en la tabla.
• Puede agregar una restricción NOT NULL mediante las cláusulas MODIFY.

51
Borrado de columnas
• Usar la cláusula DROP COLUMN para borrar columnas
que ya no son necesarias:
ALTER TABLE employees
DROP (termination_date);

EMPLOYEE_ID LAST_NAME HIRE_DATE

100 King 17-Jun-1987


101 Kochhar 21-Sep-1989
102 De Haan 13-Jan-1993
200 Whalen 17-Sep-1987

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 52

A continuación, se muestran las directrices para borrar una columna:


• La columna puede o no contener datos.
• Con la sentencia ALTER TABLE DROP COLUMN, solo se puede borrar una columna en cada ocasión.
• La tabla debe tener al menos una columna después de modificarla.
• Después de borrar una columna, no se puede recuperar.
• Una llave primaria a la que hace referencia otra columna no se puede borrar, a menos que se agregue
la opción de cascada.
• El borrado de una columna puede tardar un rato si tiene muchos valores. En este caso, puede ser mejor
definirla para que no se utilice y borrarla cuando haya menos usuarios en el sistema. De esta forma, se
evitan los bloqueos ampliados.

52
Opción SET UNUSED
• La opción SET UNUSED marca una o más columnas
como no utilizadas para que se puedan borrar
simultáneamente cuando la demanda de recursos del
sistema sea menor
• Puede utilizar la opción SET UNUSED para marcar una
o más columnas como no utilizadas
• Puede utilizar la opción DROP UNUSED COLUMNS para
eliminar las columnas marcadas como no utilizadas

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 53

Las columnas no utilizadas se tratan como si se hubieran borrado, aunque sus datos de columna
permanezcan en las filas de la tabla.
Después de que una columna se marque como no utilizada, no tendrá acceso a dicha columna. Las
consultas SELECT * no recuperan datos de las columnas marcadas como no utilizadas. Además, los
nombres y tipos de columnas marcados como no utilizados no se muestran durante la sentencia
DESCRIBE, y puede agregar a la tabla una nueva columna con el mismo nombre que la columna no
utilizada.
Puede especificar la palabra clave ONLINE para indicar que se permiten las operaciones de lenguaje de
manipulación de datos (DML) en la tabla al marcar la columna o columnas como UNUSED. El siguiente
ejemplo de código muestra el uso de SET UNUSED COLUMN, que define una columna como no utilizada
para siempre mediante la adición de la palabra clave ONLINE:
ALTER TABLE dept80 SET UNUSED(hire_date)ONLINE;

La información de SET UNUSED se almacena en la vista de diccionario USER_UNUSED_COL_TABS.


Nota: Las instrucciones para definir una columna como UNUSED son similares a las instrucciones para
borrar una columna.

53
Opción SET UNUSED
ALTER TABLE <table_name>
SET UNUSED(<column_name> [ , <column_name>]);
OR
ALTER TABLE <table_name>
SET UNUSED COLUMN <column_name> [ , <column_name>];

ALTER TABLE dept


SET UNUSED (dname);

ALTER TABLE <table_name>


DROP UNUSED COLUMNS;

ALTER TABLE dept


DROP UNUSED COLUMNS;

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 54

Al definir una columna como UNUSED, tiene la opción de borrar esa columna.
Puede utilizar DROP UNUSED COLUMNS para eliminar de la tabla todas las columnas que estén
marcadas actualmente como no utilizadas. Puede utilizar esta sentencia cuando desee reclamar el
espacio en disco adicional de las columnas no utilizadas en la tabla. Si la tabla no contiene columnas no
utilizadas, la sentencia no devuelve ningún error.
Nota: Una opción DROP UNUSED COLUMNS posterior elimina físicamente todas las columnas no
utilizadas de una tabla, de forma similar a DROP COLUMN.

54
Escenario de caso: Modificación de tablas
Sean, estaba examinando la tabla AUTHORS y
me he dado cuenta de que:
Falta el campo de dirección de correo
electrónico del autor.
Hay que aumentar longitud de la columna de
Profesor
nombre del autor.
¿Puede realizar estos cambios?

Claro, puedo hacerlo. La modificación


consiste en agregar una nueva columna y
aumentar la longitud de columna, así que no
debe haber ningún problema
Alumno

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 55

55
Escenario de caso: Modificación de tablas

Parece que la
tabla se ha
modificado:

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 56

56
Tablas de solo lectura
• Puede utilizar la sintaxis de ALTER TABLE para:
−Definir una tabla en modo de solo lectura para evitar cambios
de DDL o DML durante el mantenimiento
de la tabla
−Volver a definir la tabla en modo de lectura/escritura
ALTER TABLE dept READ ONLY;

-- perform table maintenance and then


-- return table back to read/write mode

ALTER TABLE dept READ WRITE;

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 57

A continuación, se muestran las directrices para definir una tabla en modo de solo lectura:
• Puede especificar READ ONLY para definir una tabla en modo de solo lectura.
• Cuando una tabla está en modo de solo lectura, no se pueden emitir sentencias DML que afecten a la
tabla o cualquier sentencia SELECT... FOR UPDATE.
• Puede emitir sentencias DDL siempre y cuando no modifique los datos de la tabla.
• Se permiten operaciones sobre los índices asociados a la tabla cuando la tabla está en modo de solo
lectura.
• Especifique READ/WRITE para volver a definir una tabla de solo lectura en modo de lectura/escritura.
Nota: Si es necesario, puede borrar una tabla en modo READ ONLY. El comando DROP se ejecuta solo en
el diccionario de datos, por lo que no es necesario el acceso al contenido de la tabla. El espacio utilizado
por la tabla no se reclamará hasta que el tablespace se vuelva a definir en modo de lectura/escritura y, a
continuación, se podrán realizar los cambios necesarios en las cabeceras de segmentos de bloque, etc.

57
Borrado de una tabla
• Mueve una tabla a la papelera de reciclaje
• Elimina la tabla y sus datos si se especifica la cláusula
PURGE
• Invalida los objetos dependientes y elimina privilegios
de objeto en la tabla

DROP TABLE dept;

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 58

A menos que especifique la cláusula PURGE, la sentencia DROP TABLE no vuelve a liberar espacio en los
tablespaces para que lo utilicen otros objetos, y el espacio sigue contando en la cuota de espacio del
usuario. El borrado de una tabla invalida objetos dependientes y elimina privilegios de objeto en la tabla.
Al borrar una tabla, la base de datos pierde todos los datos de la tabla y todos los índices asociados a esta.
Sintaxis
DROP TABLE table [PURGE]

En la sintaxis, table es el nombre de la tabla.


A continuación, se muestran las directrices para borrar una tabla:
• Se suprimen todos los datos de la tabla.
• Se mantienen las vistas y los sinónimos, pero no son válidos.
• Se confirman las transacciones pendientes.
• Solo el creador de la tabla o un usuario con el privilegio DROP ANY TABLE puede eliminar una tabla.

58
Ejercicio del proyecto

• DFo_6_3_Project
−Base de datos de la tienda Oracle Baseball League:
Uso de DDL para crear y mantener tablas de base de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 59

59
Resumen
• En esta lección, debe haber aprendido a hacer lo
siguiente:
−Identificar los pasos necesarios para crear tablas de base de
datos
−Describir el objetivo del DDL
−Mostrar las operaciones DDL necesarias para
crear y mantener las tablas de una base de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 60

60
Database Foundations
6-3
Lenguaje de definición de datos (DDL)

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados.

2
Objetivos
• En esta lección se abordan los siguientes objetivos:
−Identificar los pasos necesarios para crear tablas de base de
datos
−Describir la finalidad del lenguaje de definición de datos
(DDL)
−Mostrar las operaciones DDL necesarias para crear y
mantener las tablas de una base de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 3

3
Objetos de base de datos

Objeto Descripción
Tabla Es la unidad básica de almacenamiento; consta
de filas.
Vista Representa de forma lógica subjuegos de datos
de una o más tablas.
Secuencia Genera valores numéricos.
Índice Mejora el rendimiento de algunas consultas.
Sinónimo Ofrece un nombre alternativo para un objeto.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 4

Nota: En este curso, vamos a crear y recuperar información de la unidad básica de almacenamiento, las
tablas. Hay más objetos de base de datos disponibles que los enumerados, pero no se tratan en este curso.

4
Reglas de nomenclatura para tablas y columnas
• Los nombres de tabla y de columna deben:
−Empezar por una letra
−Tener entre 1 y 30 caracteres
−Contener solo A–Z, a–z, 0–9, _, $ y #
−No ser un duplicado de otro nombre de objeto propiedad del
mismo usuario
−No ser una palabra reservada del servidor de Oracle

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 5

Nota: Los nombres no son sensibles a mayúsculas/minúsculas. Por ejemplo, EMPLOYEES se considera lo
mismo que eMPloyees o eMpLOYEES. Sin embargo, los identificadores entre comillas son sensibles a
mayúsculas/minúsculas.

Para obtener una lista completa de las palabras reservadas, consulte:


https://docs.oracle.com/cd/B28359_01/appdev.111/b31231/appb.htm#CJHIIICD

5
Sentencia CREATE TABLE
• Para emitir una sentencia CREATE TABLE, se debe
disponer de lo siguiente:
−El privilegio CREATE TABLE
−Un área de almacenamiento

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr][, ...]);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 6

Para crear una tabla, un usuario debe tener el privilegio CREATE TABLE y un área de almacenamiento en
la que crear los objetos. El administrador de la base de datos (DBA) utiliza sentencias de lenguaje de control
de datos (DCL) para otorgar privilegios a los usuarios.
En la sintaxis:
• schema es el mismo nombre que el del propietario.
• table es el nombre de la tabla.
• DEFAULT expr especifica un valor por defecto si se omite un valor en la sentencia INSERT.
• column es el nombre de la columna.
• datatype es el tipo de dato y la longitud de la columna.

Nota: Se necesita el privilegio CREATE ANY TABLE para crear una tabla en cualquier esquema distinto
del esquema del usuario.

6
Sentencia CREATE TABLE
• Especifique en la sentencia:
−Nombre de la tabla
−Nombre de columna, tipo de dato de columna, tamaño de
columna
−Restricciones de integridad (opcional)
−Valores por defecto (opcional)
CREATE TABLE [schema.]table
(column datatype [DEFAULT expr][, ...]);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 7

7
Creación de tablas
• Crear una tabla:
CREATE TABLE dept(
deptno NUMBER(2),
dname VARCHAR2(14),
loc VARCHAR2(13),
create_date DATE DEFAULT SYSDATE
);

• Para confirmar que se ha creado la tabla, ejecute el


comando DESCRIBE

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 8

Nota: Puede ver la lista de las tablas que posee realizando consultas en el diccionario de datos. Por
ejemplo, select table_name from user_tables;

Para obtener más información sobre las tablas del diccionario de datos, consulte:
https://docs.oracle.com/database/121/GMSWN/apc.htm#GMSWN600

8
Creación de tablas
• Confirmar la creación de la tabla:

DESCRIBE dept;

Table Column Data Type Length Precision Scale Primary Key Nullable Default Comment

DEPT DEPTNO NUMBER - 2 0 - - -

DNAME VARCHAR2 14 - - - - -

LOC VARCHAR2 13 - - - - -

CREATE_DATE DATE 7 - - - SYSDATE -

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 9

9
Tipos de dato
Tipo de dato Descripción
VARCHAR2(size) Datos de caracteres de longitud variable
(Se debe especificar un tamaño máximo; el tamaño mínimo es 1).
Tamaño máximo: 32767 bytes
CHAR(size) Datos de tipo carácter de longitud fija de longitud (size) en bytes.
(El tamaño por defecto y mínimo es 1; el tamaño máximo es 2000)
NUMBER(p, s) Datos numéricos de longitud variable. La precisión es p, y la escala,
s. (La precisión es el número total de dígitos decimales,
y la escala el número de dígitos a la derecha del punto decimal;
la precisión puede ir de 1 a 38, y la escala de –84 a 127).
DATE Valores de fecha y hora hasta el segundo más próximo entre el
1 de enero del 4712 a.C. y el 31 de diciembre del 9999 d.C.
LONG Datos de caracteres de longitud variable (hasta 2 GB).

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 10

10
Tipos de dato
Tipo de dato Descripción
CLOB Objeto grande de caracteres (CLOB) que contiene caracteres de un solo byte o multibyte. El
tamaño máximo es (4 GB - 1) * (DB_BLOCK_SIZE); almacena datos del juego de caracteres
nacional.
NCLOB CLOB que contiene caracteres Unicode. Se soportan los juegos de caracteres de ancho fijo y
variable y ambos utilizan el juego de caracteres nacional de la base de datos. El tamaño
máximo es
(4 GB - 1) * (tamaño de bloque de base de datos); almacena datos del juego de caracteres
nacional.
RAW (Size) Datos binarios raw con una longitud en bytes especificada por size.
Debe especificar size para un valor RAW. El tamaño ( size) máximo es:
32767 bytes si MAX_SQL_STRING_SIZE = EXTENDED
4000 bytes si MAX_SQL_STRING_SIZE = LEGACY
LONG RAW Datos binarios raw de longitud variable hasta 2 GB.
BLOB Objeto grande binario. El tamaño máximo es (4 GB - 1) * (parámetro de inicialización
DB_BLOCK_SIZE (de 8 TB a 128 TB)).
BFILE Datos binarios almacenados en un archivo externo (hasta 4 GB).
ROWID Cadena de base 64 que representa la dirección única de una fila en su tabla
correspondiente. Este tipo de dato es principalmente para valores devueltos por la
pseudocolumna ROWID

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 11

11
Ejemplo: Creación de una tabla con diferentes tipos
de datos

CREATE TABLE print_media(


product_id NUMBER(6),
id NUMBER(6),
desc VARCHAR2(100),
composite BLOB,
msourcetext CLOB,
finaltext CLOB,
photo BLOB,
graphic BFILE
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 12

12
Tipos de dato de fecha

Tipo de dato Descripción


TIMESTAMP Permite almacenar los datos de tiempo como fecha con segundos
fraccionarios. Almacena el valor de año, mes, día, hora, minuto y segundo
del tipo de dato DATE, así como el valor para segundos fraccionarios.
Existen diversas variaciones de este tipo de dato, como, por ejemplo,
WITH TIMEZONE y WITH LOCALTIMEZONE.
INTERVAL YEAR TO Permite almacenar el tiempo como un intervalo de años y meses.
MONTH Se utiliza para representar la diferencia entre dos valores de fecha y hora
en los que las únicas partes significativas son el año y el mes.
INTERVAL DAY TO Permite almacenar el tiempo como un intervalo de días, horas, minutos y
SECOND segundos; se utiliza para representar la diferencia exacta entre dos valores
de fecha y hora.
TIMESTAMP WITH Variante de TIMESTAMP que incluye el nombre de la región de zona
TIME ZONE horaria o el desplazamiento de zona horaria en su valor.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 13

Puede utilizar varios tipos de dato de fecha.


Ejemplo de TIMESTAMP WITH TIMEZONE:
CREATE TABLE table_tstz (c_id NUMBER, c_tstz TIMESTAMP WITH
TIME ZONE);
INSERT INTO table_tstz VALUES(1, '01-JAN-2003 2:00:00 AM –
07:00');

13
Ejemplos: Tipos de dato de fecha
• Ejemplo de tipo de dato TIMESTAMP:
CREATE TABLE table_ts(
c_id NUMBER(6),
c_ts TIMESTAMP
);

INSERT INTO table_ts


VALUES(1, '01-JAN-2003 2:00:00');

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 14

14
Ejemplos: Tipos de dato de fecha
• Ejemplo de una tabla con las columnas TIMESTAMP,
INTERVAL YEAR TO MONTH e INTERVAL DAY TO
SECOND:
CREATE TABLE time_table(
start_time TIMESTAMP,
duration_1 INTERVAL DAY (6) TO SECOND (5),
duration_2 INTERVAL YEAR TO MONTH
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 15

15
Opción DEFAULT
• Especifica un valor por defecto para una columna
durante la operación CREATE TABLE
• Esta opción evita que se introduzcan valores nulos en
las columnas si se inserta una fila sin un valor para la
columna
... hire_date DATE DEFAULT SYSDATE, ...

• Los valores literales, expresiones o funciones SQL son


valores válidos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 16

Observe el siguiente ejemplo, donde la sentencia inserta el valor NULL en lugar del valor por defecto:
INSERT INTO hire_dates values(45, NULL);

En el siguiente ejemplo, la sentencia inserta SYSDATE para la columna HIRE_DATE, ya que es el valor
DEFAULT:
INSERT INTO hire_dates(id) values(35);

16
Opción DEFAULT
• El nombre de otra columna o una pseudocolumna son
valores no válidos
• El tipo de dato por defecto debe coincidir con el tipo
de dato de la columna
CREATE TABLE hire_dates(
id NUMBER(8),
hire_date DATE DEFAULT SYSDATE
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 17

17
Escenario de caso: Creación de tablas

¿Cómo crear las


tablas para la
base de datos de
biblioteca
simplificada?

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 18

18
Escenario de caso: Creación de tablas
CREATE TABLE AUTHORS
CREATE TABLE BOOK_TRANSACTIONS ( ID NUMBER(3),
( ID VARCHAR2(6), NAME VARCHAR2(60)
TRAN_DATE DATE DEFAULT SYSDATE, );
TYPE VARCHAR2(10),
BOOK_ID VARCHAR2(6),
MEMBER_ID NUMBER(4)
);

CREATE TABLE PUBLISHERS


( ID NUMBER(2),
NAME VARCHAR2(100)
);

CREATE TABLE MEMBERS


( ID NUMBER(4),
FIRST_NAME VARCHAR2(50),
LAST_NAME VARCHAR2(50),
STREET_ADDRESS VARCHAR2(50), CREATE TABLE BOOKS
CITY VARCHAR2(20), ( ID VARCHAR2(6),
STATE VARCHAR2(2), TITLE VARCHAR2(255),
ZIP VARCHAR2(10)); PUBLISHER_ID NUMBER(2),
AUTHOR_ID NUMBER(3)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 19

19
Escenario de caso: Creación de tablas
CREATE TABLE authors(
id NUMBER(3),
name VARCHAR2(60)
); Creación
correcta de
CREATE TABLE members( tablas
id NUMBER(4),
first_name VARCHAR2(50),
last_name VARCHAR2(50),
street_address VARCHAR2(50),
Creación de city VARCHAR2(20),
state VARCHAR2(2),
tablas zip VARCHAR2(10)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 20

20
Escenario de caso: Creación de tablas
CREATE TABLE publishers(
id NUMBER(2),
name VARCHAR2(100) NOT NULL
);
Creación
correcta de
CREATE TABLE books( tablas
id VARCHAR2(6),
title VARCHAR2(255)NOT NULL,
publisher_id NUMBER(2),
author_id NUMBER(3)
Creación de );
tablas

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 21

21
Inclusión de restricciones
• Las restricciones aplican reglas en el nivel de tabla
• Las restricciones garantizan la consistencia e integridad
de la base de datos
• Los siguientes tipos de restricciones son válidos:
−NOT NULL
−UNIQUE
−PRIMARY KEY
−FOREIGN KEY
−CHECK

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 22

22
Restricciones de integridad de datos

Restricciones Descripción
NOT NULL La columna no puede contener un valor nulo.
UNIQUE Los valores de una columna o una combinación de
columnas deben ser únicos para todas las filas de la tabla.
PRIMARY KEY La columna (o una combinación de columnas) debe
contener el valor AND IS NOT NULL único para todas las
filas.
FOREIGN KEY La columna (o una combinación de columnas) debe
establecer y aplicar una referencia a una columna o una
combinación de columnas de otra tabla (o de la misma).
CHECK Una condición debe ser true.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 23

23
Directrices de restricción
• Asignar un nombre a una Constraint Type
restricción (de lo contrario,
SYS_C0014370 Primary Key
el servidor de Oracle genera un
nombre con el formato SYS_Cn)
• Es fácil hacer referencia a las restricciones si se les asigna
un nombre significativo. (Por ejemplo,
employee_employee_id_pk)
• Crear una restricción en uno de los siguientes momentos:
− En el momento de la creación de la tabla
− Después de la creación de la tabla
• Definir una restricción en el nivel de columna o de tabla
• Ver una restricción en el diccionario de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 24

Por ejemplo, al crear una tabla, si especifica una columna para que sea la llave primaria sin utilizar la
palabra reservada "CONSTRAINT", Oracle genera un nombre de restricción, como se muestra a
continuación:
CREATE TABLE DEPT_SAMPLE(DEPT_ID NUMBER(2) PRIMARY KEY, DEPARTMENT_ID VARCHAR2(50));

24
Directrices de restricción
• Las restricciones de nivel de columna se incluyen al
definir la columna
• Las restricciones de nivel de tabla se definen al final de
la definición de tabla y deben hacer referencia a la
columna o las columnas a las que pertenece la
restricción
• Funcionalmente, una restricción de nivel de columna
es lo mismo que una restricción de nivel de tabla
• Las restricciones NOT NULL solo se pueden definir en
el nivel de columna
• Las restricciones que se aplican a más de una columna
se deben especificar en el nivel de tabla
DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 25

25
Definición de restricciones
• Sintaxis de CREATE TABLE con CONSTRAINTS:

CREATE TABLE [schema.]table


(column datatype [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 26

En la sintaxis:
• schema es el mismo nombre que el del propietario.
• table es el nombre de la tabla.
• DEFAULT expr especifica un valor por defecto que se utiliza si se omite un valor en la sentencia INSERT.
• column es el nombre de la columna.
• datatype es el tipo de dato y la longitud de la columna.
• column_constraint es una restricción de integridad como parte de la definición de columna.
• table_constraint es una restricción de integridad como parte de la definición de tabla.

26
Definición de restricciones
• Sintaxis de restricción de nivel de columna:
column [CONSTRAINT constraint_name] constraint_type,

• Sintaxis de restricción de nivel de tabla:

column,...
[CONSTRAINT constraint_name] constraint_type
(column, ...),

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 27

27
Ejemplos: Definición de restricciones
• Restricción de nivel de columna:

CREATE TABLE employees(
employee_id NUMBER(6)CONSTRAINT emp_emp_id_pk
PRIMARY KEY,
first_name VARCHAR2(20),
...
);

• Restricción de nivel de tabla:


CREATE TABLE employees(
employee_id NUMBER(6),
first_name VARCHAR2(20),
...
job_id VARCHAR2(10),
CONSTRAINT emp_emp_id_pk PRIMARY KEY (employee_id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 28

En este ejemplo, la restricción de llave primaria utiliza el UID designado para dicha entidad y crea la llave
primaria (esta se puede crear en el nivel de columna o de tabla); en las diapositivas 33 a 34 encontrará más
información sobre las restricciones de llave primaria.

Nota: Los ejemplos de esta diapositiva y los de las siguientes solo muestran una parte del código utilizado
para crear la tabla employees y, por lo tanto, no se pueden ejecutar tal y como aparecen.

28
Restricción NOT NULL
• Garantiza que no se permiten los valores nulos
para la columna:
EMPLOYEE_ FIRST_ SALARY COMMISSION DEPARTMENT EMAIL PHONE_ HIRE_
ID NAME _PCT _ID NUMBER DATE
100 Steven 24000 - 90 SKING 515.123.4567 17-Jun-1987
101 Neena 17000 - 90 NKOCHHAR 515.123.4568 21-Sep-1989
102 Lex 17000 - 90 LDEHAAN 515.123.4569 13-Jan-1993
200 Jennifer 4400 - 10 JWHALEN 515.123.4444 17-Sep-1987
205 Shelley 12000 - 110 SHIGGINS 515.123.8080 07-Jun-1994
206 William 8300 - 110 WGIETZ 515.123.8181 07-Jun-1994
141 Trenna 3500 - 50 TRAJS 650.121.8009 17-Oct-1995
Ausencia de la restricción NOT NULL (cualquier
Restricción NOT NULL fila puede contener un valor nulo para esta
(La llave primaria aplica columna)
la restricción NOT NULL) Restricción
NOT NULL

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 29

La creación de restricciones NOT NULL aplica los atributos obligatorios en el diseño.

29
Restricción NOT NULL
• Solo se puede definir en el nivel de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE CONSTRAINT hire_date_nn
NOT NULL,
...
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 30

30
Restricción UNIQUE
• Una restricción de integridad de clave UNIQUE
requiere que todos los valores de la columna o de un
juego de columnas sean únicos
• Si la restricción UNIQUE tiene más de una columna, el
grupo de columnas se denomina clave única
compuesta
• Las restricciones UNIQUE permiten la entrada de
valores nulos
• Un valor nulo en una columna (o en todas las columnas
de una clave UNIQUE compuesta) cumple siempre una
restricción UNIQUE

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 31

Nota: Debido al mecanismo de búsqueda de restricciones UNIQUE en más de una columna, no puede
tener valores idénticos en las columnas no nulas de una restricción de clave UNIQUE compuesta
parcialmente nula.

31
Restricción UNIQUE
Restricción UNIQUE
EMPLOYEES
EMPLOYEE_ID LAST_NAME EMAIL
100 King SKING
101 Kochhar NKOCHHAR
102 De Haan LDEHAAN
200 Whalen JWHALEN
205 Higgins SHIGGINS

INSERTAR EN

208 Smith JSMITH Permitido


209 Smith JSMITH No permitido: Ya existe

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 32

32
Restricción UNIQUE
• Definida en el nivel de tabla o de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25) CONSTRAINT
emp_email_uk UNIQUE,
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE, OR
...
CONSTRAINT emp_email_uk UNIQUE(email)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 33

Una clave única compuesta se define en el nivel de tabla. Por ejemplo:


ALTER TABLE DEPT_SAMPLE ADD CONSTRAINT unq_dept_det UNIQUE (DEPT_ID, DEPARTMENT_NAME) ;

Nota: El servidor de Oracle aplica la restricción UNIQUE mediante la creación implícita de un índice único
en la columna o columnas de clave única.

33
Restricción PRIMARY KEY
• Una restricción PRIMARY KEY crea una llave primaria
para la tabla
• Solo se puede crear una llave primaria para cada tabla
• La restricción PRIMARY KEY es una columna o un juego
de columnas que identifica de forma única cada fila de
una tabla
• Ninguna columna que forme parte de la llave primaria
puede contener un valor nulo
• Se debe crear una llave primaria compuesta en el nivel
de la tabla

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 34

Por ejemplo:
create table dept(
dept_id number(8),
dept_name varchar2(30),
loc_id number(4),
constraint pk_dept primary key(dept_id,loc_id));

Nota: Puesto que la unicidad forma parte de la definición de restricción de llave primaria, el servidor de
Oracle aplica la unicidad mediante la creación implícita de un índice único en la columna o columnas de
llave primaria.

34
Restricción PRIMARY KEY
DEPARTMENTS PRIMARY KEY

DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

10 Administration 200 1700


20 Marketing 201 1800
50 Shipping 124 1500
60 IT 103 1400
… No permitido
(valor nulo) INSERTAR EN
NULL Public Accounting 124 2500

50 Finance 124 1500


No permitido (50 ya existe)
Nota: Consulte en la diapositiva 27 ejemplos de codificación de restricción de llave primaria.

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 35

35
Restricción FOREIGN KEY
• La restricción FOREIGN KEY (o integridad referencial)
designa una columna o una combinación de columnas
como clave foránea
• Establece una relación con una llave primaria en la
misma tabla o en una diferente
• A continuación, se muestran las directrices para las
restricciones de clave foránea:
−El valor de clave foránea debe coincidir con un valor existente
de la tabla principal o ser un valor NULL
−Las claves foráneas se basan en los valores de datos y son
punteros puramente lógicos, en lugar de físicos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 36

36
Restricción FOREIGN KEY
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID

10 Administration 200 1700


20 Marketing 201 1800
50 Shipping 124 1500
… …
FOREIGN KEY
SALARY
EMPLOYEE_ID DEPARTMENT_ID
100 24000 90
101 17000 90
102 17000 90

200 Ford 9 No permitido
INSERTAR EN (9 no existe)
200 Ford 60 Permitido
DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 37

37
Restricción FOREIGN KEY
• Definida en el nivel de tabla:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE,
...
department_id NUMBER(4),
CONSTRAINT emp_dept_fk FOREIGN KEY (department_id)
REFERENCES departments(department_id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 38

Las claves foráneas compuestas se deben crear mediante la definición de nivel de tabla.
En la diapositiva, el ejemplo define una restricción FOREIGN KEY en la columna DEPARTMENT_ID de la
tabla EMPLOYEES, mediante la sintaxis de nivel de tabla. El nombre de la restricción es EMP_DEPT_FK.
La clave foránea se puede definir también en el nivel de columna, siempre que la restricción esté basada
en una sola columna. La sintaxis difiere en que las palabras clave FOREIGN KEY no aparecen. Por
ejemplo:
CREATE TABLE employees
(...
department_id NUMBER(4) CONSTRAINT emp_deptid_fk
REFERENCES departments(department_id),
...
)

38
Restricción FOREIGN KEY
• Definida en el nivel de columna:
CREATE TABLE employees(
employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE,
...
department_id NUMBER(4) CONSTRAINT emp_dept_fk
REFERENCES departments(department_id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 39

Se debe crear una clave foránea compuesta en el nivel de la tabla, por ejemplo:
CREATE TABLE supplier
( sup_id numeric(15) not null,
sup_name varchar2(45) not null,
contact_name varchar2(45),
CONSTRAINT sup_pk PRIMARY KEY (sup_id, sup_name)
);

39
Restricción FOREIGN KEY: Palabras clave
• FOREIGN KEY: Define la columna en la tabla secundaria
en el nivel de restricción de tabla
• REFERENCES: Identifica la tabla y la columna en la tabla
principal
• ON DELETE CASCADE: Suprime las filas dependientes
de la tabla secundaria cuando se suprime una fila de la
tabla principal
• ON DELETE SET NULL: Convierte los valores de clave
foránea dependiente en nulos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 40

Sin las opciones ON DELETE CASCADE u ON DELETE SET NULL, la fila de la tabla principal no se puede
suprimir si se hace referencia a ella en la tabla secundaria. Y estas palabras clave no se pueden utilizar en la
sintaxis en el nivel de columna.

40
Restricción CHECK
• Define una condición que debe cumplir cada fila
• No puede hacer referencia a columnas de otras tablas

CREATE TABLE employees(


...
salary NUMBER(8,2) CONSTRAINT emp_salary_min
CHECK (salary > 0),
...
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 41

Para cumplir la restricción, en cada fila de la tabla se debe definir la condición como TRUE o desconocida
(debido a un valor nulo).
Una sola columna puede tener varias restricciones CHECK que hagan referencia a la columna en su
definición. No hay ningún límite en cuanto al número de restricciones CHECK que puede definir en una
columna.
Las restricciones CHECK se pueden definir en el nivel de tabla o de columna.

41
CREATE TABLE: Ejemplo de Restricción CHECK

CREATE TABLE employees(


employee_id NUMBER(6),
last_name VARCHAR2(25),
email VARCHAR2(25),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
hire_date DATE,
...
CONSTRAINT hire_date_min CHECK
(hire_date > '01-JAN-2018’)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 42

42
Escenario de caso: Creación de tablas

¿Cómo agregar
restricciones a las
tablas de la base de
datos de biblioteca
simplificada?

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 43

43
Escenario de caso: Adición de restricciones
CREATE TABLE authors(
id NUMBER(3),
name VARCHAR2(60),
CONSTRAINT atr_id_pk PRIMARY KEY (ID)
);

CREATE TABLE members(


id NUMBER(4),
first_name VARCHAR2(50),
last_name VARCHAR2(50),
street_address VARCHAR2(50),
city VARCHAR2(20),
state VARCHAR2(2),
zip VARACHAR2(10),
CONSTRAINT mbr_id_pk PRIMARY KEY (ID)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 44

44
Escenario de caso: Adición de restricciones
CREATE TABLE publishers(
id NUMBER(2),
name VARCHAR2(100) NOT NULL,
CONSTRAINT plr_id_pk PRIMARY KEY (ID)
) ;

CREATE TABLE books(


id VARCHAR2(6),
title VARCHAR2(255)NOT NULL,
publisher_id NUMBER(2),
author_id NUMBER(3),
CONSTRAINT bok_id_pk PRIMARY KEY (ID),
CONSTRAINT bok_atr_fk FOREIGN KEY (author_id)
REFERENCES authors(id),
CONSTRAINT bok_plr_fk FOREIGN KEY (publisher_id)
REFERENCES publishers(id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 45

45
Escenario de caso: Adición de restricciones
CREATE TABLE book_transactions(
id VARCHAR2(6),
tran_date DATE DEFAULT SYSDATE NOT NULL,
type VARCHAR2(10) ,
book_id VARCHAR2(6) ,
member_id NUMBER(4),
CONSTRAINT btn_id_pk PRIMARY KEY (ID),
CONSTRAINT bok_btn_fk FOREIGN KEY (book_id)
REFERENCES books(id),
CONSTRAINT bok_mbr_fk FOREIGN KEY (member_id)
REFERENCES members(id)
);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 46

46
Lenguaje de definición de datos
• La creación de tablas forma parte del lenguaje de
definición de datos de SQL
• Entre otras sentencias DDL se incluyen:
−ALTER: Para modificar la estructura de un objeto
−DROP: Para eliminar un objeto de la base de datos
−RENAME: Para cambiar el nombre de un objeto de base
de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 47

47
Sentencia ALTER TABLE
• Utilice la sentencia ALTER TABLE para cambiar
la estructura de tabla:
−Agregar una columna
−Modificar una definición de columna existente
−Definir un valor por defecto para la nueva columna
−Borrar una columna
−Cambiar el nombre de una columna
−Cambiar una tabla al estado de solo lectura

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 48

Después de crear una tabla, puede que necesite cambiar la estructura de la tabla por cualquiera de las
siguientes razones:
• Ha omitido una columna.
• Debe cambiar la definición de columna o su nombre.
• Debe eliminar columnas.
• Desea definir la tabla en modo de solo lectura.

48
Sentencia ALTER TABLE
• Utilizar la sentencia ALTER TABLE para agregar,
modificar y borrar columnas:
ALTER TABLE table
ADD (column data type [DEFAULT expr]
[, column data type]...);

ALTER TABLE table


MODIFY (column data type [DEFAULT expr]
[, column data type]...);

ALTER TABLE table


DROP (column [, column] …);

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 49

En la sintaxis:
• table es el nombre de la tabla.
• ADD|MODIFY|DROP es el tipo de modificación.
• column es el nombre de la columna.
• data type es el tipo de dato y la longitud de la columna.
• DEFAULT expr especifica el valor por defecto de una columna.

49
Adición de columnas
• Puede utilizar la cláusula ADD para agregar columnas:
ALTER TABLE employees
ADD termination_date DATE;

• La nueva columna se convierte en la última:


EMPLOYEE_ID LAST_NAME HIRE_DATE TERMINATION_DATE

100 King 17-Jun-1987 -


101 Kochhar 21-Sep-1989 -
102 De Haan 13-Jan-1993 -
200 Whalen 17-Sep-1987 -

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 50

Nota: Si una tabla ya contiene filas cuando se agrega una columna, la nueva columna será inicialmente nula
o utilizará el valor por defecto para todas las filas. Solo puede agregar una columna NOT NULL obligatoria
a una tabla que contenga datos en las demás columnas si especifica un valor por defecto. Puede agregar
una columna NOT NULL a una tabla vacía sin el valor por defecto.

Consulte la diapositiva 9 para consultar el código para crear esta tabla.

50
Modificación de columnas
• Puede cambiar el tipo de dato, tamaño y valor por
defecto de una columna:
ALTER TABLE employees
MODIFY first_name VARCHAR2(30);

• El cambio de un valor por defecto solo afecta a las


inserciones posteriores en la tabla
• Las modificaciones están sujetas a determinadas
condiciones

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 51

A continuación, se muestran las directrices para modificar una columna:


• Puede aumentar el ancho o la precisión de una columna numérica.
• Puede aumentar el ancho de las columnas de caracteres.
• Puede reducir el ancho de una columna si:
– La columna solo contiene valores nulos.
– La tabla no tiene filas.
– La disminución del ancho de columna no es inferior a los valores existentes en dicha columna.
• Puede cambiar el tipo de dato si la columna solo contiene valores nulos. La única excepción son las
conversiones de CHAR a VARCHAR2, que se pueden realizar con los datos de las columnas.
• Solo puede convertir una columna CHAR al tipo de dato VARCHAR2 o una columna VARCHAR2 al tipo
de dato CHAR si la columna contiene valores nulos o si no cambia el tamaño.
• El cambio a un valor por defecto de una columna solo afecta a las inserciones posteriores en la tabla.
• Puede agregar una restricción NOT NULL mediante las cláusulas MODIFY.

51
Borrado de columnas
• Usar la cláusula DROP COLUMN para borrar columnas
que ya no son necesarias:
ALTER TABLE employees
DROP (termination_date);

EMPLOYEE_ID LAST_NAME HIRE_DATE

100 King 17-Jun-1987


101 Kochhar 21-Sep-1989
102 De Haan 13-Jan-1993
200 Whalen 17-Sep-1987

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 52

A continuación, se muestran las directrices para borrar una columna:


• La columna puede o no contener datos.
• Con la sentencia ALTER TABLE DROP COLUMN, solo se puede borrar una columna en cada ocasión.
• La tabla debe tener al menos una columna después de modificarla.
• Después de borrar una columna, no se puede recuperar.
• Una llave primaria a la que hace referencia otra columna no se puede borrar, a menos que se agregue
la opción de cascada.
• El borrado de una columna puede tardar un rato si tiene muchos valores. En este caso, puede ser mejor
definirla para que no se utilice y borrarla cuando haya menos usuarios en el sistema. De esta forma, se
evitan los bloqueos ampliados.

52
Opción SET UNUSED
• La opción SET UNUSED marca una o más columnas
como no utilizadas para que se puedan borrar
simultáneamente cuando la demanda de recursos del
sistema sea menor
• Puede utilizar la opción SET UNUSED para marcar una
o más columnas como no utilizadas
• Puede utilizar la opción DROP UNUSED COLUMNS para
eliminar las columnas marcadas como no utilizadas

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 53

Las columnas no utilizadas se tratan como si se hubieran borrado, aunque sus datos de columna
permanezcan en las filas de la tabla.
Después de que una columna se marque como no utilizada, no tendrá acceso a dicha columna. Las
consultas SELECT * no recuperan datos de las columnas marcadas como no utilizadas. Además, los
nombres y tipos de columnas marcados como no utilizados no se muestran durante la sentencia
DESCRIBE, y puede agregar a la tabla una nueva columna con el mismo nombre que la columna no
utilizada.
Puede especificar la palabra clave ONLINE para indicar que se permiten las operaciones de lenguaje de
manipulación de datos (DML) en la tabla al marcar la columna o columnas como UNUSED. El siguiente
ejemplo de código muestra el uso de SET UNUSED COLUMN, que define una columna como no utilizada
para siempre mediante la adición de la palabra clave ONLINE:
ALTER TABLE dept80 SET UNUSED(hire_date)ONLINE;

La información de SET UNUSED se almacena en la vista de diccionario USER_UNUSED_COL_TABS.


Nota: Las instrucciones para definir una columna como UNUSED son similares a las instrucciones para
borrar una columna.

53
Opción SET UNUSED
ALTER TABLE <table_name>
SET UNUSED(<column_name> [ , <column_name>]);
OR
ALTER TABLE <table_name>
SET UNUSED COLUMN <column_name> [ , <column_name>];

ALTER TABLE dept


SET UNUSED (dname);

ALTER TABLE <table_name>


DROP UNUSED COLUMNS;

ALTER TABLE dept


DROP UNUSED COLUMNS;

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 54

Al definir una columna como UNUSED, tiene la opción de borrar esa columna.
Puede utilizar DROP UNUSED COLUMNS para eliminar de la tabla todas las columnas que estén
marcadas actualmente como no utilizadas. Puede utilizar esta sentencia cuando desee reclamar el
espacio en disco adicional de las columnas no utilizadas en la tabla. Si la tabla no contiene columnas no
utilizadas, la sentencia no devuelve ningún error.
Nota: Una opción DROP UNUSED COLUMNS posterior elimina físicamente todas las columnas no
utilizadas de una tabla, de forma similar a DROP COLUMN.

54
Escenario de caso: Modificación de tablas
Sean, estaba examinando la tabla AUTHORS y
me he dado cuenta de que:
Falta el campo de dirección de correo
electrónico del autor.
Hay que aumentar longitud de la columna de
Profesor
nombre del autor.
¿Puede realizar estos cambios?

Claro, puedo hacerlo. La modificación


consiste en agregar una nueva columna y
aumentar la longitud de columna, así que no
debe haber ningún problema
Alumno

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 55

55
Escenario de caso: Modificación de tablas

Parece que la
tabla se ha
modificado:

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 56

56
Tablas de solo lectura
• Puede utilizar la sintaxis de ALTER TABLE para:
−Definir una tabla en modo de solo lectura para evitar cambios
de DDL o DML durante el mantenimiento
de la tabla
−Volver a definir la tabla en modo de lectura/escritura
ALTER TABLE dept READ ONLY;

-- perform table maintenance and then


-- return table back to read/write mode

ALTER TABLE dept READ WRITE;

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 57

A continuación, se muestran las directrices para definir una tabla en modo de solo lectura:
• Puede especificar READ ONLY para definir una tabla en modo de solo lectura.
• Cuando una tabla está en modo de solo lectura, no se pueden emitir sentencias DML que afecten a la
tabla o cualquier sentencia SELECT... FOR UPDATE.
• Puede emitir sentencias DDL siempre y cuando no modifique los datos de la tabla.
• Se permiten operaciones sobre los índices asociados a la tabla cuando la tabla está en modo de solo
lectura.
• Especifique READ/WRITE para volver a definir una tabla de solo lectura en modo de lectura/escritura.
Nota: Si es necesario, puede borrar una tabla en modo READ ONLY. El comando DROP se ejecuta solo en
el diccionario de datos, por lo que no es necesario el acceso al contenido de la tabla. El espacio utilizado
por la tabla no se reclamará hasta que el tablespace se vuelva a definir en modo de lectura/escritura y, a
continuación, se podrán realizar los cambios necesarios en las cabeceras de segmentos de bloque, etc.

57
Borrado de una tabla
• Mueve una tabla a la papelera de reciclaje
• Elimina la tabla y sus datos si se especifica la cláusula
PURGE
• Invalida los objetos dependientes y elimina privilegios
de objeto en la tabla

DROP TABLE dept;

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 58

A menos que especifique la cláusula PURGE, la sentencia DROP TABLE no vuelve a liberar espacio en los
tablespaces para que lo utilicen otros objetos, y el espacio sigue contando en la cuota de espacio del
usuario. El borrado de una tabla invalida objetos dependientes y elimina privilegios de objeto en la tabla.
Al borrar una tabla, la base de datos pierde todos los datos de la tabla y todos los índices asociados a esta.
Sintaxis
DROP TABLE table [PURGE]

En la sintaxis, table es el nombre de la tabla.


A continuación, se muestran las directrices para borrar una tabla:
• Se suprimen todos los datos de la tabla.
• Se mantienen las vistas y los sinónimos, pero no son válidos.
• Se confirman las transacciones pendientes.
• Solo el creador de la tabla o un usuario con el privilegio DROP ANY TABLE puede eliminar una tabla.

58
Ejercicio del proyecto

• DFo_6_3_Project
−Base de datos de la tienda Oracle Baseball League:
Uso de DDL para crear y mantener tablas de base de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 59

59
Resumen
• En esta lección, debe haber aprendido a hacer lo
siguiente:
−Identificar los pasos necesarios para crear tablas de base de
datos
−Describir el objetivo del DDL
−Mostrar las operaciones DDL necesarias para
crear y mantener las tablas de una base de datos

DFo 6-3
Lenguaje de definición de datos (DDL) Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. 60

60
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 4, ejercicio 1: Lenguaje de Manipulación de Datos
Utilizar operaciones de DML para gestionar tablas de bases de datos (objetivo 2 de S6L4)

En este ejercicio, se rellenará y trabajará con los datos almacenados en las tablas del sistema de la base de datos.

Parte 1: Ejecución de un script para rellenar las tablas


Se debe tener en cuenta el orden de las tablas al rellenarlas. Una tabla que tiene un campo de clave foránea no
se puede rellenar antes de la tabla relacionada con la llave primaria.
1. Utilice el documento de asignación de tablas y enumere el orden en que se utilizaría para rellenar las tablas.
2. Abra el archivo "sports data.sql" y observe el orden en que se van a agregar datos, ¿coinciden con su lista? Este
archivo se puede encontrar en la práctica de la lección 4 en la sección 6 (sports data.zip) y primero se debe
extraer.
3. Ejecute el script "sports data.sql" en APEX para rellenar las tablas.
4. Compruebe que no se han producido errores al ejecutar el script.

Parte 2: Inserción de filas en el sistema


1. Agregue un nuevo equipo al sistema.

id name Number_of_players discount


t004 Jets 10 5

2. Agregue un nuevo cliente con los siguientes detalles al sistema.

Loyalty
ctr First Phone Current tem sre
email Last name card
number name number balance id id
number
brianrog@hootec
c02001 Brian Rogers 01654564898 -5 lc4587
h.com

3. Esta información viola la restricción de control por la que el saldo actual no debe ser inferior a cero. Cambie el
saldo actual a 50 y vuelva a ejecutar la consulta.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 4, ejercicio 1: Lenguaje de Manipulación de Datos
Utilizar operaciones de DML para gestionar tablas de bases de datos (objetivo 2 de S6L4)

En este ejercicio, se rellenará y trabajará con los datos almacenados en las tablas del sistema de la base de datos.

Parte 1: Ejecución de un script para rellenar las tablas


Se debe tener en cuenta el orden de las tablas al rellenarlas. Una tabla que tiene un campo de clave foránea no
se puede rellenar antes de la tabla relacionada con la llave primaria.
1. Utilice el documento de asignación de tablas y enumere el orden en que se utilizaría para rellenar las tablas.
2. Abra el archivo "sports data.sql" y observe el orden en que se van a agregar datos, ¿coinciden con su lista? Este
archivo se puede encontrar en la práctica de la lección 4 en la sección 6 (sports data.zip) y primero se debe
extraer.
3. Ejecute el script "sports data.sql" en APEX para rellenar las tablas.
4. Compruebe que no se han producido errores al ejecutar el script.

Parte 2: Inserción de filas en el sistema


1. Agregue un nuevo equipo al sistema.

id name Number_of_players discount


t004 Jets 10 5

2. Agregue un nuevo cliente con los siguientes detalles al sistema.

Loyalty
ctr First Phone Current tem sre
email Last name card
number name number balance id id
number
brianrog@hootec
c02001 Brian Rogers 01654564898 -5 lc4587
h.com

3. Esta información viola la restricción de control por la que el saldo actual no debe ser inferior a cero. Cambie el
saldo actual a 50 y vuelva a ejecutar la consulta.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 4, ejercicio 2: Lenguaje de manipulación de datos
Utilizar operaciones de DML para gestionar tablas de bases de datos (objetivo 2 de S6L4)

En este ejercicio, se rellenará y trabajará con los datos almacenados en el sistema de la base de datos.

Parte 1: Actualización de filas en el sistema


1. Ejecute la siguiente consulta para ver el contenido de la tabla price_history:

SELECT start_date, TO_CHAR (start_time, 'HH24:MI:SS'), price, end_date, TO_CHAR


(end_time, 'HH24:MI')
FROM price_history;

2. OBL va a actualizar el precio del bate premium, por lo que tendrá que escribir una consulta que cierre el precio
actual mediante la adición de valores a los campos end_date y end_time. Para ejecutar esta consulta, deberá
hacer coincidir el número de artículo y definir que la fecha final sea nula. Esto garantiza que se actualice el
precio más reciente.

3. Vuelva a ejecutar la sentencia select en la tabla price_history para asegurarse de que se haya ejecutado la
sentencia.

4. Inserte una nueva fila que utilice la fecha y hora actuales para definir el nuevo precio del bate premium en
99,99.

5. Vuelva a ejecutar la sentencia select en la tabla price_history para asegurarse de que se haya ejecutado la
sentencia.

Parte 2: Supresión de filas del sistema


1. Bob Thornberry se ha puesto en contacto con OBL para pedir que se elimine la dirección de 83 Barrhill Drive
porque ya no puede recibir paquetes en esa dirección. Escriba una sentencia SQL que elimine esta dirección del
sistema.

2. Ejecute una sentencia select en la tabla customers_addresses para asegurarse de que se haya ejecutado la
sentencia.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 4, ejercicio 2: Lenguaje de manipulación de datos
Utilizar operaciones de DML para gestionar tablas de bases de datos (objetivo 2 de S6L4)

En este ejercicio, se rellenará y trabajará con los datos almacenados en el sistema de la base de datos.

Parte 1: Actualización de filas en el sistema


1. Ejecute la siguiente consulta para ver el contenido de la tabla price_history:

SELECT start_date, TO_CHAR (start_time, 'HH24:MI:SS'), price, end_date, TO_CHAR


(end_time, 'HH24:MI')
FROM price_history;

2. OBL va a actualizar el precio del bate premium, por lo que tendrá que escribir una consulta que cierre el precio
actual mediante la adición de valores a los campos end_date y end_time. Para ejecutar esta consulta, deberá
hacer coincidir el número de artículo y definir que la fecha final sea nula. Esto garantiza que se actualice el
precio más reciente.

3. Vuelva a ejecutar la sentencia select en la tabla price_history para asegurarse de que se haya ejecutado la
sentencia.

4. Inserte una nueva fila que utilice la fecha y hora actuales para definir el nuevo precio del bate premium en
99,99.

5. Vuelva a ejecutar la sentencia select en la tabla price_history para asegurarse de que se haya ejecutado la
sentencia.

Parte 2: Supresión de filas del sistema


1. Bob Thornberry se ha puesto en contacto con OBL para pedir que se elimine la dirección de 83 Barrhill Drive
porque ya no puede recibir paquetes en esa dirección. Escriba una sentencia SQL que elimine esta dirección del
sistema.

2. Ejecute una sentencia select en la tabla customers_addresses para asegurarse de que se haya ejecutado la
sentencia.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
6-4: Definición de la manipulación de datos
Prácticas
Ejercicio 1: Inserción de filas en tablas

Visión general
Insertará filas en las tablas creadas para la base de datos académica.

Supuestos
Las tablas se han creado para la base de datos académica (basada en la práctica 6-3).

Tareas
1. Insertar filas en las tablas creadas para la base de datos académica en función de las siguientes tablas:

AD_ACADEMIC_SESSIONS:
ID NAME
100 SPRING SESSION
200 FALL SESSION
300 SUMMER SESSION

AD_DEPARTMENTS:
ID NAME HEAD
10 ACCOUNTING MARK SMITH
20 BIOLOGY DAVE GOLD
30 COMPUTER SCIENCE LINDA BROWN
40 LITERATURE ANITA TAYLOR

AD_PARENT_INFORMATION: (Indicación: debe volver al estado READ/WRITE)


ID PARENT1_FN PARENT1_LN PARENT2_FN PARENT2_LN
600 NEIL SMITH DORIS SMITH
610 WILLIAM BEN NITA BEN
620 SEAN TAYLOR RHEA TAYLOR
630 DAVE CARMEN CATHY CARMEN
640 JOHN AUDRY JANE AUDRY

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
AD_STUDENTS:
ID FIRST_NAME LAST_NAME REG_YEAR EMAIL PARENT_ID
720 JACK SMITH 01-Jan-2012 [email protected] 600
730 NOAH AUDRY 01-Jan-2012 [email protected] 640
740 RHONDA TAYLOR 01-Sep-2012 [email protected] 620
750 ROBERT BEN 01-Mar-2012 [email protected] 610
760 JEANNE BEN 01-Mar-2012 [email protected] 610
770 MILLS CARMEN 01-Apr-2013 [email protected] 630

AD_COURSES:
ID NAME SESSION_ID DEPT_ID LOGON_ID PASSWORD BUILDING ROOM DATE_TIME
195 CELL BIOLOGY 200 20 - - BUILDING D 401 MWF 9-10
190 PRINCIPLES OF 100 10 - - BUILDING A 101 MWF 12-1
ACCOUNTING
191 INTRODUCTION TO 100 10 - - BUILDING B 201 THUR 2-4
BUSINESS LAW
192 COST ACCOUNTING 100 10 - - BUILDING C 301 TUES 5-7
193 STRATEGIC TAX 100 10 TAX123 PASSWORD - - -
PLANNING FOR
BUSINESS
194 GENERAL BIOLOGY 200 20 BIO123 PASSWORD - - -

AD_FACULTY:
ID FIRST_NAME LAST_NAME EMAIL SALARY INSURANCE HOURLY_RATE DEPT_ID
800 JILL MILLER [email protected] 10000 HEALTH - 20
810 JAMES BORG [email protected] 30000 HEALTH,DENTAL - 10
820 LYNN BROWN [email protected] - - 50 30
830 ARTHUR SMITH [email protected] - - 40 10
840 SALLY JONES [email protected] 50000 HEALTH,DENTAL,VISION - 40

AD_EXAM_TYPES:
TYPE NAME DESCRIPTION
MCE Multiple Choice Exams CHOOSE MORE THAN ONE ANSWER
TF TRUE AND FALSE Exams CHOOSE EITHER TRUE OR FALSE
ESS ESSAY Exams WRITE PARAGRAPHS
SA SHORT ANSWER Exams WRITE SHORT ANSWERS
FIB FILL IN THE BLANKS Exams TYPE IN THE CORRECT ANSWER

AD_EXAMS:
ID START_DATE EXAM_TYPE COURSE_ID
500 12-Sep-2013 MCE 190
510 15-Sep-2013 SA 191
520 18-Sep-2013 FIB 192
530 21-Mar-2014 ESS 193
540 02-Apr-2014 TF 194

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
AD_EXAM_RESULTS:
STUDENT_ID COURSE_ID EXAM_ID EXAM_GRADE
720 190 500 91
730 195 540 87
730 194 530 85
750 195 510 97
750 191 520 78
760 192 510 70
720 193 520 97
750 192 500 60
760 192 540 65
760 191 530 60

AD_STUDENT_ATTENDANCE:
STUDENT_ID SESSION_ID NUM_WORK_DAYS NUM_DAYS_OFF EXAM_ELIGIBILITY
730 200 180 11 Y
740 300 180 12 Y
770 300 180 13 Y
720 100 180 21 Y
750 100 180 14 Y
760 200 180 15 Y

AD_STUDENT_COURSE_DETAILS:
STUDENT_ID COURSE_ID GRADE
720 190 A
750 192 A
760 190 B
770 194 A
720 193 B
730 191 C
740 195 F
760 192 C
770 192 D
770 193 F

AD_FACULTY_COURSE_DETAILS:
FACULTY_ID COURSE_ID CONTACT_HRS
800 192 3
800 193 4
800 190 5
800 191 3
810 194 4
810 195 5

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
AD_FACULTY_LOGIN_DETAILS:
FACULTY_ID LOGIN_DATE_TIME
800 01-JUN-17 05.10.39.000000 PM
800 01-JUN-17 05.13.15.000000 PM
810 01-JUN-17 05.13.21.000000 PM
840 01-JUN-17 05.13.26.000000 PM
820 01-JUN-17 05.13.31.000000 PM
830 01-JUN-17 05.13.36.000000 PM

Nota: Nota: Puede escribir las sentencias INSERT y guardarlas como un script .sql que, posteriormente, se puede cargar y
ejecutar en la aplicación APEX.

Puede ejecutar estos comandos en Oracle Application Express como un script:

a. Guarde las sentencias DDL anteriores como un archivo de texto.


b. Inicie sesión en APEX.
c. Haga clic en SQL Workshop.
d. Haga clic en SQL Scripts.
e. Haga clic en el botón Upload.
f. En la ventana Upload Script, haga clic en Browse…, seleccione el script SQL; proporcione un nombre de script.
Cuando haya terminado, haga clic en Upload.
g. Aparecerá un mensaje indicándole que el script se ha cargado. Haga clic en el botón Run. Se abrirá una ventana que
muestra el script cargado. Haga clic en el botón Run Script para ejecutar las sentencias.
h. La ventana de resultados muestra si las sentencias se ejecutaron correctamente.

Ejercicio 2: Actualizar filas en una tabla

Visión general
Actualizará los registros de la tabla FACULTY_LOGIN_DETAILS para incluir un campo DETAILS en la tabla.

Tareas
1. Modifique la tabla AD_FACULTY_LOGIN_DETAILS para agregar un campo denominado DETAILS y hacer que sea un campo
VARCHAR2(50), que pueda tener valores nulos.

2. Actualice al menos 2 registros de la columna DETAILS en la tabla de detalles de conexión del profesorado.
**Nota: Tendrá que consultar los valores de LOGIN_DATE_TIME de los registros que se van a actualizar, ya que forman parte de
la llave primaria.

Verifique que la columna DETAILS se haya actualizado con los valores:

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
Fundamentos de bases de datos
6-4: Definición de la manipulación de datos
Prácticas
Ejercicio 1: Inserción de filas en tablas

Visión general
Insertará filas en las tablas creadas para la base de datos académica.

Supuestos
Las tablas se han creado para la base de datos académica (basada en la práctica 6-3).

Tareas
1. Insertar filas en las tablas creadas para la base de datos académica en función de las siguientes tablas:

AD_ACADEMIC_SESSIONS:
ID NAME
100 SPRING SESSION
200 FALL SESSION
300 SUMMER SESSION

AD_DEPARTMENTS:
ID NAME HEAD
10 ACCOUNTING MARK SMITH
20 BIOLOGY DAVE GOLD
30 COMPUTER SCIENCE LINDA BROWN
40 LITERATURE ANITA TAYLOR

AD_PARENT_INFORMATION: (Indicación: debe volver al estado READ/WRITE)


ID PARENT1_FN PARENT1_LN PARENT2_FN PARENT2_LN
600 NEIL SMITH DORIS SMITH
610 WILLIAM BEN NITA BEN
620 SEAN TAYLOR RHEA TAYLOR
630 DAVE CARMEN CATHY CARMEN
640 JOHN AUDRY JANE AUDRY

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
AD_STUDENTS:
ID FIRST_NAME LAST_NAME REG_YEAR EMAIL PARENT_ID
720 JACK SMITH 01-Jan-2012 [email protected] 600
730 NOAH AUDRY 01-Jan-2012 [email protected] 640
740 RHONDA TAYLOR 01-Sep-2012 [email protected] 620
750 ROBERT BEN 01-Mar-2012 [email protected] 610
760 JEANNE BEN 01-Mar-2012 [email protected] 610
770 MILLS CARMEN 01-Apr-2013 [email protected] 630

AD_COURSES:
ID NAME SESSION_ID DEPT_ID LOGON_ID PASSWORD BUILDING ROOM DATE_TIME
195 CELL BIOLOGY 200 20 - - BUILDING D 401 MWF 9-10
190 PRINCIPLES OF 100 10 - - BUILDING A 101 MWF 12-1
ACCOUNTING
191 INTRODUCTION TO 100 10 - - BUILDING B 201 THUR 2-4
BUSINESS LAW
192 COST ACCOUNTING 100 10 - - BUILDING C 301 TUES 5-7
193 STRATEGIC TAX 100 10 TAX123 PASSWORD - - -
PLANNING FOR
BUSINESS
194 GENERAL BIOLOGY 200 20 BIO123 PASSWORD - - -

AD_FACULTY:
ID FIRST_NAME LAST_NAME EMAIL SALARY INSURANCE HOURLY_RATE DEPT_ID
800 JILL MILLER [email protected] 10000 HEALTH - 20
810 JAMES BORG [email protected] 30000 HEALTH,DENTAL - 10
820 LYNN BROWN [email protected] - - 50 30
830 ARTHUR SMITH [email protected] - - 40 10
840 SALLY JONES [email protected] 50000 HEALTH,DENTAL,VISION - 40

AD_EXAM_TYPES:
TYPE NAME DESCRIPTION
MCE Multiple Choice Exams CHOOSE MORE THAN ONE ANSWER
TF TRUE AND FALSE Exams CHOOSE EITHER TRUE OR FALSE
ESS ESSAY Exams WRITE PARAGRAPHS
SA SHORT ANSWER Exams WRITE SHORT ANSWERS
FIB FILL IN THE BLANKS Exams TYPE IN THE CORRECT ANSWER

AD_EXAMS:
ID START_DATE EXAM_TYPE COURSE_ID
500 12-Sep-2013 MCE 190
510 15-Sep-2013 SA 191
520 18-Sep-2013 FIB 192
530 21-Mar-2014 ESS 193
540 02-Apr-2014 TF 194

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
AD_EXAM_RESULTS:
STUDENT_ID COURSE_ID EXAM_ID EXAM_GRADE
720 190 500 91
730 195 540 87
730 194 530 85
750 195 510 97
750 191 520 78
760 192 510 70
720 193 520 97
750 192 500 60
760 192 540 65
760 191 530 60

AD_STUDENT_ATTENDANCE:
STUDENT_ID SESSION_ID NUM_WORK_DAYS NUM_DAYS_OFF EXAM_ELIGIBILITY
730 200 180 11 Y
740 300 180 12 Y
770 300 180 13 Y
720 100 180 21 Y
750 100 180 14 Y
760 200 180 15 Y

AD_STUDENT_COURSE_DETAILS:
STUDENT_ID COURSE_ID GRADE
720 190 A
750 192 A
760 190 B
770 194 A
720 193 B
730 191 C
740 195 F
760 192 C
770 192 D
770 193 F

AD_FACULTY_COURSE_DETAILS:
FACULTY_ID COURSE_ID CONTACT_HRS
800 192 3
800 193 4
800 190 5
800 191 3
810 194 4
810 195 5

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

3
AD_FACULTY_LOGIN_DETAILS:
FACULTY_ID LOGIN_DATE_TIME
800 01-JUN-17 05.10.39.000000 PM
800 01-JUN-17 05.13.15.000000 PM
810 01-JUN-17 05.13.21.000000 PM
840 01-JUN-17 05.13.26.000000 PM
820 01-JUN-17 05.13.31.000000 PM
830 01-JUN-17 05.13.36.000000 PM

Nota: Nota: Puede escribir las sentencias INSERT y guardarlas como un script .sql que, posteriormente, se puede cargar y
ejecutar en la aplicación APEX.

Puede ejecutar estos comandos en Oracle Application Express como un script:

a. Guarde las sentencias DDL anteriores como un archivo de texto.


b. Inicie sesión en APEX.
c. Haga clic en SQL Workshop.
d. Haga clic en SQL Scripts.
e. Haga clic en el botón Upload.
f. En la ventana Upload Script, haga clic en Browse…, seleccione el script SQL; proporcione un nombre de script.
Cuando haya terminado, haga clic en Upload.
g. Aparecerá un mensaje indicándole que el script se ha cargado. Haga clic en el botón Run. Se abrirá una ventana que
muestra el script cargado. Haga clic en el botón Run Script para ejecutar las sentencias.
h. La ventana de resultados muestra si las sentencias se ejecutaron correctamente.

Ejercicio 2: Actualizar filas en una tabla

Visión general
Actualizará los registros de la tabla FACULTY_LOGIN_DETAILS para incluir un campo DETAILS en la tabla.

Tareas
1. Modifique la tabla AD_FACULTY_LOGIN_DETAILS para agregar un campo denominado DETAILS y hacer que sea un campo
VARCHAR2(50), que pueda tener valores nulos.

2. Actualice al menos 2 registros de la columna DETAILS en la tabla de detalles de conexión del profesorado.
**Nota: Tendrá que consultar los valores de LOGIN_DATE_TIME de los registros que se van a actualizar, ya que forman parte de
la llave primaria.

Verifique que la columna DETAILS se haya actualizado con los valores:

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

4
2
3
4
Piense en una base de datos bancaria. Cuando un cliente del banco transfiere dinero de su cuenta de
ahorro a una cuenta corriente, la transacción puede constar de las siguientes tres acciones diferentes:
reducir la cuenta de ahorro, aumentar la cuenta corriente y registrar la transacción en el diario de
transacciones. El servidor de Oracle debe garantizar que se ejecuten las tres sentencias SQL para mantener
el balance correcto de las cuentas. Si algo impide que una de las sentencias de la transacción se ejecute, las
demás sentencias de la transacción se deben deshacer.

5
6
En la sintaxis:
• table es el nombre de la tabla.
• column es el nombre de la columna de la tabla que desea rellenar.
• value es el valor correspondiente para la columna.

7
8
9
10
11
Asegúrese de que puede utilizar valores nulos en la columna de destino mediante la verificación del estado
Null con el comando DESCRIBE.
El servidor de Oracle aplica automáticamente todos los tipos de dato, rangos de datos y restricciones de
integridad de los datos. Las columnas que no se muestran explícitamente obtienen un valor nulo en la
nueva fila, a menos que haya valores por defecto para las columnas que faltan que se utilizan.
Los errores comunes que se producen durante la entrada del usuario se comprueban en el siguiente orden:
• Falta el valor obligatorio de una columna NOT NULL.
• Un valor duplicado viola cualquier restricción de clave única o primaria.
• El valor Any viola una restricción CHECK.
• Una clave foránea viola la restricción de integridad referencial.
• No coincidencias de tipos de dato o los valores son demasiado anchos para la columna.
Nota: Se recomienda el uso de la lista de columnas porque hace la sentencia INSERT más legible y fiable,
y menos proclive a errores.

12
13
Nota: En primer lugar, cree la tabla copy_employees: CREATE copy_employees AS (SELECT * FROM
employees);

En el ejemplo de la diapositiva se registra información sobre el empleado Popp en la tabla EMPLOYEES.


Proporciona la fecha y hora actuales en la columna HIRE_DATE. Utiliza la función SYSDATE para
devolver la fecha y hora actuales del servidor de base de datos.
También puede utilizar la función CURRENT_DATE para devolver la fecha actual en la zona horaria de la
sesión.
Al insertar filas en una tabla, también puede utilizar la función USER para registrar el nombre de usuario
actual.

14
15
16
17
En la sintaxis:
• table es el nombre de la tabla.
• column es el nombre de la columna de la tabla que se debe rellenar.
• value es el valor o subconsulta correspondiente para la columna.
• condition identifica las filas que se van a actualizar y consta de los nombres de columna,
expresiones, constantes, subconsultas y operadores de comparación.

18
Por ejemplo, un empleado que era SA_REP ahora ha cambiado su puesto a IT_PROG. Por lo tanto, se
debe actualizar su JOB_ID y el campo de comisiones se debe definir en NULL.
UPDATE copy_employees
SET job_id = 'IT_PROG', commission_pct = NULL
...
WHERE employee_id = 114;

Nota: La tabla copy_employees tiene los mismos datos que la tabla EMPLOYEES.

19
20
Nota: Tenga en cuenta que la consulta utiliza la tabla employees, que tiene restricciones de integridad
aplicadas (copy_employees no tiene estas restricciones aplicadas).

Si hay restricciones aplicadas en las columnas, se devolverá un error si intenta violar la regla de restricción.
Por ejemplo, si intenta actualizar un registro con un valor ligado a una restricción de integridad, se
devuelve un error.
En el ejemplo de la diapositiva, el departamento 55 no existe en la tabla principal, DEPARTMENTS, por lo
tanto, recibirá la violación ORA-02291 "parent key not found".

21
22
En la sintaxis:
• table es el nombre de la tabla.
• condition identifica las filas que se van a suprimir y consta de los nombres de columna,
expresiones, constantes, subconsultas y operadores de comparación.
Nota: Si no se suprime ninguna fila, se devuelve el mensaje “0 rows deleted”.

23
A continuación, se muestra un ejemplo de eliminación de las filas identificadas en la cláusula WHERE:
DELETE FROM copy_departments WHERE department_id IN (30, 40);

24
Nota: Tenga en cuenta que la consulta utiliza la tabla departments, que tiene restricciones de integridad
aplicadas (copy_departments no tiene estas restricciones aplicadas).

Por ejemplo, si intenta suprimir un registro con un valor ligado a una restricción de integridad, se devuelve
un error.
En el ejemplo de la diapositiva, se muestra un intento de suprimir el departamento 60 de la tabla
DEPARTMENTS, pero se produce un error porque ese número de departamento se utiliza como clave
foránea en la tabla EMPLOYEES. Si el registro principal que intenta suprimir tiene registros secundarios,
recibirá la violación ORA-02292 "child record found".

25
26
La sentencia TRUNCATE es un método más eficaz para eliminar todas las filas de una tabla o cluster.
La eliminación de filas con las sentencia TRUNCATE es más rápida que la eliminación con la sentencia
DELETE por las siguientes razones:
• La sentencia TRUNCATE es una sentencia DDL y no genera ninguna información de rollback. La
información de rollback se trata más adelante en esta lección.
• El truncamiento de una tabla no arranca los disparadores de supresión de la tabla.
Si la tabla es el principal de una restricción de integridad referencial, no puede truncarla. Debe desactivar la
restricción antes de emitir la sentencia TRUNCATE. La desactivación de las restricciones se trata en la
lección titulada "Introducción a sentencias DDL".

27
28
29
2
3
4
Piense en una base de datos bancaria. Cuando un cliente del banco transfiere dinero de su cuenta de
ahorro a una cuenta corriente, la transacción puede constar de las siguientes tres acciones diferentes:
reducir la cuenta de ahorro, aumentar la cuenta corriente y registrar la transacción en el diario de
transacciones. El servidor de Oracle debe garantizar que se ejecuten las tres sentencias SQL para mantener
el balance correcto de las cuentas. Si algo impide que una de las sentencias de la transacción se ejecute, las
demás sentencias de la transacción se deben deshacer.

5
6
En la sintaxis:
• table es el nombre de la tabla.
• column es el nombre de la columna de la tabla que desea rellenar.
• value es el valor correspondiente para la columna.

7
8
9
10
11
Asegúrese de que puede utilizar valores nulos en la columna de destino mediante la verificación del estado
Null con el comando DESCRIBE.
El servidor de Oracle aplica automáticamente todos los tipos de dato, rangos de datos y restricciones de
integridad de los datos. Las columnas que no se muestran explícitamente obtienen un valor nulo en la
nueva fila, a menos que haya valores por defecto para las columnas que faltan que se utilizan.
Los errores comunes que se producen durante la entrada del usuario se comprueban en el siguiente orden:
• Falta el valor obligatorio de una columna NOT NULL.
• Un valor duplicado viola cualquier restricción de clave única o primaria.
• El valor Any viola una restricción CHECK.
• Una clave foránea viola la restricción de integridad referencial.
• No coincidencias de tipos de dato o los valores son demasiado anchos para la columna.
Nota: Se recomienda el uso de la lista de columnas porque hace la sentencia INSERT más legible y fiable,
y menos proclive a errores.

12
13
Nota: En primer lugar, cree la tabla copy_employees: CREATE copy_employees AS (SELECT * FROM
employees);

En el ejemplo de la diapositiva se registra información sobre el empleado Popp en la tabla EMPLOYEES.


Proporciona la fecha y hora actuales en la columna HIRE_DATE. Utiliza la función SYSDATE para
devolver la fecha y hora actuales del servidor de base de datos.
También puede utilizar la función CURRENT_DATE para devolver la fecha actual en la zona horaria de la
sesión.
Al insertar filas en una tabla, también puede utilizar la función USER para registrar el nombre de usuario
actual.

14
15
16
17
En la sintaxis:
• table es el nombre de la tabla.
• column es el nombre de la columna de la tabla que se debe rellenar.
• value es el valor o subconsulta correspondiente para la columna.
• condition identifica las filas que se van a actualizar y consta de los nombres de columna,
expresiones, constantes, subconsultas y operadores de comparación.

18
Por ejemplo, un empleado que era SA_REP ahora ha cambiado su puesto a IT_PROG. Por lo tanto, se
debe actualizar su JOB_ID y el campo de comisiones se debe definir en NULL.
UPDATE copy_employees
SET job_id = 'IT_PROG', commission_pct = NULL
...
WHERE employee_id = 114;

Nota: La tabla copy_employees tiene los mismos datos que la tabla EMPLOYEES.

19
20
Nota: Tenga en cuenta que la consulta utiliza la tabla employees, que tiene restricciones de integridad
aplicadas (copy_employees no tiene estas restricciones aplicadas).

Si hay restricciones aplicadas en las columnas, se devolverá un error si intenta violar la regla de restricción.
Por ejemplo, si intenta actualizar un registro con un valor ligado a una restricción de integridad, se
devuelve un error.
En el ejemplo de la diapositiva, el departamento 55 no existe en la tabla principal, DEPARTMENTS, por lo
tanto, recibirá la violación ORA-02291 "parent key not found".

21
22
En la sintaxis:
• table es el nombre de la tabla.
• condition identifica las filas que se van a suprimir y consta de los nombres de columna,
expresiones, constantes, subconsultas y operadores de comparación.
Nota: Si no se suprime ninguna fila, se devuelve el mensaje “0 rows deleted”.

23
A continuación, se muestra un ejemplo de eliminación de las filas identificadas en la cláusula WHERE:
DELETE FROM copy_departments WHERE department_id IN (30, 40);

24
Nota: Tenga en cuenta que la consulta utiliza la tabla departments, que tiene restricciones de integridad
aplicadas (copy_departments no tiene estas restricciones aplicadas).

Por ejemplo, si intenta suprimir un registro con un valor ligado a una restricción de integridad, se devuelve
un error.
En el ejemplo de la diapositiva, se muestra un intento de suprimir el departamento 60 de la tabla
DEPARTMENTS, pero se produce un error porque ese número de departamento se utiliza como clave
foránea en la tabla EMPLOYEES. Si el registro principal que intenta suprimir tiene registros secundarios,
recibirá la violación ORA-02292 "child record found".

25
26
La sentencia TRUNCATE es un método más eficaz para eliminar todas las filas de una tabla o cluster.
La eliminación de filas con las sentencia TRUNCATE es más rápida que la eliminación con la sentencia
DELETE por las siguientes razones:
• La sentencia TRUNCATE es una sentencia DDL y no genera ninguna información de rollback. La
información de rollback se trata más adelante en esta lección.
• El truncamiento de una tabla no arranca los disparadores de supresión de la tabla.
Si la tabla es el principal de una restricción de integridad referencial, no puede truncarla. Debe desactivar la
restricción antes de emitir la sentencia TRUNCATE. La desactivación de las restricciones se trata en la
lección titulada "Introducción a sentencias DDL".

27
28
29
Fundamentos de bases de datos
6-5: Definición de control de transacciones
Prácticas
Ejercicio 1: Controlar las transacciones

Visión general
En esta práctica, controlará las transacciones mediante las siguientes sentencias:
• COMMIT
• ROLLBACK
• SAVEPOINT

Supuestos
• Puesto que las sentencias TCL no se pueden ejecutar en Oracle Application Express (APEX), creará el lenguaje de
comandos pero no lo ejecutará realmente.

Tareas
1. Suponga que se crea una tabla con esta estructura:
CREATE TABLE AD_STUDENT_TEST_DETAILS
(
STUDENT_ID NUMBER NOT NULL ,
FIRST_NAME VARCHAR2(50) ,
STUDENT_REG_YEAR DATE
) ;

A continuación, se modifica la tabla para agregar una columna email_addr:


ALTER TABLE AD_STUDENT_TEST_DETAILS ADD ( EMAIL_ADDR VARCHAR2(100)
UNIQUE );

Después de la sentencia ALTER, se crea un punto de grabación denominado ALTER_DONE.

Se emite un ROLLBACK después del punto de grabación ALTER_DONE. ¿Seguiría allí el nuevo campo de correo electrónico?

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2. Se realiza una operación INSERT para agregar filas a la tabla de prueba y, a continuación, se crea un punto de grabación
denominado INSERT_DONE.

A continuación, se lleva a cabo una operación UPDATE de una fila de la tabla y se crea un punto de grabación denominado
UPDATE_DONE.

Se ejecuta una operación DELETE para suprimir una fila de la tabla de prueba y se crea un punto de grabación denominado
UPDATE_DONE. Llegado este punto, ¿qué registros habría en la tabla?

Se realiza un ROLLBACK en el punto de grabación UPDATE_DONE. ¿Qué cambios observaría con respecto a las transacciones y
los registros que quedan en la tabla?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
6-5: Definición de control de transacciones
Prácticas
Ejercicio 1: Controlar las transacciones

Visión general
En esta práctica, controlará las transacciones mediante las siguientes sentencias:
• COMMIT
• ROLLBACK
• SAVEPOINT

Supuestos
• Puesto que las sentencias TCL no se pueden ejecutar en Oracle Application Express (APEX), creará el lenguaje de
comandos pero no lo ejecutará realmente.

Tareas
1. Suponga que se crea una tabla con esta estructura:
CREATE TABLE AD_STUDENT_TEST_DETAILS
(
STUDENT_ID NUMBER NOT NULL ,
FIRST_NAME VARCHAR2(50) ,
STUDENT_REG_YEAR DATE
) ;

A continuación, se modifica la tabla para agregar una columna email_addr:


ALTER TABLE AD_STUDENT_TEST_DETAILS ADD ( EMAIL_ADDR VARCHAR2(100)
UNIQUE );

Después de la sentencia ALTER, se crea un punto de grabación denominado ALTER_DONE.

Se emite un ROLLBACK después del punto de grabación ALTER_DONE. ¿Seguiría allí el nuevo campo de correo electrónico?

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2. Se realiza una operación INSERT para agregar filas a la tabla de prueba y, a continuación, se crea un punto de grabación
denominado INSERT_DONE.

A continuación, se lleva a cabo una operación UPDATE de una fila de la tabla y se crea un punto de grabación denominado
UPDATE_DONE.

Se ejecuta una operación DELETE para suprimir una fila de la tabla de prueba y se crea un punto de grabación denominado
UPDATE_DONE. Llegado este punto, ¿qué registros habría en la tabla?

Se realiza un ROLLBACK en el punto de grabación UPDATE_DONE. ¿Qué cambios observaría con respecto a las transacciones y
los registros que quedan en la tabla?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
2
3
4
5
6
7
8
9
10
11
Puede controlar la lógica de las transacciones mediante las sentencias COMMIT, SAVEPOINT y ROLLBACK.

Nota: No puede aplicar la sentencia COMMIT en SAVEPOINT. SAVEPOINT no es SQL estándar de


ANSI.

Nota: COMMIT y ROLLBACK no están soportadas actualmente en APEX.

12
Nota: Si crea un segundo punto de grabación con el mismo nombre que un punto de grabación anterior,
éste se suprime.

13
14
15
16
En el siguiente ejemplo, se eliminan los departamentos 290 y 300 en la tabla copy_departments, actualiza
una fila en la tabla copy_employeesy guarda los cambios en los datos.
DELETE FROM copy_departments
WHERE department_id IN (290, 300);

UPDATE copy_employees
SET department_id = 80
WHERE employee_id = 206;

COMMIT;

Nota: La sentencia COMMIT no está soportada actualmente en APEX.

17
18
Nota: La sentencia ROLLBACK no está soportada actualmente en APEX.

19
El servidor de Oracle emite una confirmación implícita antes y después de cualquier sentencia DDL.
Por lo tanto, si la sentencia DDL no se ejecuta correctamente, no podrá realizar rollback de la sentencia
anterior porque el servidor ha emitido una confirmación.
Termine las transacciones explícitamente con la ejecución de una sentencia COMMIT o ROLLBACK.

20
Nota: El mismo usuario se puede conectar a diferentes sesiones. Cada sesión mantiene la consistencia de
lectura, independientemente de la sesión en la que esté conectado el usuario.

21
La consistencia de lectura es una implementación automática. Mantiene una copia parcial de la base de
datos en los segmentos de deshacer. La imagen de lectura consistente se crea a partir de los datos
confirmados de la tabla y de los datos antiguos que se están cambiando y que aún no se han confirmado
del segmento de deshacer.
Al realizar una operación de inserción, actualización o supresión en la base de datos, el servidor de Oracle
realiza una copia de los datos antes de cambiarlos y los escribe en un segmento de deshacer.
Todos los lectores, excepto el que haya realizado el cambio, seguirán viendo la base de datos como estaba
antes de que comenzaran los cambios; verán una “instantánea” de los datos del segmento de deshacer.
Antes de confirmar los cambios en la base de datos, sólo el usuario que modifica los datos ve la base de
datos con modificaciones. Todos los demás verán la instantánea en el segmento de deshacer. Esto
garantiza que los lectores de los datos lean datos consistentes en los que no se esté realizando actualmente
ningún cambio.
Al confirmar una sentencia DML, el cambio realizado en la base de datos se hace visible para todos aquellos
que emiten una sentencia SELECT después de realizar la confirmación. El espacio ocupado por los datos
antiguos en el archivo de segmentos de deshacer se libera para volver a utilizarlo.
Si se realiza un rollback de la transacción, los cambios se deshacen: La versión original anterior de los datos
del segmento de deshacer se vuelve a escribir en la tabla y todos los usuarios ven la base de datos como
estaba antes de comenzar la transacción.

22
23
2
3
4
5
6
7
8
9
10
11
Puede controlar la lógica de las transacciones mediante las sentencias COMMIT, SAVEPOINT y ROLLBACK.

Nota: No puede aplicar la sentencia COMMIT en SAVEPOINT. SAVEPOINT no es SQL estándar de


ANSI.

Nota: COMMIT y ROLLBACK no están soportadas actualmente en APEX.

12
Nota: Si crea un segundo punto de grabación con el mismo nombre que un punto de grabación anterior,
éste se suprime.

13
14
15
16
En el siguiente ejemplo, se eliminan los departamentos 290 y 300 en la tabla copy_departments, actualiza
una fila en la tabla copy_employeesy guarda los cambios en los datos.
DELETE FROM copy_departments
WHERE department_id IN (290, 300);

UPDATE copy_employees
SET department_id = 80
WHERE employee_id = 206;

COMMIT;

Nota: La sentencia COMMIT no está soportada actualmente en APEX.

17
18
Nota: La sentencia ROLLBACK no está soportada actualmente en APEX.

19
El servidor de Oracle emite una confirmación implícita antes y después de cualquier sentencia DDL.
Por lo tanto, si la sentencia DDL no se ejecuta correctamente, no podrá realizar rollback de la sentencia
anterior porque el servidor ha emitido una confirmación.
Termine las transacciones explícitamente con la ejecución de una sentencia COMMIT o ROLLBACK.

20
Nota: El mismo usuario se puede conectar a diferentes sesiones. Cada sesión mantiene la consistencia de
lectura, independientemente de la sesión en la que esté conectado el usuario.

21
La consistencia de lectura es una implementación automática. Mantiene una copia parcial de la base de
datos en los segmentos de deshacer. La imagen de lectura consistente se crea a partir de los datos
confirmados de la tabla y de los datos antiguos que se están cambiando y que aún no se han confirmado
del segmento de deshacer.
Al realizar una operación de inserción, actualización o supresión en la base de datos, el servidor de Oracle
realiza una copia de los datos antes de cambiarlos y los escribe en un segmento de deshacer.
Todos los lectores, excepto el que haya realizado el cambio, seguirán viendo la base de datos como estaba
antes de que comenzaran los cambios; verán una “instantánea” de los datos del segmento de deshacer.
Antes de confirmar los cambios en la base de datos, sólo el usuario que modifica los datos ve la base de
datos con modificaciones. Todos los demás verán la instantánea en el segmento de deshacer. Esto
garantiza que los lectores de los datos lean datos consistentes en los que no se esté realizando actualmente
ningún cambio.
Al confirmar una sentencia DML, el cambio realizado en la base de datos se hace visible para todos aquellos
que emiten una sentencia SELECT después de realizar la confirmación. El espacio ocupado por los datos
antiguos en el archivo de segmentos de deshacer se libera para volver a utilizarlo.
Si se realiza un rollback de la transacción, los cambios se deshacen: La versión original anterior de los datos
del segmento de deshacer se vuelve a escribir en la tabla y todos los usuarios ven la base de datos como
estaba antes de comenzar la transacción.

22
23
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 6, ejercicio 1: Recuperación de Datos mediante SELECT
Escribir y ejecutar sentencias SELECT (objetivo 2 de S6L6)

En este ejercicio, se recuperarán los datos que se almacenan en el sistema de base de datos mediante una sentencia
SELECT.

Parte 1: Devolución de todas las columnas especificadas de una tabla


Al usar la sentencia SELECT * se muestran todos los datos almacenados en las siguientes tablas:

1. customers.

2. teams.

3. items.

Parte 2: Selección de columnas concretas


1. Visualice el número de cliente, el nombre, los apellidos, el correo electrónico y el número de teléfono de los
clientes.

2. Visualice el nombre y el número de jugadores de cada equipo.

3. Visualice el nombre, la descripción y la categoría de cada elemento de la tabla.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 6, ejercicio 1: Recuperación de Datos mediante SELECT
Escribir y ejecutar sentencias SELECT (objetivo 2 de S6L6)

En este ejercicio, se recuperarán los datos que se almacenan en el sistema de base de datos mediante una sentencia
SELECT.

Parte 1: Devolución de todas las columnas especificadas de una tabla


Al usar la sentencia SELECT * se muestran todos los datos almacenados en las siguientes tablas:

1. customers.

2. teams.

3. items.

Parte 2: Selección de columnas concretas


1. Visualice el número de cliente, el nombre, los apellidos, el correo electrónico y el número de teléfono de los
clientes.

2. Visualice el nombre y el número de jugadores de cada equipo.

3. Visualice el nombre, la descripción y la categoría de cada elemento de la tabla.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 6, ejercicio 2: Recuperación de Datos mediante SELECT
Escribir y ejecutar sentencias SELECT (objetivo 2 de S6L6)

En este ejercicio, se recuperarán los datos que se almacenan en el sistema de base de datos mediante una sentencia
SELECT.

Parte 1: Uso de operadores aritméticos


1. Se ha indicado a los clientes que han de liquidar el saldo actual en un período de 12 meses. Visualice el nombre
del cliente, los apellidos, el saldo actual y el pago mensual.

2. OBL se está planteando dar una tarjeta de regalo a todos sus clientes de 5,00 que se puede utilizar para reducir
su saldo actual. Escriba una consulta que muestre, para todos los clientes, el nombre, los apellidos, el número de
cliente, el saldo actual y el valor de su saldo, menos el valor del regalo.

3. ¿Cuál sería el problema a la hora de implantar este esquema?

Parte 2: Uso de alias de columna


1. Anteriormente realizó una consulta que mostraba el nombre del cliente, los apellidos, el saldo actual y el pago
mensual. Vuelva a escribir la consulta para utilizar First Name,
Last Name, Balance y Monthly Repayments como los alias de columna. Los alias se muestran exactamente como
se describen (mayúsculas/minúsculas).

Parte 3: Uso de cadenas de caracteres literales


1. Escriba una consulta que muestre la información del equipo en el siguiente formato:
El equipo Rockets tiene 25 jugadores y recibe un descuento del 10 por ciento.
Utilice Team Information como alias de columna.

2. ¿Por qué el último equipo no muestra un descuento?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 6, ejercicio 2: Recuperación de Datos mediante SELECT
Escribir y ejecutar sentencias SELECT (objetivo 2 de S6L6)

En este ejercicio, se recuperarán los datos que se almacenan en el sistema de base de datos mediante una sentencia
SELECT.

Parte 1: Uso de operadores aritméticos


1. Se ha indicado a los clientes que han de liquidar el saldo actual en un período de 12 meses. Visualice el nombre
del cliente, los apellidos, el saldo actual y el pago mensual.

2. OBL se está planteando dar una tarjeta de regalo a todos sus clientes de 5,00 que se puede utilizar para reducir
su saldo actual. Escriba una consulta que muestre, para todos los clientes, el nombre, los apellidos, el número de
cliente, el saldo actual y el valor de su saldo, menos el valor del regalo.

3. ¿Cuál sería el problema a la hora de implantar este esquema?

Parte 2: Uso de alias de columna


1. Anteriormente realizó una consulta que mostraba el nombre del cliente, los apellidos, el saldo actual y el pago
mensual. Vuelva a escribir la consulta para utilizar First Name,
Last Name, Balance y Monthly Repayments como los alias de columna. Los alias se muestran exactamente como
se describen (mayúsculas/minúsculas).

Parte 3: Uso de cadenas de caracteres literales


1. Escriba una consulta que muestre la información del equipo en el siguiente formato:
El equipo Rockets tiene 25 jugadores y recibe un descuento del 10 por ciento.
Utilice Team Information como alias de columna.

2. ¿Por qué el último equipo no muestra un descuento?

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
6-6: Recuperación de datos
Prácticas
Ejercicio 1: Recuperación de columnas de tablas

Visión general
En esta práctica, realizará las siguientes tareas en las tablas creadas para la base de datos académica:
• Seleccionar todas las columnas de una tabla
• Seleccionar columnas especificadas de una tabla

Tareas
1. Escriba una consulta simple para ver los datos insertados en las tablas creadas para la base de datos académica.

2. Escriba una consulta para recuperar la calificación de examen de cada alumno para cada examen realizado.

3. Escriba una consulta para comprobar si un alumno puede realizar exámenes en función del número de días que ha asistido a
clase.

4. Visualice el valor de LOGIN_DATE_TIME de cada miembro del profesorado.

5. Muestre el nombre del jefe del departamento de todos los departamentos.

6. Recupere el ID de alumno y el nombre de cada alumno concatenados con texto literal de la siguiente manera:
720: FIRST NAME IS JACK

7. Muestre todos los distintos tipos de examen de la tabla AD_EXAMS.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Fundamentos de bases de datos
6-6: Recuperación de datos
Prácticas
Ejercicio 1: Recuperación de columnas de tablas

Visión general
En esta práctica, realizará las siguientes tareas en las tablas creadas para la base de datos académica:
• Seleccionar todas las columnas de una tabla
• Seleccionar columnas especificadas de una tabla

Tareas
1. Escriba una consulta simple para ver los datos insertados en las tablas creadas para la base de datos académica.

2. Escriba una consulta para recuperar la calificación de examen de cada alumno para cada examen realizado.

3. Escriba una consulta para comprobar si un alumno puede realizar exámenes en función del número de días que ha asistido a
clase.

4. Visualice el valor de LOGIN_DATE_TIME de cada miembro del profesorado.

5. Muestre el nombre del jefe del departamento de todos los departamentos.

6. Recupere el ID de alumno y el nombre de cada alumno concatenados con texto literal de la siguiente manera:
720: FIRST NAME IS JACK

7. Muestre todos los distintos tipos de examen de la tabla AD_EXAMS.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
En la sintaxis:
• SELECT es una lista de una o más columnas.
• * selecciona todas las columnas.
• DISTINCT suprime los duplicados.
• column|expression selecciona la columna o expresión con nombre.
• alias proporciona diferentes cabeceras a las columnas seleccionadas.
• FROM table especifica la tabla que contiene las columnas.
Nota: A lo largo de este curso, las palabras palabra clave, cláusula y sentencia se utilizan de la siguiente
forma:
• Una palabra clave hace referencia a un elemento SQL individual; por ejemplo, SELECT y FROM son
palabras clave.
• Una cláusula es una parte de una sentencia SQL; por ejemplo, SELECT employee_id,
last_name.
• Una sentencia es una combinación de dos o más cláusulas; por ejemplo, SELECT * FROM
employees.

6
7
8
9
10
11
12
Nota: Con los tipos de dato DATE y TIMESTAMP, solo puede utilizar operadores de suma y resta.

13
La columna calculada resultante, salary + 300, no es una nueva columna en la tabla EMPLOYEES;
es solo para visualización. Por defecto, el nombre de una nueva columna procede del cálculo que lo genera
(en este caso, salary + 300).
Nota: El servidor de Oracle ignora los espacios en blanco antes y después del operador aritmético.
Reglas de prioridad
• La multiplicación y división se evalúan antes de la suma y la resta.
• Los operadores de la misma prioridad se evalúan de izquierda a derecha.
• Los paréntesis se utilizan para sustituir la prioridad por defecto o para aclarar la sentencia.

14
El primer ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual multiplicando el salario mensual por 12, más un incentivo de
100 $. La multiplicación se realiza antes que la suma.
El segundo ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual sumando un incentivo mensual de 100 $ al salario mensual y, a
continuación, multiplicando ese subtotal por 12.
Debido a los paréntesis, la suma tiene prioridad sobre la multiplicación.

15
El primer ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual multiplicando el salario mensual por 12, más un incentivo de
100 $. La multiplicación se realiza antes que la suma.
El segundo ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual sumando un incentivo mensual de 100 $ al salario mensual y, a
continuación, multiplicando ese subtotal por 12.
Debido a los paréntesis, la suma tiene prioridad sobre la multiplicación.

16
Las columnas de cualquier tipo de dato pueden contener valores nulos. Sin embargo, algunas restricciones
(NOT NULL y PRIMARY KEY) evitan que se utilicen valores nulos en la columna.

17
18
19
Nota: No se puede hacer referencia a un alias en la lista de columna que contiene la definición del alias. Por
ejemplo, al escribir una sentencia SELECT del siguiente modo, se devuelve un error:
SELECT last_name "Name" , salary*12 "Annual Salary", Annual Salary +100
FROM employees;
ORA-00904: "ANNUAL SALARY": invalid identifier

20
21
22
23
Puede seleccionar cualquier delimitador adecuado, ya sea de un solo byte o multibyte, o bien cualquiera de
los siguientes pares de caracteres:
[ ], { }, ( ) o < >.

24
25
26
27
Puede especificar varias columnas después del cualificador DISTINCT. Ese cualificador afecta a todas las
columnas seleccionadas y el resultado que se muestra es una combinación distinta de las columnas.
SELECT DISTINCT department_id, job_id
FROM employees;
Nota: También puede especificar la palabra clave UNIQUE, que es sinónimo de la palabra clave
DISTINCT.

28
Puede especificar varias columnas después del cualificador DISTINCT. Ese cualificador afecta a todas las
columnas seleccionadas y el resultado que se muestra es una combinación distinta de las columnas.
SELECT DISTINCT department_id, job_id
FROM employees;
Nota: También puede especificar la palabra clave UNIQUE, que es sinónimo de la palabra clave
DISTINCT.

29
30
31
32
33
2
3
4
5
En la sintaxis:
• SELECT es una lista de una o más columnas.
• * selecciona todas las columnas.
• DISTINCT suprime los duplicados.
• column|expression selecciona la columna o expresión con nombre.
• alias proporciona diferentes cabeceras a las columnas seleccionadas.
• FROM table especifica la tabla que contiene las columnas.
Nota: A lo largo de este curso, las palabras palabra clave, cláusula y sentencia se utilizan de la siguiente
forma:
• Una palabra clave hace referencia a un elemento SQL individual; por ejemplo, SELECT y FROM son
palabras clave.
• Una cláusula es una parte de una sentencia SQL; por ejemplo, SELECT employee_id,
last_name.
• Una sentencia es una combinación de dos o más cláusulas; por ejemplo, SELECT * FROM
employees.

6
7
8
9
10
11
12
Nota: Con los tipos de dato DATE y TIMESTAMP, solo puede utilizar operadores de suma y resta.

13
La columna calculada resultante, salary + 300, no es una nueva columna en la tabla EMPLOYEES;
es solo para visualización. Por defecto, el nombre de una nueva columna procede del cálculo que lo genera
(en este caso, salary + 300).
Nota: El servidor de Oracle ignora los espacios en blanco antes y después del operador aritmético.
Reglas de prioridad
• La multiplicación y división se evalúan antes de la suma y la resta.
• Los operadores de la misma prioridad se evalúan de izquierda a derecha.
• Los paréntesis se utilizan para sustituir la prioridad por defecto o para aclarar la sentencia.

14
El primer ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual multiplicando el salario mensual por 12, más un incentivo de
100 $. La multiplicación se realiza antes que la suma.
El segundo ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual sumando un incentivo mensual de 100 $ al salario mensual y, a
continuación, multiplicando ese subtotal por 12.
Debido a los paréntesis, la suma tiene prioridad sobre la multiplicación.

15
El primer ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual multiplicando el salario mensual por 12, más un incentivo de
100 $. La multiplicación se realiza antes que la suma.
El segundo ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de los
empleados. Calcula la compensación anual sumando un incentivo mensual de 100 $ al salario mensual y, a
continuación, multiplicando ese subtotal por 12.
Debido a los paréntesis, la suma tiene prioridad sobre la multiplicación.

16
Las columnas de cualquier tipo de dato pueden contener valores nulos. Sin embargo, algunas restricciones
(NOT NULL y PRIMARY KEY) evitan que se utilicen valores nulos en la columna.

17
18
19
Nota: No se puede hacer referencia a un alias en la lista de columna que contiene la definición del alias. Por
ejemplo, al escribir una sentencia SELECT del siguiente modo, se devuelve un error:
SELECT last_name "Name" , salary*12 "Annual Salary", Annual Salary +100
FROM employees;
ORA-00904: "ANNUAL SALARY": invalid identifier

20
21
22
23
Puede seleccionar cualquier delimitador adecuado, ya sea de un solo byte o multibyte, o bien cualquiera de
los siguientes pares de caracteres:
[ ], { }, ( ) o < >.

24
25
26
27
Puede especificar varias columnas después del cualificador DISTINCT. Ese cualificador afecta a todas las
columnas seleccionadas y el resultado que se muestra es una combinación distinta de las columnas.
SELECT DISTINCT department_id, job_id
FROM employees;
Nota: También puede especificar la palabra clave UNIQUE, que es sinónimo de la palabra clave
DISTINCT.

28
Puede especificar varias columnas después del cualificador DISTINCT. Ese cualificador afecta a todas las
columnas seleccionadas y el resultado que se muestra es una combinación distinta de las columnas.
SELECT DISTINCT department_id, job_id
FROM employees;
Nota: También puede especificar la palabra clave UNIQUE, que es sinónimo de la palabra clave
DISTINCT.

29
30
31
32
33
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 7, ejercicio 1: Restricción de Datos mediante WHERE
Limitar las filas mediante WHERE (objetivo 1 de S6L7)

En este ejercicio, se acotarán los datos que se devuelven en la consulta mediante la adición de una cláusula WHERE para
la sentencia SELECT.

Parte 1: Uso de la cláusula WHERE


1. Mediante el número de cliente único en la cláusula where, visualice todas las columnas de Maria Galant.

2. Visualice el nombre, los apellidos y el número de cliente de todos los clientes que tienen un saldo actual mayor
que 100. Utilice un alias adecuado para las cabeceras de columna.

3. Visualice el ID de pedido, la fecha y hora de todos los pedidos que se realizaron antes del
28 de mayo de 2019. Utilice un alias adecuado para las cabeceras de columna.

Parte 2: Condiciones de rango: operador BETWEEN


1. Visualice el ID de inventario, el coste y el número de unidades usando los alias adecuados para todos los
artículos que tienen un coste de venta entre 3,00 y 15,00.

Parte 3: Condiciones de la inscripción: operador IN


1. Visualice el ID de inventario, el coste y el número de unidades usando los alias adecuados para todos los
artículos que tienen 50, 100, 150 o 200 unidades en stock.

Parte 4: Condiciones de la inscripción: operador NOT IN


1. Visualice el ID de inventario, el coste y el número de unidades usando los alias adecuados para todos los
artículos que no tienen 50, 100, 150 o 200 unidades en stock.

Parte 5: Coincidencia de Patrones: operador LIKE


1. Visualice el número de artículos y el nombre de todos los artículos que tienen un nombre que empieza por "g".
Utilice un alias adecuado para las cabeceras de columna.

Parte 6: Coincidencia de Patrones: combinación de caracteres comodín con el operador LIKE


1. Visualice el número de artículos y el nombre de todos los artículos que tienen un nombre que empieza por "o"
minúscula. Utilice un alias adecuado para las cabeceras de columna.
Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 7, ejercicio 2: Restricción de datos mediante WHERE
Limitar las filas mediante WHERE (objetivo 1 de S6L7)

En este ejercicio, se acotarán los datos que se devuelven en la consulta mediante la adición de una cláusula WHERE para
la sentencia SELECT.

Parte 1: Uso de las condiciones NULL


1. Escriba una consulta que muestre información para los equipos que no reciben un descuento en el siguiente
formato:
El equipo Rovers tiene 25 jugadores y no recibe ningún descuento.
Utilice Team Information como alias de columna.

2. Escriba una consulta que muestre información solo para los equipos que reciben un descuento en el siguiente
formato:
El equipo Rockets tiene 25 jugadores y recibe un descuento del 10 por ciento.
Utilice Team Information como alias de columna.

Parte 2: Operadores lógicos: AND


1. Escriba una consulta que muestre el número de cliente, la línea de dirección 1 y el código postal de los clientes
que viven en el área de Stafford en Liverpool. Utilice Customer Number, Street Address y Postal Code como alias
de columna.

Parte 3: Operadores lógicos: OR


1. Escriba una consulta que muestre el número de cliente, la línea de dirección 1 y el código postal de los clientes
que viven en el área de Stafford o en Liverpool en general.
Utilice Customer Number, Street Address y Postal Code como alias de columna.

Parte 4: Operadores lógicos: NOT Equal To


1. Escriba una consulta que muestre el número de cliente, la línea de dirección 1 y el código postal de los clientes
que no viven en Liverpool. Utilice Customer Number, Street Address y Postal Code como alias de columna.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
6-7: Restricción de datos mediante la sentencia SELECT
Prácticas
Ejercicio 1: Restricción de datos con SELECT

Visión general
En esta práctica, limitará las filas mostradas con:
• La cláusula WHERE
• Los operadores de comparación
• Las condiciones lógicas que utilizan los operadores AND, OR y NOT

Tareas
1. Muestre los detalles del curso para la sesión Spring.

2. Muestre los detalles de los alumnos que han conseguido una puntuación superior a 95.

3. Muestre los detalles de los alumnos que han conseguido una puntuación entre 65 y 70.

4. Muestre a los alumnos que se registraron después del 01 de junio de 2012.

5. Muestre los detalles del curso para los departamentos 10 y 30.

6. Muestre los detalles de los alumnos cuyos nombres empiecen por la letra "J".

7. Muestre los detalles de los alumnos que han optado por los cursos 190 o 193.

8. Muestre los detalles del curso ofrecidos por el departamento 30 para la sesión de otoño (identificador de sesión 200).

9. Muestre los detalles de los cursos no ofertados en la sesión de verano y otoño (ID de sesión 200 y 300).

10. Muestre los detalles del curso para el departamento 20.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
En la sintaxis:
• WHERE restringe la consulta a filas que cumplan con una condición.
• logical expression consta de nombres de columnas, constantes y un operador de
comparación. Especifica una combinación de una o más expresiones y operadores booleanos y
devuelve un valor de TRUE, FALSE o UNKNOWN.
La cláusula WHERE puede comparar valores en columnas, literales, expresiones aritméticas o funciones.
Consta de tres elementos:
• Column name
• Condición de comparación
• Nombre de la columna, constante o lista de valores

6
Nota: No puede utilizar un alias de columna en la cláusula WHERE.

7
8
9
Nota: Los símbolos != y ^= también pueden representar la condición distinto de.

10
Otro ejemplo del uso de operadores de comparación:

SELECT last_name, salary


FROM employees
WHERE hire_date > ‘01-JAN-1998’;

Nota: Al utilizar tipos de dato de fecha o caracteres, el literal debe incluirse entre comillas simples.

11
12
13
Otro ejemplo del uso del operador IN:

SELECT last_name, salary


FROM employees
WHERE job_id IN ('SA_MAN' , 'SA_REP');

Notas: Al utilizar tipos de dato de fecha o caracteres, el literal debe incluirse entre comillas simples.
La columna utilizada para restringir filas no tiene que estar en la cláusula SELECT.

14
Otro ejemplo del uso del operador NOT IN:

SELECT last_name, salary


FROM employees
WHERE job_id NOT IN ('SA_MAN' , 'SA_REP');

Notas: Al utilizar tipos de dato de fecha o caracteres, el literal debe incluirse entre comillas simples.
La columna utilizada para restringir filas no tiene que estar en la cláusula SELECT.

15
En el ejemplo de la diapositiva, la sentencia SELECT devuelve el nombre de la tabla EMPLOYEES para
cualquier empleado cuyo nombre empiece por la letra "S". (tenga en cuenta que se trata de la "S“
mayúscula). Por lo tanto, no se devolverán los nombres que empiecen por "s" minúscula.
El operador LIKE se puede utilizar como método abreviado para algunas comparaciones BETWEEN. El
siguiente ejemplo muestra los apellidos y fechas de contratación de todos los empleados que comenzaron
a trabajar entre enero y diciembre de 2005:
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '%05';

16
El identificador ESCAPE identifica la barra invertida (\) como el carácter de escape. En la sentencia SQL, el
carácter de escape precede al guion bajo (_) y hace que el servidor de Oracle interprete el guion bajo de
forma literal.

17
El identificador ESCAPE identifica la barra invertida (\) como el carácter de escape. En la sentencia SQL, el
carácter de escape precede al guion bajo (_) y hace que el servidor de Oracle interprete el guion bajo de
forma literal.

18
19
20
21
22
23
El operador NOT también se puede utilizar con otros operadores SQL, como BETWEEN, LIKE y NULL.
Estos son algunos ejemplos:
... WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP')
... WHERE salary NOT BETWEEN 10000 AND 15000
... WHERE last_name NOT LIKE '%A%'
... WHERE commission_pct IS NOT NULL

24
25
26
Existen dos condiciones en el ejemplo de la diapositiva para establecer la prioridad del operador AND.
• La primera condición es que el ID de trabajo sea AD_PRES y que el salario sea superior a 15.000 $.
• La segunda condición es que el ID de trabajo sea SA_REP.
Por lo tanto, la sentencia SELECT sería la siguiente: "Seleccionar la fila si un empleado es presidente y
gana más de 15.000 $, o si el empleado es vendedor“.

27
Existen dos condiciones en el ejemplo de la diapositiva para los paréntesis.
• La primera condición es que el ID de trabajo sea AD_PRES o SA_REP.
• La segunda condición es que el salario sea superior a 15.000 $.
Por lo tanto, la sentencia SELECT sería la siguiente: "Seleccionar la fila si un empleado es presidente o
vendedor y si el empleado gana más de 15.000 $".

28
29
30
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 8, ejercicio 1: Ordenamiento de datos mediante ORDER BY
Utilizar la cláusula ORDER BY para ordenar resultados SQL (objetivo 1 de S6L8)

En este ejercicio, se ordenarán los datos que se devuelven en la consulta mediante la adición de una cláusula ORDER BY
al final de la sentencia SELECT.

1. Visualice el nombre del equipo y el número de jugadores en orden alfabético según el nombre del equipo.
Utilice un alias adecuado para las cabeceras de columna.

2. Visualice el nombre del equipo y el número de jugadores en orden descendiente según el número de jugadores.
Utilice un alias adecuado para las cabeceras de columna.

3. Visualice el nombre del equipo y el número de jugadores en orden alfabético según el nombre del equipo.
Utilice Team Name como alias de nombre y Players como número de jugadores. Ordene la salida en orden
descendente según el nombre usando el alias en la cláusula ORDER BY.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 8, ejercicio 2: Ordenamiento de datos mediante ORDER BY

Parte 1: TOP-N-ANALYSIS (objetivo 3 de S6L8)

1. Los clientes se enumeran de manera secuencial y a cada nuevo cliente se le asigna un número mayor. Utilice la
herramienta TOP-N-ANALYSIS para ver solo el nombre y los apellidos de los tres primeros clientes. Visualice el
nombre y los apellidos de los clientes en la misma columna usando Customer Name como alias de columna.

Parte 2: Uso de una variable de sustitución (objetivo 4 de S6L8)

1. Utilice una variable de sustitución que le permitirá introducir el tipo de comisión de los representantes de
ventas. El nombre y los apellidos deben mostrarse en la pantalla para los representantes de ventas que ganan
ese tipo de comisión y la salida debe estar ordenada por el apellido. Utilice un alias adecuado para las cabeceras
de columna.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
6-8: Ordenamiento de datos mediante ORDER BY
Prácticas
Ejercicio 1: Ordenar datos mediante ORDER BY

Visión general
En esta práctica podrá:
• Ordenar filas mediante la cláusula ORDER BY

Tareas
1. Visualice todos los campos de cada uno de los registros en orden ascendente para las siguientes tablas:
a. AD_STUDENTS ordenado por REG_YEAR

b. AD_EXAM_RESULTS ordenado por STUDENT_ID y COURSE_ID

c. AD_STUDENT_ATTENDANCE ordenado por STUDENT_ID

d. AD_DEPARTMENTS ordenado por ID de departamento

2. Muestre el porcentaje de días que se han ausentado los alumnos y ordene los registros según el porcentaje calculado.

3. Muestre los 5 mejores alumnos según las calificaciones de los exámenes.

4. Muestre los detalles principales ordenador por ID de principal.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
Sintaxis:
SELECT expr
FROM table
[WHERE condition(s)]
[ORDER BY {column, expr, numeric_position} [ASC|DESC]];
En la sintaxis:
• ORDER BY especifica el orden en el que se muestran las filas recuperadas.
• ASC ordena las filas en orden ascendente. (Este es el orden por defecto).
• DESC ordena las filas en orden descendente.
– Si no se utiliza la cláusula ORDER BY, el orden no está definido y puede que el servidor de Oracle
no vuelva a recuperar las filas en el mismo orden para la misma consulta. Utilice la cláusula ORDER
BY para mostrar las filas en un orden específico.
– Utilice las palabras clave NULLS FIRST o NULLS LAST para especificar si las filas devueltas
que contengan valores nulos deben aparecer en primer o en último lugar en la secuencia de
ordenamiento.

5
6
El orden por defecto es ascendente:
• Los valores numéricos se muestran con los valores más bajos primero (por ejemplo, de 1 a 999).
• Los valores de fecha se muestran con el valor más antiguo en primer lugar (por ejemplo, 01-01-1992
antes que
01-01-1995).
• Los valores de caracteres se muestran en orden alfabético (por ejemplo, primero la "A" y por último la
"Z").
• Por defecto, los valores nulos se muestran al final para las secuencias ascendentes y al principio para
las secuencias descendentes. Puede cambiar esto si agrega la opción NULLS FIRST o NULLS
LAST.
• También puede ordenar por una columna que no esté en la lista SELECT.
Puede utilizar un alias de columna en la cláusula ORDER BY. El segundo ejemplo de la diapositiva ordena
los datos por salario anual.
Nota: No se debe confundir la palabra clave DESC que se utiliza aquí para la ordenamiento descendente
con la palabra clave DESC utilizada para describir las estructuras de tabla.

7
8
9
10
11
12
13
SQL*Plus o SQL Developer proporciona esta flexibilidad al utilizar un signo & para identificar cada variable
de su sentencia SQL.

14
15
No es necesario que delimite los literales con comillas si utiliza variables de sustitución en APEX.

16
17
18
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 9, ejercicio 1: Unión de Tablas mediante JOIN
Escribir sentencias SELECT usando datos de varias tablas mediante uniones Igualitarias y no igualitarias
(objetivo 1 de S6L9)

En este ejercicio, se escribirán sentencias SELECT para acceder a datos de más de una tabla.

Parte 1: Creación de uniones naturales


1. Visualice toda la información sobre los representantes de ventas y sus direcciones mediante una unión natural.

2. Adapte la consulta de la pregunta anterior de forma que se muestre solo el ID, el nombre, los apellidos, la
dirección 1, la dirección 2, la ciudad, el correo electrónico y el número de teléfono de los representantes de
ventas.

Parte 2: Creación de uniones con la cláusula USING


1. Adapte la respuesta de la consulta anterior para que utilice la cláusula USING en lugar de una unión natural.

2. Visualice toda la información sobre los artículos y su historial de precios mediante la unión de los artículo y las
tablas price_history.

Parte 3: Creación de uniones con la cláusula ON


1. Utilice una cláusula ON para unir la tabla de clientes y representantes de ventas de forma que se muestre el
número, nombre , apellidos, número de teléfono y correo electrónico
del cliente, y el ID, nombre, apellidos y correo electrónico del representante de ventas.
Tendrá que utilizar un alias de tabla en la respuesta porque ambas tablas tienen columnas con el mismo
nombre.

Parte 4: Creación de uniones en 3 direcciones con la cláusula ON


1. A partir de la respuesta de la tarea 3, agregue una unión que permita que el nombre del equipo al que
representa el cliente se incluya en los resultados.

Parte 5: Aplicación de condiciones adicionales a una unión


1. A partir de la respuesta de la tarea 4, agregue una condición adicional para que se muestren solo los resultados
para el cliente con el número - c00001.

Parte 6: Recuperación de registros con uniones no igualitarias


1. Escriba una consulta que muestre el nombre y el importe del artículo con el número im01101045 del 12 de
diciembre de 2016. La salida de la consulta se debe parecer a la siguiente:

El importe de la camisa ese día era de 14,99

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Proyecto de diseño de base de datos
Base de datos de la tienda Oracle Baseball League

Escenario del proyecto:

Usted es una pequeña empresa de consultoría especializada en el desarrollo de bases de datos.


Le acaban de adjudicar un contrato para desarrollar un modelo de datos para un sistema de aplicaciones de bases de
datos de una pequeña tienda denominada Oracle Baseball League (OBL).

La tienda ofrece servicios de venta de conjuntos de béisbol para toda la comunidad. OBL tiene dos tipos de cliente; hay
personas que no pueden adquirir artículos como pelotas, zapatillas, guantes, camisas, camisetas serigrafiadas y
pantalones. Además, los clientes pueden representar a un equipo cuando adquieren uniformes y equipación conjunta.

Los equipos y los clientes individuales son libres de comprar cualquier artículo de la lista de inventario, pero los equipos
obtienen un descuento en el precio de lista según el número de jugadores. Cuando un cliente realiza un pedido,
registramos los artículos de ese pedido en nuestra base de datos.

El equipo de OBL cuenta con tres representantes de ventas que oficialmente solo atienden a equipos, pero se sabe que
gestionan las quejas de los clientes individuales.

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
Sección 6, lección 9, ejercicio 2: Unión de tablas mediante JOIN
Escribir sentencias SELECT usando datos de varias tablas mediante uniones Igualitarias y no igualitarias
(objetivo 1 de S6L9)

Parte 1: Utilizar una autounión para unir una tabla a sí misma (objetivo 2 de S6L9)

1. Escriba una consulta que muestre quién es el supervisor para cada uno de los representantes de ventas. La
información se debe mostrar en dos columnas: la primera columna será el nombre y apellidos del representante
de ventas y la segunda será el nombre y apellidos del supervisor. Los alias de columna deben ser Rep y
Supervisor.

Parte 2: Utilizar uniones OUTER (objetivo 3 de S6L9)

1. Escriba una consulta que muestre toda la información de clientes y equipos, incluso si no
hay ninguna coincidencia con la tabla de la izquierda (equipo).

Parte 3: Generación de un producto cartesiano (objetivo 4 de S6L9)

1. Cree un producto cartesiano entre las tablas de clientes y representantes de ventas.

Copyright © 2020, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y/o sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios

2
Fundamentos de bases de datos
6-9: Unión de Tablas mediante JOIN
Prácticas
Ejercicio 1: Usar JOIN en consultas SQL

Visión general
En esta práctica, deberá:
• Acceder a los datos de más de una tabla con uniones igualitarias y no igualitarias
• Utilizar uniones OUTER para visualizar datos que normalmente no cumplen una condición de unión
• Generar un producto cartesiano

Tareas
1. Muestre los diferentes cursos que ofertan los departamentos de la escuela.

2. Muestre los cursos que se ofertan en otoño.

3. Muestre los detalles del curso, el departamento que ofrece los cursos y los alumnos que se han inscrito en esos cursos.

4. Muestre los detalles del curso, el departamento que ofrece los cursos y los alumnos que se han inscrito en esos cursos del
departamento 20.

5. Escriba una consulta para mostrar los detalles de las calificaciones obtenidas por los alumnos que han optado por el curso
con COURSE_ID en el rango de 190 a 192.

6. Recupere las filas de la tabla AD_EXAM_RESULTS incluso si no hay ningún registro que coincida en la tabla AD_COURSE.

7. ¿Qué salida se debe generar cuando se ejecuta la sentencia especificada?


SELECT * FROM AD_EXAMS
CROSS JOIN AD_EXAM_TYPES;

Copyright © 2020 Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser marcas
comerciales de sus respectivos propietarios.
2
3
4
5
6
En la sintaxis:
• table1.column indica la tabla y la columna desde las que se recuperan los datos.
• NATURAL JOIN une dos tablas basándose en el mismo nombre de la columna.
• JOIN table2 USING column_name realiza una unión igualitaria basándose en el nombre de la
columna.
• JOIN table2 ON table1.column_name = table2.column_name realiza una unión
igualitaria basándose en la condición de cláusula ON.
• LEFT/RIGHT/FULL OUTER se utiliza para realizar uniones OUTER.
• CROSS JOIN devuelve un producto cartesiano de las dos tablas.

7
8
Directrices

• El nombre de tabla se especifica por completo, seguido de un


espacio y del alias de tabla. Por ejemplo, a la tabla EMPLOYEES se
le puede proporcionar el alias e, y a la tabla DEPARTMENTS el alias
d.
• Los alias de tabla pueden tener hasta 30 caracteres de longitud,
pero los alias más cortos son mejores que los largos.
• Si se utiliza un alias de tabla para un nombre de tabla determinado
en la cláusula FROM, el alias de tabla se deberá sustituir por el
nombre de tabla mediante la sentencia SELECT (pero no en la
cláusula USING; esto se analizará más adelante).
• Los alias de tabla deben ser significativos.
• El alias de tabla es válido solo para la sentencia SELECT actual.

9
10
11
12
13
14
Por ejemplo, la siguiente sentencia es válida:
SELECT l.city, d.department_name
FROM locations l JOIN departments d
USING (location_id)
WHERE location_id = 1400;

Las columnas comunes a ambas tablas, pero que no se utilizan en la cláusula USING, deben tener como
prefijo un alias de tabla, de lo contrario se devolverá el error “column ambiguously defined”.
En la siguiente sentencia, manager_id está presente tanto en la tabla EMPLOYEES como en la tabla
DEPARTMENTS; si manager_id no tiene un alias de tabla como prefijo, se devuelve el error "column
ambiguously defined".
La siguiente sentencia es válida:
SELECT first_name, d.department_name, d.manager_id
FROM employees e JOIN departments d USING (department_id)
WHERE department_id = 50;

15
16
17
18
Una unión en tres direcciones es una unión de tres tablas. El optimizador decide la ejecución de la unión,
así como el orden. Aquí, la primera unión que se realiza es EMPLOYEES JOIN DEPARTMENTS. La
primera condición de unión puede hacer referencia a las columnas de EMPLOYEES y DEPARTMENTS,
pero no puede hacer referencia a las columnas de LOCATIONS. La segunda condición de unión puede
hacer referencia a las columnas de las tres tablas.
El ejemplo de código de la diapositiva también se puede realizar con la cláusula USING:
SELECT e.employee_id, l.city, d.department_name
FROM employees e
JOIN departments d
USING (department_id)
JOIN locations l
USING (location_id);

19
20
21
22
Puede que a veces necesite unir una tabla consigo misma. Para buscar el nombre de cada supervisor del
empleado, necesita unir la tabla EMPLOYEES consigo misma o realizar una unión automática. Por ejemplo,
para buscar el nombre del supervisor de Kochar:
• Busque a Kochar en la tabla EMPLOYEES consultando la columna LAST_NAME.
• Busque el número del supervisor de Kochar consultando la columna MANAGER_ID. El número del
supervisor de Kochar es 100.
• Busque el nombre del supervisor con un EMPLOYEE_ID de 100 consultando la columna LAST_NAME.
El número de empleado de King es 100, por lo que King en el supervisor de Kochar.
Durante este proceso, busca dos veces en la tabla. La primera vez, cuando consulta la tabla para buscar a
Kochar en la columna LAST_NAME y el valor MANAGER_ID de 100. La segunda vez, cuando consulta la
columna EMPLOYEE_ID para buscar 100 y la columna LAST_NAME para buscar King.

23
24
Una unión no igualitaria es una condición de unión que contiene algún operador diferente del operador de
igualdad.
La relación entre la tabla EMPLOYEES y JOB_GRADES es un ejemplo de unión no igualitaria.
Los rangos de la columna SALARY en la tabla EMPLOYEES oscilan entre los valores en las columnas
LOWEST_SAL y HIGHEST_SAL de la tabla JOB_GRADES. Por lo tanto, se pueden agregar grados a los
empleados según su salario. La relación se obtiene mediante un operador distinto del operador de igualdad
(=).

25
Una unión no igualitaria es una condición de unión que contiene algún operador diferente del operador de
igualdad.
La relación entre la tabla EMPLOYEES y JOB_GRADES es un ejemplo de unión no igualitaria.
Los rangos de la columna SALARY en la tabla EMPLOYEES oscilan entre los valores en las columnas
LOWEST_SAL y HIGHEST_SAL de la tabla JOB_GRADES. Por lo tanto, se pueden agregar grados a los
empleados según su salario. La relación se obtiene mediante un operador distinto del operador de igualdad
(=).

26
Es importante tener en cuenta que todos los empleados aparecerán solo una vez al ejecutar esta consulta.
Ningún empleado se repite en la lista por los siguientes motivos:
• Ninguna de las filas de la tabla JOB_GRADES contiene grados que se solapen. Es decir, el valor de
salario de un empleado solo puede oscilar entre los valores de salario bajo y alto de una de las filas de
la tabla de grados de salario.
• Todos los salarios de los empleados oscilan entre los límites proporcionados por la tabla de grados de
cargo. Es decir, ningún empleado gana menos que el valor más bajo de la columna LOWEST_SAL o
más que el valor más alto de la columna HIGHEST_SAL.

En el ejemplo de la diapositiva se han especificado los alias de tabla por motivos de rendimiento, no por
una posible ambigüedad.

27
Si una fila no cumple una condición de unión, la fila no aparece en el resultado de consultas.
En el ejemplo de la diapositiva, se utiliza una condición de unión igualitaria simple en las tablas
EMPLOYEES y DEPARTMENTS para devolver el resultado a la derecha.
SELECT employees.department_id, department_name, last_name
from employees, departments
where employees.department_id = departments.department_id;

El juego de resultados no contiene:


• El ID de departamento 190, porque no hay ningún empleado con dicho ID registrado en la tabla
EMPLOYEES
• El empleado con apellido Grant, porque a este empleado no se le ha asignado un ID de departamento
Para devolver el registro de departamento que no tiene ningún empleado, o los empleados que no tienen
un departamento asignado, puede utilizar la unión OUTER.

28
29
30
31
32
Un producto cartesiano suele generar un gran número de filas y el resultado es poco útil, salvo para
determinadas pruebas en las que necesite generar un gran número de filas para simular una cantidad
razonable de datos.

33
34
La técnica CROSS JOIN se puede aplicar de forma útil en algunas situaciones. Por ejemplo, para devolver
el coste de mano de obra total por oficina por mes, incluso si el mes X no tiene ningún coste de mano de
obra, puede realizar una unión cruzada de oficinas con la tabla de todos los meses.
Es una práctica aconsejable declarar de forma explícita CROSS JOIN en SELECT si desea crear un
producto cartesiano. Por lo tanto, queda muy claro que desea que esto ocurra y que no se trata del
resultado de la falta de uniones.

35
36
37

También podría gustarte