2010-08-27 12 views
5

Si tuviera que representar, por ejemplo, ubicaciones (por ejemplo, países, estados/provincias/regiones, ciudades, etc.) en una base de datos, ¿cómo lo haría de modo tal que sería más fácil consultar, escalar el máximo , etc.? Planeo usar esto para una aplicación que permitirá a los usuarios seleccionar múltiples ubicaciones y asociarlas a su perfil.¿Cómo diseñar DB con relaciones padre-hijo?

La solución que viene a la mente es la siguiente:

=========================== 
| Id | ParentId | Name | 
=========================== 
| 1 | 0  | USA  | 
--------------------------- 
| 2 | 1  | Alabama | 
--------------------------- 

Me pregunto si hay cualquier problema potencial con una solución de este tipo. Gracias.

Respuesta

3

Si conoce los diferentes tipos de artículos (países de estado de la ciudad), debe crear tablas separadas. Ponerlos todos en una sola tabla hará que sea más difícil consultarlos.

Si utiliza diferentes tipos de tablas, puede aplicar integridad referencial para que no quede huérfano.

¡Piensa en los niños!

+0

Puede aplicar la integridad referencial en una auto unión. Solo tendrías que hacer una regla para las filas sin referencia de los padres, ni ellos mismos, ni un registro "Root" designado. –

+2

No creo que conozca todos los diferentes tipos de artículos. Diferentes países dividen las secciones geográficas diferentes. Necesito tener un diseño que admita n niveles de jerarquía. – StackOverflowNewbie

+0

@StackOverflowNewbie - Ya veo, entonces su diseño es bueno y tiene sentido. Pero, ¿le importaría explicar al infractor? No pude adivinar su comentario antes de publicar mi respuesta ... –

0

Esto parece bastante adecuado para la escalabilidad, pero podría incluir una columna adicional para identificar la fila/entrada real (tipo de entidad, si lo desea).

Esto le permitirá realizar consultas fácilmente en función de la selección (país, ciudad, etc.). Sin embargo, puede descubrir que la hiracrchy puede causarle un poco de dolor, ya que toda la estructura estará en una sola mesa, y no conoce la profundidad para comenzar.

Al final, el diseño dependerá de la cantidad de sub secciones conocidas que pueda tener, y si dicha normalización de hecho podría hacer la vida más difícil, en lugar de no hacerlo.

+0

¿Qué pasa si no sé de antemano qué "tipos" tengo? – StackOverflowNewbie

0

Uso algo similar y he tenido mucho éxito con él. Un reciente Question of mine puede ser útil.

En algunos casos (como este) no quiero estar atado a una estructura de tabla. La autorreferencia puede ser una gran cosa. No entiendo por qué es tan aceptable tener estructuras parecidas a un árbol usando el mismo tipo de objeto en el código, pero los programadores lo evitan cuando se trata de bases de datos.

0

Dependiendo de su público, también puede considerar separar los valores de nombre por tipo para que puedan ser localizados sin duplicar la estructura jerárquica.

+0

puede elaborar por favor? Los pares de nombre/valor en el diseño de DB también presentan sus propios problemas. – StackOverflowNewbie

Cuestiones relacionadas