Hay son formas de evitar la repetición en las consultas de estructura jerárquica (en oposición a lo que se ha dicho aquí).
El que he usado más es Nested Sets.
Como con todas las decisiones técnicas y de vida, sin embargo, hay compensaciones que deben hacerse.Los conjuntos anidados a menudo son más lentos de actualizar pero mucho más rápidos de consultar. Hay formas ingeniosas y complicadas de mejorar la velocidad de actualización de la jerarquía, pero hay otra compensación; rendimiento vs complejidad del código.
Un ejemplo simple de un conjunto anidado ...
vista de árbol:
-Electronics
|
|-Televisions
| |
| |-Tube
| |-LCD
| |-Plasma
|
|-Portable Electronics
|
|-MP3 Players
| |
| |-Flash
|
|-CD Players
|-2 Way Radios
conjuntos anidados Representación
+-------------+----------------------+-----+-----+
| category_id | name | lft | rgt |
+-------------+----------------------+-----+-----+
| 1 | ELECTRONICS | 1 | 20 |
| 2 | TELEVISIONS | 2 | 9 |
| 3 | TUBE | 3 | 4 |
| 4 | LCD | 5 | 6 |
| 5 | PLASMA | 7 | 8 |
| 6 | PORTABLE ELECTRONICS | 10 | 19 |
| 7 | MP3 PLAYERS | 11 | 14 |
| 8 | FLASH | 12 | 13 |
| 9 | CD PLAYERS | 15 | 16 |
| 10 | 2 WAY RADIOS | 17 | 18 |
+-------------+----------------------+-----+-----+
Usted querrá leer el article I linked para comprender plenamente esta , pero intentaré dar una breve explicación.
Un artículo es miembro de otro artículo si (el valor "lft" del niño (izquierda) es mayor que el valor "ltf" del padre) Y (el valor "rgt" del niño es menor que el valor "rgt" del padre)
"flash" es therfore un miembro de "reproductores MP3", "Electrónica portátil" y "Electrónica"
o, conversley, los miembros de "la electrónica portátil" son:
- reproductores de MP3
- Flash
- Reproductores de CD
- 2 vías de radios
Joe Celko tiene un libro completo sobre "Árboles y jerarquías en SQL". Hay más opciones de lo que piensas, pero hay muchas concesiones que hacer.
Nota: nunca digas que algo no se puede hacer, algunos mofo aparecerán para mostrarte eso en la lata.
¿Podría definir una entidad y cómo se relaciona? – Brettski
¿Qué motor de base de datos está utilizando? –
Una entidad es solo una abstracción común entre usuarios y grupos, luego un miembro puede ser un grupo o un usuario. Estoy usando PostgreSQL –