Objeto JSON que representa el modelo relacional completo para una aplicación de ventas y entregas a domicilio, con definiciones de al menos 20 tablas, campos, índices, relaciones y enumeraciones en formato SQL.
{
"tablas": [
{
"nombre": "Cliente",
"campos": [
{
"nombre": "id_cliente",
"tipo": "INT",
"pk": true
},
{
"nombre": "nombre",
"tipo": "VARCHAR(100)"
},
{
"nombre": "email",
"tipo": "VARCHAR(100)"
},
{
"nombre": "telefono",
"tipo": "VARCHAR(20)"
}
],
"indices": [
"PRIMARY KEY (id_cliente)",
"INDEX idx_email (email)"
],
"relaciones": []
},
{
"nombre": "Producto",
"campos": [
{
"nombre": "id_producto",
"tipo": "INT",
"pk": true
},
{
"nombre": "nombre",
"tipo": "VARCHAR(100)"
},
{
"nombre": "precio",
"tipo": "DECIMAL(10,2)"
}
],
"indices": [
"PRIMARY KEY (id_producto)"
],
"relaciones": []
},
{
"nombre": "Categoria",
"campos": [
{
"nombre": "id_categoria",
"tipo": "INT",
"pk": true
},
{
"nombre": "nombre",
"tipo": "VARCHAR(50)"
}
],
"indices": [
"PRIMARY KEY (id_categoria)"
],
"relaciones": []
},
{
"nombre": "Pedido",
"campos": [
{
"nombre": "id_pedido",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_cliente",
"tipo": "INT"
},
{
"nombre": "fecha",
"tipo": "DATETIME"
},
{
"nombre": "estado",
"tipo": "ENUM('pendiente','entregado','cancelado')"
}
],
"indices": [
"PRIMARY KEY (id_pedido)",
"INDEX idx_cliente (id_cliente)"
],
"relaciones": [
{
"tabla": "Cliente",
"tipo": "FOREIGN KEY",
"campo": "id_cliente"
}
]
},
{
"nombre": "DetallePedido",
"campos": [
{
"nombre": "id_detalle",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_pedido",
"tipo": "INT"
},
{
"nombre": "id_producto",
"tipo": "INT"
},
{
"nombre": "cantidad",
"tipo": "INT"
}
],
"indices": [
"PRIMARY KEY (id_detalle)",
"INDEX idx_pedido (id_pedido)"
],
"relaciones": [
{
"tabla": "Pedido",
"tipo": "FOREIGN KEY",
"campo": "id_pedido"
},
{
"tabla": "Producto",
"tipo": "FOREIGN KEY",
"campo": "id_producto"
}
]
},
{
"nombre": "Empleado",
"campos": [
{
"nombre": "id_empleado",
"tipo": "INT",
"pk": true
},
{
"nombre": "nombre",
"tipo": "VARCHAR(100)"
},
{
"nombre": "rol",
"tipo": "ENUM('repartidor','admin','vendedor')"
}
],
"indices": [
"PRIMARY KEY (id_empleado)"
],
"relaciones": []
},
{
"nombre": "Vehiculo",
"campos": [
{
"nombre": "id_vehiculo",
"tipo": "INT",
"pk": true
},
{
"nombre": "matricula",
"tipo": "VARCHAR(20)"
},
{
"nombre": "tipo",
"tipo": "ENUM('moto','coche','bicicleta')"
}
],
"indices": [
"PRIMARY KEY (id_vehiculo)"
],
"relaciones": []
},
{
"nombre": "Ruta",
"campos": [
{
"nombre": "id_ruta",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_empleado",
"tipo": "INT"
},
{
"nombre": "fecha",
"tipo": "DATE"
}
],
"indices": [
"PRIMARY KEY (id_ruta)"
],
"relaciones": [
{
"tabla": "Empleado",
"tipo": "FOREIGN KEY",
"campo": "id_empleado"
}
]
},
{
"nombre": "Domicilio",
"campos": [
{
"nombre": "id_domicilio",
"tipo": "INT",
"pk": true
},
{
"nombre": "direccion",
"tipo": "VARCHAR(200)"
},
{
"nombre": "ciudad",
"tipo": "VARCHAR(50)"
}
],
"indices": [
"PRIMARY KEY (id_domicilio)"
],
"relaciones": []
},
{
"nombre": "Zona",
"campos": [
{
"nombre": "id_zona",
"tipo": "INT",
"pk": true
},
{
"nombre": "nombre",
"tipo": "VARCHAR(50)"
}
],
"indices": [
"PRIMARY KEY (id_zona)"
],
"relaciones": []
},
{
"nombre": "Inventario",
"campos": [
{
"nombre": "id_inventario",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_producto",
"tipo": "INT"
},
{
"nombre": "stock",
"tipo": "INT"
}
],
"indices": [
"PRIMARY KEY (id_inventario)"
],
"relaciones": [
{
"tabla": "Producto",
"tipo": "FOREIGN KEY",
"campo": "id_producto"
}
]
},
{
"nombre": "Proveedor",
"campos": [
{
"nombre": "id_proveedor",
"tipo": "INT",
"pk": true
},
{
"nombre": "nombre",
"tipo": "VARCHAR(100)"
}
],
"indices": [
"PRIMARY KEY (id_proveedor)"
],
"relaciones": []
},
{
"nombre": "Compra",
"campos": [
{
"nombre": "id_compra",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_proveedor",
"tipo": "INT"
},
{
"nombre": "fecha",
"tipo": "DATETIME"
}
],
"indices": [
"PRIMARY KEY (id_compra)"
],
"relaciones": [
{
"tabla": "Proveedor",
"tipo": "FOREIGN KEY",
"campo": "id_proveedor"
}
]
},
{
"nombre": "DetalleCompra",
"campos": [
{
"nombre": "id_detalle_compra",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_compra",
"tipo": "INT"
},
{
"nombre": "id_producto",
"tipo": "INT"
}
],
"indices": [
"PRIMARY KEY (id_detalle_compra)"
],
"relaciones": [
{
"tabla": "Compra",
"tipo": "FOREIGN KEY",
"campo": "id_compra"
}
]
},
{
"nombre": "Pago",
"campos": [
{
"nombre": "id_pago",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_pedido",
"tipo": "INT"
},
{
"nombre": "monto",
"tipo": "DECIMAL(10,2)"
}
],
"indices": [
"PRIMARY KEY (id_pago)"
],
"relaciones": [
{
"tabla": "Pedido",
"tipo": "FOREIGN KEY",
"campo": "id_pedido"
}
]
},
{
"nombre": "Factura",
"campos": [
{
"nombre": "id_factura",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_pedido",
"tipo": "INT"
},
{
"nombre": "fecha_emision",
"tipo": "DATETIME"
}
],
"indices": [
"PRIMARY KEY (id_factura)"
],
"relaciones": [
{
"tabla": "Pedido",
"tipo": "FOREIGN KEY",
"campo": "id_pedido"
}
]
},
{
"nombre": "Descuento",
"campos": [
{
"nombre": "id_descuento",
"tipo": "INT",
"pk": true
},
{
"nombre": "porcentaje",
"tipo": "DECIMAL(5,2)"
}
],
"indices": [
"PRIMARY KEY (id_descuento)"
],
"relaciones": []
},
{
"nombre": "Promocion",
"campos": [
{
"nombre": "id_promocion",
"tipo": "INT",
"pk": true
},
{
"nombre": "nombre",
"tipo": "VARCHAR(100)"
}
],
"indices": [
"PRIMARY KEY (id_promocion)"
],
"relaciones": []
},
{
"nombre": "HistorialEstado",
"campos": [
{
"nombre": "id_historial",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_pedido",
"tipo": "INT"
},
{
"nombre": "estado",
"tipo": "ENUM('pendiente','entregado','cancelado')"
}
],
"indices": [
"PRIMARY KEY (id_historial)"
],
"relaciones": [
{
"tabla": "Pedido",
"tipo": "FOREIGN KEY",
"campo": "id_pedido"
}
]
},
{
"nombre": "DireccionCliente",
"campos": [
{
"nombre": "id_direccion",
"tipo": "INT",
"pk": true
},
{
"nombre": "id_cliente",
"tipo": "INT"
},
{
"nombre": "id_domicilio",
"tipo": "INT"
}
],
"indices": [
"PRIMARY KEY (id_direccion)"
],
"relaciones": [
{
"tabla": "Cliente",
"tipo": "FOREIGN KEY",
"campo": "id_cliente"
},
{
"tabla": "Domicilio",
"tipo": "FOREIGN KEY",
"campo": "id_domicilio"
}
]
}
],
"enumeraciones": [
"estado_pedido: pendiente,entregado,cancelado",
"tipo_vehiculo: moto,coche,bicicleta",
"rol_empleado: repartidor,admin,vendedor"
]
}