7
votes

Création de requêtes de base de données efficaces pour les modèles hiérarchiques (Django)

Considérez ce modèle (DJANGO):

Website
    Blog
    News    
    Social Network
    Q&A
    Forum
Radio
    Government radio
    Pirate radio
    Commercial radio
    Internet radio


0 commentaires

3 Réponses :


1
votes

Une telle structure peut facilement être récupérée à l'aide d'une expression de table commune récursive.

Un exemple est E.G. Ici: http://www.postgresql.org/docs/current/statique /queries-with.html


2 commentaires

L'exemple n'est pas vraiment pertinent pour Django.


@Centralniak: Pourquoi? Vous ne pouvez pas exécuter SQL requêtes avec cette chose django?



1
votes

Comment puis-je interroger efficacement pour que si Je sélectionne Source par type, j'ai aussi récupérer des sources qui ont un type c'est un enfant du type donné?

Pour l'exemple donné, il est assez facile de configurer une requête car aucun appel récursif ne doit être effectué, et votre "hiérarchie" n'est qu'un niveau de profondeur: xxx

Cela suppose que la source est toujours liée à un type "enfant" et non au "parent".

Si les sources peuvent également être liées aux types "parents", vous pouvez utiliser q pour des requêtes complexes: xxx

si vous avez des arbres vraiment hiérarchiques Dans vos tables, cette méthode est beaucoup moins utilisable et vous devriez rechercher une autre solution.


0 commentaires

6
votes

Django-mptt ou Django-Treebeard sont d'excellents assistants pour les données hiérarchiques. Ils ajoutent tous deux des métadonnées supplémentaires à votre modèle pour permettre des requêtes efficaces.

Si vous choisissez d'utiliser Django-Treebeard, votre modèle pourrait ressembler à ceci: P>

# get all Sources of Type type and descendants of type
type = Type.objects.get(name='Radio')
Source.objects.filter(type__in=type.get_descendants())


0 commentaires