Джанго: несколько столов для одной модели. - PullRequest
1 голос
/ 05 декабря 2009

У меня есть модель «Сообщения», которую я использую для хранения сообщений по всему сайту. Это сообщения в обсуждениях, личные сообщения и, возможно, чат. Все они хранятся в одной таблице. Интересно, будет ли быстрее, если я буду распространять сообщения между несколькими моделями и таблицами. Один для чата, один для обсуждений и так далее.

Так я должен хранить все сообщения в одной таблице / модели или создать несколько идентичных моделей / таблиц?

Ответы [ 2 ]

1 голос
/ 05 декабря 2009

Пока у вас есть индекс в столбце type и фильтр по нему, он будет примерно с той же скоростью. Когда ваша таблица станет действительно большой, просто осколите столбец type, и производительность будет такой же, как при работе с несколькими таблицами, но ваше приложение увидит только одну большую таблицу.

1 голос
/ 05 декабря 2009

Одна «Таблица» будет лучше для целей поиска (вы можете «искать» по всем сообщениям одновременно.

Тем не менее, скорость может быть полезна для нескольких таблиц.

Почему бы не использовать абстрактные классы?

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

class ChatMessage(MessageBase):
    pass

Это создаст 2 таблицы, причем таблица для ChatMessage просто ссылается непосредственно на таблицу для MessageBase. Это даст вам лучшее из обоих миров. «Поиск» с использованием MessageBase, чтобы получать сообщения для чего угодно, но сохранять и ссылаться на все другие сообщения, используя определенный класс модели.

(обратите внимание, что питон здесь может быть немного неправильным, так как он не был протестирован, но я уверен, что вы поняли!)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...