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
);