Creo que te estás perdiendo un detalle sobre la implementación de las FK.
Recordemos: Una FOREIGN KEY es un campo o conjunto de campos en una tabla que se referencian a la PRIMARY KEY de otra tabla. Esto significa que debe existir ese campo en la tabla dependiente, y eso es precisamente lo que no estás haciendo, porque el campo id_categoria_productos no existe ni en categoria1, ni en categoria2 ni en categoría3...
Cuando escribes
estás indicando cuál de los campos de la presente tabla es una FK, debe referirse a un campo por su nombre real. Si es otro el nombre no importa en tanto dominio y tipo de datos sean los mismos.
¿Se entiende?
Tips:
- Estas usando indiscriminadamente VARCHAR de 255 caracteres para campos que jamás usarán semejantes longitudes. Es un desperdicio de disco.
- Pareces estar repitiendo datos entre tablas relacionadas, como nombre, descripción, publicar y despublicar entre las tablas de productos y categorías. No queda claro si se trata de los mismos datos o diferentes. Si al menos uno de ellos es el mismo tendrás problemas de consistencia. Asegurate de eso.
- El modelo completo no parece muy comprensible. Estás trabajando un esquema rígido de categorías, ,y da la impresión que no consideras que un producto pueda tener una sola categoría o tener más de tres. Hay esquemas más flexibles.
- No abuses innecesariamente de los ID numérios. Pueden no ser necesarios. Una tabla como productos_categorías no necesita ID propio porque debería contener solamente la relación entre el producto y la categoría. Si lo analizas correctamente, verás que incluso sólo necesitas una tabla categoría y no tres.