0% encontró este documento útil (0 votos)
61 vistas6 páginas

Ejercicio Tienda Postgresql

Este documento describe los pasos para crear una base de datos para una tienda de productos electrónicos, incluyendo la definición de dominios, tipos, tablas y la inserción de datos de ejemplo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
61 vistas6 páginas

Ejercicio Tienda Postgresql

Este documento describe los pasos para crear una base de datos para una tienda de productos electrónicos, incluyendo la definición de dominios, tipos, tablas y la inserción de datos de ejemplo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

Este ejercicio te guiará a través de la creación paso a paso de la base de datos para una tienda de

productos electrónicos, empezando desde la definición de dominios y tipos hasta la creación de las
tablas con sus respectivas relaciones. Crea un script sql que contenga todas las instrucciones tanto
de creación de los tipos y tablas como la inserción de datos.

Desde la carpeta de postgres, ejecuta el comando “docker compose up” para que se inicie los
contenedores con la base de datos PostgreSQL y la herramienta administrativa “pgAdmin4”.

Abre un navegador y accede a la dirección “http://localhost:8080”, donde podrás usar la


herramienta pgAdmin4.

Crea una base de datos llamada “tienda” con pgAdmin4, abre un editor SQL que usarás para ir
editando y ejecutando el script que creará las tablas y tipos en esta base de datos.
Ejercicio: Creación de una Base de Datos para una
Tienda de Productos Electrónicos
En algunos casos se indica parte de la solución debiendo sustituir ?? por lo que corresponda.

Parte 1: Creación de Dominios y Tipo Enumerado


1. Crea los siguientes dominios y el tipo enumerado en PostgreSQL:
• type_cantidad_dinero como un dominio numérico que acepta hasta 8 dígitos,
2 de los cuales son decimales y no puede ser negativo. Lo usaremos para definir los
campos donde almacenar el precio de los productos, el total de las facturas, etc.

CREATE DOMAIN type_cantidad_dinero AS NUMERIC(8,2)


CHECK (VALUE >= ??);

• type_pulgadas como un dominio entero que acepta valores entre 5 y 120. Lo


usaremos para almacenar el tamaño de los televisores.

CREATE DOMAIN type_pulgadas AS ??


CHECK (VALUE >= 5 AND ??);

• eficiencia_energetica como un dominio de caracteres que acepta valores


'A', 'B', 'C', 'D', 'E', o 'F'.

CREATE DOMAIN eficiencia_energetica AS ??


?? (?? IN ('A', 'B', 'C', 'D', 'E', 'F'));

• type_divisa como un tipo enumerado con valores 'USD', 'EUR', 'MXN', 'CAD',
'JPY'.

CREATE TYPE type_divisa AS ENUM (


'USD',
'EUR',
??
);

• type_telefono para números de teléfonos. Lo definiremos usando expresiones


regulares un número de teléfono con un formato específico (9 dígitos y el primero
no puede ser 0):

CREATE DOMAIN type_telefono AS CHAR(9)


CHECK (VALUE ~ '^[1-9][0-9]{8}$');

Explicando la expresión regular ^[1-9][0-9]{8}$:


1. ^ indica el comienzo del string.
2. [1-9] significa que el primer dígito debe estar en el rango del 1 al 9, excluyendo el 0.
3. [0-9]{8} indica que después del primer dígito, deben seguir exactamente 8 dígitos
adicionales del 0 al 9.
4. $ indica el final del string.
5. Por lo tanto, este dominio type_telefono permitirá valores de texto de longitud 9 que
cumplan con el formato deseado para un número de teléfono válido en el que el primer
dígito no sea 0 y los siguientes 8 dígitos puedan ser cualquier número del 0 al 9.

Parte 2: Creación de Tipo Compuesto


2. Crea un tipo compuesto llamado type_dinero que consista en:
• Una cantidad de dinero usando el dominio type_cantidad_dinero.
• Una divisa usando el tipo enumerado type_divisa.
CREATE TYPE type_dinero AS (
cantidad ??,
divisa ??
);

Cuando definimos tipos complejos no podemos especificar restricciones. Por ejemplo, no podemos
especificar “cantidad check (cantidad >= 0)”.

Parte 3: Creación de Tablas


3. Crea las siguientes tablas en la base de datos:
• clientes:
• id como un número de serie (SERIAL) y clave primaria (PRIMARY KEY).
• nombre como una cadena de texto (VARCHAR) de longitud máxima 20, no
puede ser nulo (NOT NULL).
• apellido como una cadena de texto (VARCHAR) de longitud máxima 20, no
puede ser nulo (NOT NULL).
• email como un campo de texto (TEXT) para almacenar direcciones de correo
electrónico.
• telefono campo almacenar números de teléfono.

CREATE TABLE clientes (


id SERIAL PRIMARY KEY,
nombre varchar(20) NOT NULL,
apellido varchar(20),
email TEXT,
telefono type_telefono
);

• productos:
• id como un número de serie (SERIAL) y clave primaria (PRIMARY KEY).
• nombre como una cadena de texto (VARCHAR) de longitud máxima 20, no
puede ser nulo (NOT NULL).
• descripcion como un campo de texto (TEXT) para describir el producto.
• precio como el tipo compuesto type_dinero para representar el precio del
producto.
• televisores (que hereda de productos):
• tamano como el dominio type_pulgadas para representar el tamaño del
televisor en pulgadas.
• resolucion como un campo de texto (TEXT) para describir la resolución del
televisor.
• eficiencia como el dominio eficiencia_energetica para representar la
eficiencia energética del televisor.
CREATE TABLE televisores (
tamano type_pulgadas,
resolucion TEXT,
eficiencia eficiencia_energetica
) INHERITS (??);

• facturas:
• id como un número de serie (SERIAL) y clave primaria (PRIMARY KEY).
• cliente_id como un número entero (INTEGER) que hace referencia al id del
cliente en la tabla clientes.
• fecha como un campo de fecha y hora (TIMESTAMP) con el valor por
defecto (DEFAULT) como la fecha actual.
• total como el tipo compuesto type_dinero para representar el total de la
factura. Por defecto 0 euros (EUR)

CREATE TABLE facturas (


id ??,
cliente_id INTEGER REFERENCES clientes(??),
fecha TIMESTAMP DEFAULT NOW(),
total type_dinero DEFAULT (0, ??)
);
• detalles_factura:
• factura_id como un número entero (INTEGER) que hace referencia al id de
la factura en la tabla facturas.
• producto_id como un número entero (INTEGER) que hace referencia al id
del producto en la tabla productos.
• cantidad como un número entero (INTEGER) que representa la cantidad del
producto en la factura, debe ser mayor que 0.
• subtotal como el tipo compuesto type_dinero para representar el subtotal de
la línea en la factura.
• La clave primaria es el par de columnas factura_id y producto_id.
Parte 4: Inserción de datos
Utilizando la base de datos que hemos creado, completa las siguientes tareas de inserción de datos.
Asegúrate de seguir las restricciones y formatos especificados en la definición de las tablas y
dominios.

Inserta al menos 3 clientes en la tabla clientes con la siguiente información:


• Nombre, Apellido, Email, Teléfono
• María, Pérez, [email protected], 912345678
• Juan, Gómez, [email protected], 657894321
• Ana, López, [email protected], 778945612
Inserta al menos 5 productos en la tabla productos con la siguiente información: Nombre,
Descripción, Precio
• TV Samsung 4K, Televisor de 55 pulgadas con resolución 4K, $799.99 USD
• iPhone 13, Teléfono móvil con cámara de alta resolución, $999.99 USD
• Laptop Lenovo, Laptop ligera y potente para trabajo y estudio, $649.99 USD
• Consola PlayStation 5, Última generación de consolas de videojuegos, $499.99 USD
• Cámara Canon EOS, Cámara réflex digital de alta calidad, $899.99 USD
Inserta al menos 2 televisores en la tabla televisores que heredan de productos con la siguiente
información: Tamaño, Resolución, Eficiencia Energética
• 65, Ultra HD, A
• 50, Full HD, B
Inserta al menos 2 facturas en la tabla facturas con la siguiente información: Cliente ID, Fecha,
Total
• María Pérez, Fecha actual, $1999.98 USD

insert into facturas(cliente_id, total) values (1, (1999.98, ‘USD’));

• Juan Gómez, Fecha actual, $1499.97 USD


Completa las tablas detalles_factura con al menos 4 detalles de factura relacionados con las facturas
que has creado. Asegúrate de incluir los factura_id, producto_id, cantidad, y subtotal
correspondientes.
PARTE 5: Consultas
1) Mostrar todos los productos

2) Mostrar todos los televisores

3) ¿Qué muestra la siguiente consulta? ¿Qué significa “only”?

select * from only productos;

4) Mostrar todas las facturas cuyo total se encuentra especificado en euros

select * from facturas where (total).divisa = ‘EUR’;

5) Obtener los productos con un precio superior a 100 Euros

También podría gustarte