Con el diseño de tablas que doy ya estan relacionadas, si se quiere dar un control de integridad habría que crear los respectivos indices y cada tabla debería ser de tipo INNODB u otro que acepte integridad referencial.
Para realizar un select que entregue el nombre asociado a un clave foránea (asi se llaman) se debe usar join, ejemplo:
Código:
select categoria, subcategoria, nombre from articulos a
inner join categorias c
on a.id_categoria=c.id_categoria
inner join subcategorias s
on a.id_categoria=s.id_categoria
Para cargar datos por un formulario debes usar un formulario por cada tabla. Para el caso de tablas que tienen claves foraneas y quiere facilitar el ingreso de datos, debes permitir seleccionar la categoria con una lista combinada por ejemplo, en la cual estén las categorías y/o subcategorías.