⊗pyPmDOFR 126 of 129 menu

Relaciones de datos recursivas en Python

Supongamos que tenemos la tarea de almacenar padres e hijos. Supongamos que cada padre puede tener solo un hijo, y un hijo a su vez también puede tener un hijo.

Necesitamos pensar cómo almacenaremos los datos. La primera idea que puede venir a la mente es crear dos tablas: parents para padres y sons para hijos. Luego enlazar estas tablas con algún campo: son_id o parent_id.

Sin embargo, esta idea no es muy buena, ya que la misma persona puede ser simultáneamente padre e hijo - y tendríamos que almacenarlo en ambas tablas, lo cual es inconveniente, ocupa más espacio y fácilmente conduce a errores.

Una opción mejor es enlazar la tabla consigo misma: creemos una tabla users, en ella almacenaremos todos los usuarios y a cada uno le crearemos un campo son_id, en el cual se almacenará el id del hijo de esta misma tabla:

users
id name son_id
1 user1 2
2 user2 3
3 user3 null

Consultas

Ahora escribamos una consulta que obtenga al usuario junto con su hijo.

Para empezar, simplemente obtengamos los usuarios:

SELECT * FROM users

Ahora hagamos un JOIN de los usuarios con sus hijos. Uniremos la tabla consigo misma, por lo que necesitamos realizar un renombrado de la misma:

LEFT JOIN users as sons

Ahora podemos especificar la relación entre la tabla principal y la renombrada:

LEFT JOIN users as sons ON sons.id=users.son_id

Especificamos ahora los campos:

SELECT users.name as user_name, sons.name as son_name

Juntemos todo y obtendremos la siguiente consulta:

SELECT users.name as user_name, sons.name as son_name FROM users LEFT JOIN users as sons ON sons.id=users.son_id

Tareas prácticas

Supongamos que tenemos categorías. Cada categoría puede pertenecer a una categoría padre, que a su vez puede tener su propia categoría padre y así sucesivamente. Describa la estructura de almacenamiento.

Escriba una consulta que obtenga una categoría junto con su categoría padre.

Escriba una consulta que obtenga una categoría junto con su padre y su abuelo.

Escriba una consulta que obtenga una categoría junto con su padre, su abuelo y su bisabuelo.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar