Muy bueno el dato, pero yo no lo haría en dos tablas separadas sinó en una. ¿por qué? por el simple hecho de que la misma puede crecer usando la recursividad (estilo árbol).
ejemplo en PostgreSQL:
tabla "localizacion":
CREATE TABLE
localizacion
(
id serial NOT NULL,
parent_id integer NOT NULL,
nombre character varying(128) NOT NULL,
CONSTRAINT pk_localizacion PRIMARY KEY (id)
)
con esta estructura tan simple yo puedo crear una locación de la siguiente manera:
País -> Estado -> Provincia -> Distrito -> Corregimiento
Esto aplica a los paises que lo utilicen, ejemplo, en mi país solo tenemos:
Pais -> Provincia -> Distrito -> Corregimiento
Para paises como México, Estados Unidos y demás que manejen estados sería como el primero, algunos no manejan provincia, eso simplemente se obvia y listo.
para hacer el insert, simple:
Código PHP:
insert into localizacion values(1,0,'Panamá');
insert into localizacion values(2,0,'Estados Unidos');
insert into localizacion values(3,0,'México');
insert into localizacion values(4,0,'Costa Rica');
donde el valor cero (0) representa el padre, esto quiere decir que nuestros padres serán los paises.
insertemos ahora hijos para Panamá:
Código PHP:
insert into localizacion values(5,1,'Los Santos'); //Provincia
insert into localizacion values(6,5,'Las Tablas'); //Distrito
insert into localizacion values(7,6,'Peña Blanca'); //Corregimiento
Como ven, es una forma simple pero a la vez efectiva.
se preguntarán, pero como cargo esto en un drop down?
FACIL: Si sabemos que los que son parent_id = 0 son paises, pues solo es seleccionar esos y de ahi cuando se seleccione un pais, nos devolverá su codigo, ese código a su vez lo parseamos para sacar los hijos haciendo referencia al campo parent_id, ejemplo:
//seleccionamos los paises:
Código PHP:
select * from localizacion where parent_id=0
Esto nos devolverá: Panamá, Estados Unidos, México y Costa Rica.
y validamos si el pais que seleccionamos tiene hijos:
//supongamos que seleccionamos panama (id = 1)
Código PHP:
select * from localizacion where parent_id=1
esto nos devolverá: Los Santos
y comprobamos que "los santos" tenga hijo hacemos el paso anterior y así sucesivamente.... esto si se trabaja con full javascript y ajax se logra (asi lo hice yo).
Espero les sirva esto, esta es mi humilde contribución a este temita.
Saludos