Одна большая модель или наследование нескольких моделей для повышения производительности SQL?

#sql #django #django-models

#sql #django #django-модели

Вопрос:

У меня есть веб-сайт, который позволяет пользователям размещать объявления о товарах, которые они хотят продать. Элементы используют одни поля и отличаются в других. возможно, вы захотите продать машину или дом. У вас будут поля title, created_date, description, … и т.д., Которые являются общими . Но у вас будут поля для автомобиля, которые не используются для дома и так далее. Тип объявлений составляет около 12 объявлений типа «дом», «автомобиль» или «компьютер». Существует два подхода:

  1. Чтобы использовать базовую модель и наследовать ее всем остальным 12 типам объявлений, в базе данных будет 13 таблиц.
  2. Использовать единую модель, содержащую все поля всех типов объявлений, и в итоге получится одна таблица и около 70 полей (столбцов в таблице).

Второй вариант кажется простым со стороны Django CRUD, особенно при одновременном запросе и поиске по всем объявлениям. Какой выбор лучше? Если я выберу второй вариант, будут ли у меня какие-либо проблемы с производительностью, связанные с sql?

Комментарии:

1. Лучшие практики и удобство обслуживания приведут вас к тому, что вы пойдете по пути # 1. Если вы создадите новое объявление в будущем, вы добавите новую таблицу, а не измените существующую. Если вы хотите запросить только один тип ad, то вы запрашиваете соответствующую таблицу и вам не нужно отфильтровывать остальные. Если вы хотите перечислить все объявления, вы можете просто использовать родительский элемент и получить связанные поля. Да, было бы довольно сложно, если бы вам нужно было получить все 70 полей из каждой таблицы, но поскольку каждое объявление в любом случае имеет разные поля, ваши показы в любом случае должны быть разными. #1.

2. Спасибо Мэтту. Дело в том, что при отображении списка объявлений мне может потребоваться доступ к некоторым полям, связанным с конкретным объявлением, таким как тип и модель автомобиля или номера дома и ванны. В этом случае я получу много внутренних соединений, и это может быть дорогостоящим для базы данных. Если мне нужно добавить новый тип, я просто добавляю столбцы в существующий.table. В этом случае я буду запрашивать одну таблицу со всеми полями независимо от типа, а на дисплее я проверю тип объявления и создам соответствующий шаблон. Но меня беспокоит то, что одна большая таблица лучше или хуже многих таблиц с точки зрения запросов.

3. В конечном счете вы говорите о миллисекундах. Вы должны сосредоточиться на ремонтопригодности кода.