Django: лучшие практики для проектирования баз данных - PullRequest
6 голосов
/ 23 сентября 2011

Я запускаю проект и решил использовать Django.

Мой вопрос касается создания базы данных. Я прочитал учебник и некоторые книги, и они всегда начинают создавать модели, а затем синхронизировать базу данных. Должен сказать, это немного странно для меня. Я всегда начинал с БД, определяя схему, а после этого создавал абстракции БД (модели, сущности и т. Д.).

Я проверил некоторые приложения с возможностью внешнего подключения, и те, кто использует эту модель "сначала модель", тоже.

Я вижу некоторые преимущества для подхода "модель в первую очередь", такие как переносимость, повторное развертывание и т. Д.

Но я также вижу некоторые недостатки: как создавать индексы, вид индекса, триггеры, представления, SP и т. Д.

Итак, как вы начинаете проект в реальной жизни?

Ответы [ 2 ]

12 голосов
/ 23 сентября 2011

Триггеры, представления и хранимые процедуры на самом деле не являются частью мира Django. Это можно сделать, чтобы использовать их, но это больно и ненужно. Разработчики Django придерживаются мнения, что бизнес-логика принадлежит Python, а не вашей базе данных.

Что касается индексов, вы можете создавать их вместе со своими моделями (с такими вещами, как db_index и unique_together, или вы можете добавить их позже с помощью миграций базы данных, используя что-то вроде South.

7 голосов
/ 23 сентября 2011

В основном мы не пишем SQL (например, создаем индекс, создаем таблицы и т. Д.) Для наших моделей, а вместо этого полагаемся на Django, чтобы сгенерировать его для нас.

Совершенно нормально начинать с разработки вашего приложения на уровне модели, поскольку вы можете положиться на Django для создания нужной базы данных sql, необходимой вам.

Однако Django предоставляет различные функциидля репликации этих функций базы данных:

  • триггеры: код Django или триггеры MySQL
  • индексы: можно указать с помощью db_index=True
  • уникальные ограничения: unique = True или unique_togther = (('field1', field2'),) для составного уникального ограничения.

Преимущество использования Django вместо написания sql состоит в том, что вы абстрагируетесь от конкретной базы данных, которую вы используете.Другими словами, вы можете быть на SQLite один день и переключиться на PostgresQL или MySQL на следующий, и изменение будет относительно безболезненным.

Пример:

Когда вы запускаете это:

python manage.py syncdb 

Django автоматически создает таблицы, индексы, триггеры и т. Д., Он должен поддерживать созданные вами модели.Если вам не нравится, когда django создает вашу базу данных, вы всегда можете использовать:

python manage.py sqlall 

. Это выведет на экран SQL-операторы, которые Django должен будет иметь для правильного функционирования своих моделей.Существуют и другие команды sql, которые вы можете использовать:

см .: https://docs.djangoproject.com/en/1.3/ref/django-admin/#sql-appname-appname

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