Cita: y si tomo tu alternativa el usuario tendria contraseña y paswoord y podria tener un perfil asta ahi se solucionaria el problema . pero si el usuario ya no sigue con el registro se guardarian esos datos. pero sus datos personales que ban en la tabla persona no se registrarian.
Creo que estás perdiendo la linea del proceso:
No se deben hacer las inserciones en la medida que se van pasando los formularios o pantallas. No. Se deben hacer cuando ya hayas recolectado todos los datos.
Esto significa que vas almacenando los datos que van ingresando y las selecciones hasta el final del proceso (cosa que se hace en la aplicación y no en la base), y cuando el usuario da el OK final allí disparas todos los procesos de inserción en secuencia.
En los hechos, el usuario no necesita saber cuál es su número de ID por la simple razón de que el no se identificará con ese número sino con su username.
Ahora bien, si tu preguntas como puedes validar un username sin antes ingresarlo, bueno, eso se puede hacer de muchas formas. Yo sugiero usar una tabla de transacción que almacene temporalmente el nombre del usuario que está por ser ingresado de modo que si hay usuarios concurrentes en el servicio se pueda establecer qué usernames ya están reservados y por tanto no se produzcan confusiones.
Pero ese es el único punto donde puedes tener algún problema, y como ves, no es tanto problema.
Recuerda:
Las validaciones se hacen siempre en la aplicación, tomando datos consultados de la base, pero eso no significa que debas ir ingresando datos antes de que el usuario de el OK definitivo.
En realidad lo que plateas se puede hacer, pero requiere que conozcas el concepto de transacciones en bases de datos y de isolation, ycreo que es demasiado por el momento.