вопросы дизайна модели Django - PullRequest
0 голосов
/ 26 августа 2009

Мне нужно хранить различную информацию о некоторых фильмах, книгах, играх и, возможно, других средствах массовой информации.Начиная от издателя, до подсчета дисков в DVD-коробке.Сначала я подумал об абстрактной модели Item, с детьми Book, Movie, Game.Но я думаю, что все это жестко и не очень масштабируемо.Что если мне нужно будет добавить новый тип элемента?

Тогда я читал о виртуальных полях здесь Django - разработка моделей с виртуальными полями? , которые привлекли мое внимание.Но выглядит БД тяжелым и не очень способным к поиску, я не прав?

Каковы лучшие методы для таких случаев?

1 Ответ

1 голос
/ 27 августа 2009

Я думаю, что вам нужен конкретный суперкласс Item (поскольку он, вероятно, будет иметь общие поля, например title, copyright_date, publisher и т. Д.) И подклассы для каждого подтипа (и дополнительные подклассы, если хотите, например, от Toy до ActionFigure с полем number_of_joints), используя наследование нескольких таблиц .

Если вы просто запрашиваете модель Item, это будет быстро, так как ORM Django не присоединится к другим таблицам (и вернет объекты Item, которые затем могут быть преобразованы в их «родной» тип, ссылаясь на item.subclassname. Аналогично, вы можете запросить каждую из моделей подкласса индивидуально с некоторой эффективностью.

Что касается возможности поиска, то если вы используете индексатор, эффективность не имеет большого значения, так как индексация происходит редко.

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