Ver Mensaje Individual
  #3 (permalink)  
Antiguo 02/10/2009, 05:21
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Categorias y llaves Foraneas

Código sql:
Ver original
  1. INSERT INTO categorias VALUES('',0,'cat1');
En primer lugar, por una cuestión práctica, y a pesar de que te lleve un poco más de codificación, siempre es bueno especificar los campos que se van a ingresar cuando no vas a poner datos en uno de ellos, como es enl caso de los ID auto_increment.
Código sql:
Ver original
  1. INSERT INTO categorias(padre, categoria) VALUES(0,'cat1');
Ganas en eficiencia de código, ayudas al parser y evitas errores de interpretación en la lectura cuando tienes que revisar las sentencias...

Yendo a tu problema, tu sentencia de creación tiene un problema: le estás dejando al motor de MySQL que determine si el campo ´padre´puede ser NULL o NOT NULL, con lo cual si el NOT NULL es el default (y ese es el valor por default de una instalación de MySQL), te encuentras en un problema: Se vuelve circular.
Para poder cargar un registro deben existir IDS en la tabla sobre qué comparar el contenido de `padre`, pero no puedes poner un registro con un ID nuevo sin poner un valor que ya exista entre los ID en `padre`.
¿Se entiende la circularidad?
El tema aquí es que la relación debe establecerse preferentemente en otra tabla, porque si bien la relación es 1:N, la restricción de FK te impedirá poner registros, a menos que declares el campo como NULL. En ese caso podrás ingresar categorías sin padre, que serán los primeros niveles.

¿Se va entendiendo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)