Juan Daniel Ventura Alfaro
Diego Fernando Trujillo Alvarez
Wilmer Yesid Bautista Velandia
Construir el contenedor donde vivirá toda la información de un proyecto es el paso más importante antes de modelar cualquier estructura de datos. Con apenas cinco palabras se puede crear una base de datos en PostgreSQL y comenzar a trabajar de inmediato. A continuación se explica cómo hacerlo, cómo verificar que estás conectado al lugar correcto y cómo poblar las tablas con datos reales.
¿Cómo se crea una base de datos en PostgreSQL desde PgAdmin?
El punto de partida es cambiar del explorador de objetos al query tool [0:18]. Este botón, ubicado junto al explorador, abre el editor donde se escriben y ejecutan sentencias SQL.
Una vez dentro del query tool, la instrucción es directa:
sql CREATE DATABASE tienda_latam;
Para ejecutarla basta con seleccionar la línea y presionar el botón play o la tecla F5 [1:00]. PgAdmin confirma de inmediato que la base de datos fue creada correctamente.
¿Cómo verificar que la base de datos existe?
La verificación puede hacerse de dos formas:
SELECT current_database(); dentro del query tool [1:40].¿Por qué current_database puede devolver un resultado incorrecto?
Si se abrió el query tool desde el servidor general, la función current_database() devolverá postgres en lugar de tienda_latam [1:55]. Esto sucede porque la sesión del editor está conectada a la base de datos predeterminada.
La solución es sencilla: en el explorador de objetos, hacer clic derecho sobre tienda_latam y seleccionar la opción Query Tool [2:10]. De esta manera se abre una nueva pestaña ya conectada a la base correcta. Al volver a ejecutar SELECT current_database();, el resultado será tienda_latam [2:30].
Este hábito de verificar siempre la base de datos activa antes de escribir cualquier sentencia es fundamental para evitar errores en producción.
¿Cómo crear las tablas y poblarlas con datos?
Con la conexión confirmada, el siguiente paso es crear las tablas del modelo. Las sentencias CREATE TABLE se ejecutan en el orden establecido en la documentación del curso [2:45]. Tras ejecutarlas, un refresh en el explorador de objetos muestra todas las tablas creadas:
¿Cómo importar datos CSV con el asistente de PgAdmin?
En lugar de escribir cada INSERT manualmente, PgAdmin ofrece un asistente de importación/exportación de datos [3:20]. El proceso para la tabla categorías es el siguiente:
categoria_id y nombre_categoria) y las que admiten valores nulos (como descripcion) [3:50].El concepto de columnas no nulas se refiere a aquellas que tienen la restricción NOT NULL, lo que significa que cada fila debe contener un valor obligatorio en esos campos.
¿Qué pasos seguir para completar el modelo?
El mismo procedimiento de importación se repite para cada una de las tablas restantes. Los archivos CSV necesarios están disponibles como recursos adjuntos. Una vez importados todos los datos, la verificación final se realiza con sentencias SELECT sobre cada tabla para confirmar que la carga fue exitosa.
Compartí tus resultados del SELECT en los comentarios y contá si encontraste algún detalle durante la importación.
Juan Daniel Ventura Alfaro
Diego Fernando Trujillo Alvarez
Wilmer Yesid Bautista Velandia
Jefred Bedoya
Elmer Ernesto Domínguez Escobar
Cristian camilo Orjuela Rodríguez
Marcello Modispacher
Carlos Andrés García Mendoza
santiago tadeo robles amaro
Juan David Jiménez López
Alonso Díaz
Jairo Sánchez Sánchez
David Ospina Benítez
David Alejandro Santana Bejarano
Nicol Bibiana Barrera Mendieta
Marcela Lerma
Janeth Griselda Bravo Morales
Rodrigo Castro Díaz
Javier Ladino
Camila Mayo Osorio
LUIS EDUARDO NUNEZ
Alex Fernando Martínez Riascos
Mariana Rodríguez Ospina
Jhon Alexander Mosquera Vanegas
Jose Guillermo Sepulveda perez
Osvaldo George
Genesis Juarez
pablo rivas
Eliana liseth Quiñones
Hola, les dejo el código para que lo comparen, lo hice yo mismo puesto que en los recursos no esta completo el código.
CREATE TABLE IF NOT EXISTS paises (
paisID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
CodigoPais VARCHAR(5) NOT NULL,
NombrePais Varchar(50) NOT NULL,
Continente Varchar(50) Not Null
);
CREATE TABLE IF NOT EXISTS categorias (
CategoriaID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
NombreCategoria VARCHAR(50) NOT NULL,
Descripcion TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS tipos_cliente (
TipoClienteID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
NombreTipo VARCHAR(50) NOT NULL UNIQUE,
Descripcion TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS sucursales (
SucursalID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
NombreSucursal VARCHAR(150) NOT NULL,
Ciudad Varchar(100),
PaisID Integer References Paises(paisID),
DireccionCompleta TEXT NOT NULL,
Activo Boolean NOT NULL DEFAULT TRUE
);
CREATE TABLE IF NOT EXISTS empleados (
EmpleadoID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
Nombre VARCHAR(30) NOT NULL,
Apellido VARCHAR(30) NOT NULL,
Email Varchar(100) NOT NULL UNIQUE,
SucursalID Integer References sucursales(SucursalID),
FechaIngreso DATE,
Cargo VARCHAR(50) NOT NULL,
Activo Boolean NOT NULL DEFAULT TRUE
);
CREATE TABLE IF NOT EXISTS clientes (
ClienteID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
Nombre VARCHAR(30) NOT NULL,
Apellido VARCHAR(30) NOT NULL,
Email Varchar(100) NOT NULL UNIQUE,
Telefono Varchar(50) NOT NULL,
paisID INTEGER REFERENCES paises(paisId),
Ciudad Varchar(50) NOT NULL,
TipoClienteID Integer References tipos_cliente(tipoClienteID),
FechaRegistro DATE,
Activo Boolean NOT NULL DEFAULT TRUE
);
CREATE TABLE IF NOT EXISTS productos (
ProductoID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
CodigoProducto VARCHAR(30) NOT NULL UNIQUE,
NombreProducto VARCHAR(100) NOT NULL,
categoriaId INTEGER REFERENCES categorias(categoriaID),
precio Numeric(6,2) NOT NULL,
Stock Integer,
Descripcion Text,
Activo Boolean NOT NULL DEFAULT TRUE
);
CREATE TABLE IF NOT EXISTS pedidos (
PedidoID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
clienteid INTEGER REFERENCES clientes(clienteid),
sucursalid INTEGER REFERENCES sucursales(sucursalid),
empleadoid INTEGER REFERENCES empleados(empleadoid),
fechapedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
estado VARCHAR(30) NOT NULL,
total Numeric(5,2),
notas Text
);
CREATE TABLE IF NOT EXISTS detalle_pedidos(
detalleid INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pedidoid INTEGER REFERENCES pedidos(pedidoid),
productoid INTEGER REFERENCES productos(productoid),
cantidad INTEGER,
precioUnitario NUMERIC(10,2)
)
Un error que me encontré al tratar de importar los datos con esta estructura es en la tabla de pedidos, ya que el campo total Numeric(5,2) en el .cvs hay valores que no caben, por lo que a mi me tocó modificar y hacerlo más grande total Numeric(10,2), con ese cambio ya pude importar todos los datos sin problema.
Gracias Juan
Script Para la creacion de todas las tablas
-- ========================= -- TABLA: Paises -- ========================= CREATE TABLE Paises ( PaisID INT PRIMARY KEY, CodigoPais VARCHAR(5) NOT NULL, NombrePais VARCHAR(100) NOT NULL, Continente VARCHAR(100) NOT NULL ); -- ========================= -- TABLA: Categorias -- ========================= CREATE TABLE Categorias ( CategoriaID INT PRIMARY KEY, NombreCategoria VARCHAR(150) NOT NULL, Descripcion TEXT ); -- ========================= -- TABLA: TiposCliente -- ========================= CREATE TABLE TiposCliente ( TipoClienteID INT PRIMARY KEY, NombreTipo VARCHAR(50) NOT NULL, Descripcion TEXT ); -- ========================= -- TABLA: Sucursales -- ========================= CREATE TABLE Sucursales ( SucursalID INT PRIMARY KEY, NombreSucursal VARCHAR(150) NOT NULL, Ciudad VARCHAR(100) NOT NULL, PaisID INT NOT NULL, DireccionCompleta TEXT, Activo BOOLEAN NOT NULL, CONSTRAINT fk_sucursal_pais FOREIGN KEY (PaisID) REFERENCES Paises(PaisID) ); -- ========================= -- TABLA: Empleados -- ========================= CREATE TABLE Empleados ( EmpleadoID INT PRIMARY KEY, Nombre VARCHAR(100) NOT NULL, Apellido VARCHAR(100) NOT NULL, Email VARCHAR(150) UNIQUE NOT NULL, SucursalID INT NOT NULL, FechaIngreso DATE NOT NULL, Cargo VARCHAR(100), Activo BOOLEAN NOT NULL, CONSTRAINT fk_empleado_sucursal FOREIGN KEY (SucursalID) REFERENCES Sucursales(SucursalID) ); -- Tabla: Clientes CREATE TABLE Clientes ( ClienteID INT PRIMARY KEY, Nombre VARCHAR(100), Apellido VARCHAR(100), Email VARCHAR(150), Telefono VARCHAR(20), PaisID INT, Ciudad VARCHAR(100), TipoClienteID INT, FechaRegistro DATE, Activo INT ); -- Tabla: Productos CREATE TABLE Productos ( ProductoID INT PRIMARY KEY, CodigoProducto VARCHAR(50), NombreProducto VARCHAR(150), CategoriaID INT, Precio DECIMAL(10, 2), Stock INT, Descripcion TEXT, Activo INT ); -- Tabla: Pedidos CREATE TABLE Pedidos ( PedidoID INT PRIMARY KEY, ClienteID INT, SucursalID INT, EmpleadoID INT, FechaPedido TIMESTAMP, Estado VARCHAR(50), Total DECIMAL(10, 2), Notas TEXT, CONSTRAINT fk_cliente FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID) ); -- Tabla: DetallePedidos CREATE TABLE DetallePedidos ( DetalleID INT PRIMARY KEY, PedidoID INT, ProductoID INT, Cantidad INT, PrecioUnitario DECIMAL(10, 2), CONSTRAINT fk_pedido FOREIGN KEY (PedidoID) REFERENCES Pedidos(PedidoID), CONSTRAINT fk_producto FOREIGN KEY (ProductoID) REFERENCES Productos(ProductoID) );
GRACIIIAASSS!!
gracias :)
Me pasó similar hablando de los errores tratando de importar los datos. Lo cual se debe porque la estructura de tabla que creamos en Postgresql debe ser identica a la del archivo .csv que vamos a importar.
Pero me gustó. Me esforzó a hacer el trabajo manual y entender mejor la lógica.
Compañeros les comparto mi codigo de la tablas si alguien llego aquí sin el code completo o q se le haya borrado como a mi.
Se utilizó "GENERATED BY DEFAULT AS IDENTITY" en lugar de "GENERATED ALWAYS". Por qué Si usamos "ALWAYS", PostgreSQL se pone estricto y NO permite insertar IDs manualmente. Esto hace que exploten las importaciones de los archivos .CSV que ya traen sus propios números de ID.
CREATE TABLE paises( pais_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, codigo VARCHAR(3) NOT NULL UNIQUE, nombre TEXT NOT NULL UNIQUE, continente TEXT ); CREATE TABLE sucursales( sucursal_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nombre_sucursal TEXT NOT NULL, ciudad TEXT NOT NULL, pais_id INTEGER NOT NULL REFERENCES paises(pais_id), direccion TEXT NOT NULL, estado BOOLEAN NOT NULL ); CREATE TABLE empleados( empleado_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nombre TEXT NOT NULL, apellido TEXT NOT NULL, email TEXT NOT NULL, sucursal_id INTEGER NOT NULL REFERENCES sucursales(sucursal_id), fecha_ingreso DATE NOT NULL, cargo TEXT, estado BOOLEAN NOT NULL ); CREATE TABLE tipos_clientes( tipo_cliente_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nombre_tipo TEXT NOT NULL UNIQUE, descripcion TEXT ); CREATE TABLE clientes( cliente_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nombre TEXT NOT NULL, apellido TEXT NOT NULL, email VARCHAR(100) NOT NULL UNIQUE, telefono VARCHAR(20), pais_id INTEGER NOT NULL REFERENCES paises(pais_id), ciudad TEXT NOT NULL, tipo_cliente_id INTEGER NOT NULL REFERENCES tipos_clientes(tipo_cliente_id), fecha_registro DATE NOT NULL DEFAULT CURRENT_DATE, activo BOOLEAN NOT NULL DEFAULT TRUE ); CREATE TABLE categorias( categoria_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, nombre_categoria TEXT NOT NULL UNIQUE, descripcion TEXT ); CREATE TABLE productos( producto_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, codigo TEXT NOT NULL UNIQUE, nombre TEXT NOT NULL, categorias_id INTEGER NOT NULL REFERENCES categorias(categoria_id), precio NUMERIC(10,2) NOT NULL, stock INTEGER, descripcion TEXT NOT NULL, estado BOOLEAN NOT NULL DEFAULT TRUE ); CREATE TABLE pedidos( pedido_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, cliente_id INTEGER NOT NULL REFERENCES clientes(cliente_id), sucursal_id INTEGER NOT NULL REFERENCES sucursales(sucursal_id), empleado_id INTEGER REFERENCES empleados(empleado_id), fecha DATE NOT NULL DEFAULT CURRENT_DATE, estado TEXT NOT NULL DEFAULT TRUE, total NUMERIC(10,2), notas TEXT ); CREATE TABLE detalle_pedidos( detalle_id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY, pedido_id INTEGER NOT NULL REFERENCES pedidos(pedido_id), producto_id INTEGER NOT NULL REFERENCES productos(producto_id), cantidad INTEGER NOT NULL DEFAULT 1, precio NUMERIC(10,2) NOT NULL );
Para la importación no se le olvide importa archivo . csv uno por uno y por orden
Gracias me funcionó
Eres grande hermano (@Santiago). Gracias por compartir el script completo, además de la recomendación de importación en orden 👌🏼 Invertí poco más de una hora agregando columnas adicionales a los archivos .csv sin éxito, por lo que acudí a tu post (no se me ocurrió antes enfocarme en el código).
En efecto, el código original (CREATE TABLE x, y, z...) no coincidía con el contenido de la mayoría de los archivos. Si tal detalle fue intencional, me parece que fue una excelente decisión, ya que es un estímulo para esforzarnos a identificar problemas y encontrar soluciones. Además, estoy seguro que en entornos profesionales los datos no siempre se encuentran "limpios" u ordenados 🙌🏼
Algo que me pasó es que no me dejaba importar las tablas y fue porque no lo hice en orden, como tenemos ciertas PK con GENERATED ALWAYS AS.. esto crea dependencias, Postgres genera el ID él mismo y prohíbe que insertes un valor manual y los CSV traen el ID explícito. Al intentar meter esos IDs en una columna GENERATED ALWAYS, Postgres rechaza cada fila y genera un error.
Para evitarlo debemos importar las tablas secuencialmente :
01 → paises 06 → clientes (o el orden que tengan tus números)
02 → categorias 07 → productos
03 → tipos_cliente 08 → pedidos
04 → sucursales 09 → detalle_pedidos
05 → empleados
Gracias Jairo, justo estaba teniendo el mismo problema... gracias!
Pongan los recursos en la misma clase!!
Hola, les comparto el código para que comparen.
CREATE DATABASE tienda_latam()
CREATE TABLE paises (
pais_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
codigoPais VARCHAR (2) NOT NULL,
nombrePais VARCHAR (20) NOT NULL,
continente VARCHAR (50) NOT NULL
);
CREATE TABLE categorias (
categoria_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombreCategoria VARCHAR (50) NOT NULL,
descripcion VARCHAR (100) NOT NULL
);
CREATE TABLE tiposCliente (
tipoCliente_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombretipo VARCHAR (20) NOT NULL,
descripcion VARCHAR (100) NOT NULL
);
CREATE TABLE sucursales (
sucursal_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombreSucursal VARCHAR (100) NOT NULL,
ciudad VARCHAR (30) NOT NULL,
pais_ID INTEGER NOT NULL REFERENCES paises(pais_ID),
direccionCompleta VARCHAR (100) NOT NULL,
activo BOOLEAN DEFAULT TRUE
);
CREATE TABLE empleados (
empleado_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre VARCHAR (50) NOT NULL,
apellido VARCHAR (50) NOT NULL,
email VARCHAR (100) NOT NULL,
sucursal_ID INTEGER NOT NULL REFERENCES sucursales (sucursal_ID),
fechaIngreso DATE NOT NULL,
cargo VARCHAR (100) NOT NULL,
activo BOOLEAN DEFAULT TRUE
);
CREATE TABLE clientes (
cliente_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre VARCHAR (50) NOT NULL,
apellido VARCHAR (50) NOT NULL,
email VARCHAR (100) NOT NULL,
telefono VARCHAR (10) NOT NULL,
pais_ID INTEGER NOT NULL REFERENCES paises (pais_ID),
ciudad VARCHAR (100) NOT NULL,
tipoCliente_ID INTEGER NOT NULL REFERENCES tiposcliente (tipoCliente_ID),
fechaRegistro DATE NOT NULL DEFAULT CURRENT_DATE,
activo BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE productos (
producto_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
codigoProducto VARCHAR (10) NOT NULL,
nombreProducto VARCHAR (50) NOT NULL,
categoria_ID INTEGER NOT NULL REFERENCES categorias (categoria_ID),
precio NUMERIC (12,2) NOT NULL,
stock INTEGER NOT NULL,
descripcion TEXT NOT NULL,
activo BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE pedidos (
pedido_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
cliente_ID INTEGER NOT NULL REFERENCES clientes (cliente_ID),
sucursal_ID INTEGER NOT NULL REFERENCES sucursales (sucursal_ID),
empleado_ID INTEGER NOT NULL REFERENCES empleados (empleado_ID),
fechaPedido DATE NOT NULL DEFAULT CURRENT_DATE,
estado VARCHAR (10) NOT NULL,
total NUMERIC (12,2) NOT NULL,
notas TEXT NOT NULL
);
CREATE TABLE detallePedidos (
detalle_ID INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pedido_ID INTEGER NOT NULL REFERENCES pedidos (pedido_ID),
producto_ID INTEGER NOT NULL REFERENCES productos (producto_ID),
cantidad INTEGER NOT NULL,
precioUnitario NUMERIC (12,2) NOT NULL
);
Hola, para los que somos totalmente nuevos en esto y estan teniendo problemas en importar las tablas: es porque el código de recursos para crear las tablas vs las tablas csv no siempre coinciden las columnas, por ej. en el archivo países en el código solo estaba id pais y pais y en la tabla tenía como columnas adicionales código pais y continente. Adicional tienen que subirse primero las tablas madre y luego las hijas, si subes una tabla con llave foránea y no ha subido la tabla que tiene esa llave no te lo va a acpetar.
Para que PostgreSQL no rechace la carga con errores de llave foránea (viola la llave foránea fk_...), es indispensable importar las tablas padre antes que las tablas hijas que dependen de ellas.
1. Orden estricto de importación:
01_Paises.csv ➔ Tabla paises (No depende de nadie).02_Categorias.csv ➔ Tabla categorias (No depende de nadie).03_TiposCliente.csv ➔ Tabla tipos_clientes (No depende de nadie).04_Sucursales.csv ➔ Tabla sucursales (Depende de paises).05_Empleados.csv ➔ Tabla empleados (Depende de sucursales).06_Clientes.csv ➔ Tabla clientes (Depende de paises y tipos_clientes).07_Productos.csv ➔ Tabla productos (Depende de categorias).08_Pedidos.csv ➔ Tabla pedidos (Depende de clientes, sucursales y empleados).09_DetallePedidos.csv ➔ Tabla detalle_pedidos (Depende de pedidos y productos).Hola, dado a que los scripts estan mal les comparto mi version :
-- Script base para PostgreSQL / pgAdmin -- Crear base de datos create database tiendalatam; -- Verificar en que base de datos estamos ubicados select current_database(); -- Verificar el usuario propietario de la base de datos select datname, pg_catalog.pg_get_userbyid(datdba) as propietario from pg_catalog.pg_database where datname = 'tiendalatam'; -- Crear tablas de TiendaLatam -- Nota: se usa GENERATED BY DEFAULT AS IDENTITY para permitir importar IDs existentes desde archivos CSV. create table if not exists paises ( pais_id integer generated by default as identity primary key, codigo_pais varchar(5) not null, nombre_pais varchar(50) not null, continente varchar(50) not null ); create table if not exists categorias ( categoria_id integer generated by default as identity primary key, nombre_categoria varchar(50) not null, descripcion text ); create table if not exists tipos_clientes ( tipo_cliente_id integer generated by default as identity primary key, nombre_tipo varchar(50) not null unique, descripcion text not null ); create table if not exists sucursales ( sucursal_id integer generated by default as identity primary key, nombre_sucursal varchar(150) not null, ciudad varchar(100), pais_id integer not null, direccion_completa text not null, activo boolean not null default true, constraint fk_sucursal_pais foreign key (pais_id) references paises(pais_id) ); create table if not exists empleados ( empleado_id integer generated by default as identity primary key, nombre varchar(30) not null, apellido varchar(30) not null, email varchar(100) not null unique, sucursal_id integer not null, fecha_ingreso date, cargo varchar(50) not null, activo boolean not null default true, constraint fk_empleado_sucursal foreign key (sucursal_id) references sucursales(sucursal_id) ); create table if not exists clientes ( cliente_id integer generated by default as identity primary key, nombre varchar(30) not null, apellido varchar(30) not null, email varchar(100) not null unique, telefono varchar(50), pais_id integer not null, ciudad varchar(50), tipo_cliente_id integer not null, fecha_registro date, activo boolean not null default true, constraint fk_cliente_pais foreign key (pais_id) references paises(pais_id), constraint fk_cliente_tipo foreign key (tipo_cliente_id) references tipos_clientes(tipo_cliente_id) ); create table if not exists productos ( producto_id integer generated by default as identity primary key, codigo_producto varchar(30) not null unique, nombre_producto varchar(100) not null, categoria_id integer not null, precio numeric(6,2) not null, stock integer, descripcion text, activo boolean not null default true, constraint fk_producto_categoria foreign key (categoria_id) references categorias(categoria_id) ); create table if not exists pedidos ( pedido_id integer generated by default as identity primary key, cliente_id integer not null, sucursal_id integer not null, empleado_id integer not null, fecha_pedido timestamp not null default current_timestamp, estado varchar(30) not null, total numeric(12,2) not null, notas text, constraint fk_pedido_cliente foreign key (cliente_id) references clientes(cliente_id), constraint fk_pedido_empleado foreign key (empleado_id) references empleados(empleado_id), constraint fk_pedido_sucursal foreign key (sucursal_id) references sucursales(sucursal_id) ); create table if not exists detalle_pedidos( detalle_id integer generated by default as identity primary key, pedido_id integer not null, producto_id integer not null, cantidad integer, precio_unitario numeric(12,2), constraint fk_detalle_pedido foreign key (pedido_id) references pedidos(pedido_id), constraint fk_detalle_producto foreign key (producto_id) references productos(producto_id) ); -- Verificamos que creamos las tablas select table_name from information_schema.tables where table_schema = 'public' order by table_name;
Logre importar todos los datos, pero les comparto mis errores:
- Seguí el orden alfabético de las tablas que muestra PostgreSQL, y no es asi. Hay una dependencia entre tablas. - En la tabla Clientes, tuve que ampliar la columna Telefono a VARCHAR(20) porque hay números más largos. - Estaba haciendo consultas en la BD postgres y no en BD tiendalatam. - Estaba intentando insertar el archivo CSV de Pedidos, en Productos, y no me daba cuenta.
Durante el curso no explica la sintaxis de SqL, unas veces escriben en mayúscula otras en minúscula, usan el guión bajo, luego usan palabras pegadas, unas veces usan la coma otras no, no explican por que usar punto y coma, ME HA TOCADO CONSULTAR OTRAS FUENTES PARA ENTENDER LA SINTAXIS. CONSIDERO QUE ESTE CURSO ES PARA PERSONAS QUE YA SABEN Y QUIEREN CERTIFICARSE. Y NI HABLAR DE LA PARTE FINAL DEL CURSO, LOS JOIN, NO EXPLICAN MUY BIEN. Y ESO QUE ESTOY PAGANDO. AL CURSO LO CALIFICO CON UN 2.0
Totalmente de acuerdo, este curso tiene muchas lagunas, muchos vacios y necesariamente toca consultar a otras fuentes.
para los que deseen pueden trabajar en linea con esta herramienta que me parecio super buena
Mi código:
CREATE TABLE paises (
pais_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
codigo_pais VARCHAR(3) NOT NULL UNIQUE,
nombre_pais TEXT NOT NULL,
continente TEXT NOT NULL
);
CREATE TABLE categorias (
categoria_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre_categoria TEXT NOT NULL,
descripcion TEXT
);
CREATE TABLE tipos_cliente (
tipo_cliente_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nombre_tipo TEXT NOT NULL,
descripcion TEXT
);
CREATE TABLE clientes (
cliente_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pais_id INTEGER NOT NULL REFERENCES paises(pais_id),
tipo_cliente_id INTEGER NOT NULL REFERENCES tipos_cliente(tipo_cliente_id),
nombre TEXT NOT NULL,
apellido TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
telefono VARCHAR(50),
ciudad TEXT NOT NULL,
fecha_registro DATE NOT NULL DEFAULT CURRENT_DATE,
activo BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE sucursales (
sucursal_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pais_id INTEGER NOT NULL REFERENCES paises(pais_id),
nombre_sucursal TEXT NOT NULL,
ciudad TEXT NOT NULL,
direccion_completa TEXT NOT NULL,
activo BOOLEAN NOT NULL
);
CREATE TABLE empleados (
empleado_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
sucursal_id INTEGER NOT NULL REFERENCES sucursales(sucursal_id),
nombre TEXT NOT NULL,
apellido TEXT NOT NULL,
email TEXT NOT NULL UNIQUE,
fecha_ingreso DATE NOT NULL DEFAULT CURRENT_DATE,
cargo TEXT NOT NULL,
activo BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE pedidos (
pedido_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
cliente_id INTEGER NOT NULL REFERENCES clientes(cliente_id),
sucursal_id INTEGER NOT NULL REFERENCES sucursales(sucursal_id),
empleado_id INTEGER NOT NULL REFERENCES empleados(empleado_id),
fecha_pedido TIMESTAMP NOT NULL DEFAULT CURRENT_DATE,
estado VARCHAR(10) NOT NULL,
total NUMERIC(10,2) NOT NULL,
notas TEXT
);
CREATE TABLE productos (
producto_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
categoria_id INTEGER NOT NULL REFERENCES categorias(categoria_id),
codigo_producto VARCHAR(10) NOT NULL UNIQUE,
nombre_producto TEXT NOT NULL,
precio NUMERIC(10,2) NOT NULL,
stock INTEGER NOT NULL,
descripcion TEXT,
activo BOOLEAN NOT NULL DEFAULT TRUE
);
CREATE TABLE detalle_pedidos (
detalle_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
pedido_id INTEGER NOT NULL REFERENCES pedidos(pedido_id),
productos_id INTEGER NOT NULL REFERENCES productos(producto_id),
cantidad VARCHAR(5) NOT NULL,
precio_unitario NUMERIC(10,2) NOT NULL
);
Lo más instructivo de la clase es un tropiezo: la base de datos aparecía creada en el navegador de objetos, pero la consulta que pregunta cuál es la base actual devolvió Postgres y no TiendaLatam. Es decir, la verificación visual confirmó que la base existía y solo la verificación por código reveló que la sesión apuntaba a otra. De ahí que valga la pena hacer ambas comprobaciones antes de cargar datos. Un ejercicio propuesto para quien reporta con SQL sería pegar esa consulta al inicio de cada script, de modo que ningún informe se genere sobre la base equivocada.
demore 2 horas organizando dicha informacion porque posgre no aceptaba dicha importacion, toco cambiar un poco la sintaxis de algunos archivos para poder subirlos. Los adjuntos de la clase no coinciden totalmente, toco consultar los comentarios.
para todos aqullos que tengan el ERROR de que no pueden imporata una tabla, Es por la falta de columnas en dicha tabla,
Lo que tienen que haces es ver que columnas faltan
tomando de ejemplo paises solo me aparecian estas dos columnas lo que tienen que hacer es ver las columnas creadas en la tabla, con el sigiente comando:
desde :
una ves que verifiquen que solo hay dos columnas ahora tienen que hacer un alter al codigo :
posterior a eso y se añadan las columnas ya pueden importar la tabla correctamente con las 4 columnas
ahora pueden verificar si la tabla es correcta:
Mi resultado del reto:
<u>waoo. cone ste curso he logrado cosas que nunca hice en sql. muy buenoo. </u>