2009-12-04 6 views
1

J'ai un modèle "Messages" que j'utilise pour stocker des messages sur tout le site. Ce sont des messages dans les discussions, les messages privés et probablement le chat. Ils sont tous stockés dans une table. Je me demande si ce sera plus rapide si je partage des messages entre plusieurs modèles et tables. Un pour le chat, un pour les discussions et ainsi de suite.Django: plusieurs tables pour un modèle.

Alors est-ce que je devrais garder tous les messages dans une table/modèle ou créer plusieurs modèles/tables identiques?

Répondre

1

Tant que vous avez un index sur votre colonne type et filtrer sur cela, ce sera à peu près la même vitesse. Lorsque la taille de votre table est importante, placez simplement un fragment sur la colonne type et les performances seront identiques à celles de plusieurs tables, mais votre application ne verra qu'une seule grande table.

1

Une « Table » sera mieux à des fins de recherche (vous pouvez « recherche » sur tous les messages à la fois.

Cependant, plusieurs tables peuvent bénéficier de la vitesse.

Pourquoi ne pas utiliser des classes abstraites ?

class MessageBase(models.Model): 
    subject = models.CharField(max_length=255) 
    test = models.TextField() 

class ChatMessage(MessageBase): 
    pass 

Cela va créer 2 tables, avec la table pour ChatMessage simplement se référant directement à la table pour MessageBase. Cela vous donnera le meilleur des deux mondes. « Recherche » en utilisant MessageBase pour obtenir des messages pour quoi que ce soit, mais enregistrer, et se référer à, tous les autres messages er en utilisant sa classe de modèle spécifique.

(s'il vous plaît noter que le python ici est peut-être un peu mal, car il n'a pas été testé, mais je suis sûr que vous avez l'idée!)

Questions connexes