Django:数据库设计的最佳实践

时间:2011-09-23 15:09:15

标签: database django database-design architecture

我正在开始一个项目,我决定使用Django。

我的问题是关于数据库的创建。我已经阅读了教程和一些书籍,并且总是开始创建模型,然后同步DataBase。我要说,这对我来说有点奇怪。我总是从数据库开始,定义模式,然后创建我的数据库抽象(模型,实体等)。

我已经检查了一些外部可插拔应用程序,并且那些也使用了“模型优先”练习。

我可以看到“模型优先”方法的一些优点,如可移植性,重新部署等。

但我也看到了一些缺点:如何创建索引,索引类型,触发器,视图,SP等。

那么,你如何开始一个现实生活中的项目?

2 个答案:

答案 0 :(得分:12)

触发器,视图和存储过程实际上并不是Django世界的一部分。它可以使用它们,但它是痛苦的和不必要的。 Django的开发人员认为业务逻辑属于Python,而不属于您的数据库。

对于索引,您可以将它们与模型一起创建(使用db_indexunique_together之类的内容,也可以稍后通过使用South之类的数据库迁移来添加它们。

答案 1 :(得分:7)

大多数情况下,我们不为我们的模型编写SQL(例如创建索引,创建表等等),而是依靠Django为我们生成它。

从模型层开始设计应用程序是绝对可以的,因为您可以依靠Django来生成所需的正确数据库sql。

但是,Django确实为您提供了各种函数来复制这些数据库函数:

  • 触发器:Django code or MySQL triggers
  • 索引:可以使用db_index=True
  • 指定
  • 唯一约束:unique = Trueunique_togther = (('field1', field2'),)用于复合唯一约束。

使用Django而不是编写sql的优点是,您可以将自己从您正在使用的特定数据库中抽象出来。换句话说,您可能有一天会在SQLite,并在下一个时间切换到PostgresQLMySQL,而且此更改将相对轻松。

示例:

运行时:

python manage.py syncdb 

Django自动创建表,索引,触发器等,它需要支持您创建的模型。如果您对django为您创建数据库感到不舒服,可以随时使用:

python manage.py sqlall 

这将打印出Django需要具有的SQL语句,以使其模型正常运行。您还可以使用其他sql命令:

请参阅:https://docs.djangoproject.com/en/1.3/ref/django-admin/#sql-appname-appname