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

san*_*lto 6 database architecture django database-design

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

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

我已经检查了一些外部可插拔的应用程序,那些也使用了"模型优先"的做法.

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

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

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

Dan*_*man 12

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

至于指标,你可以沿着创建它们与你的模型(带之类的东西db_indexunique_together,或者您可以通过使用像南数据库迁移后添加.


Der*_*wok 7

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

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

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

  • 触发器:Django代码或MySQL触发器
  • 索引:可以用.指定 db_index=True
  • 唯一约束:unique = Trueunique_togther = (('field1', field2'),)复合唯一约束.

使用Django而不是编写sql的优点是,您可以将自己从您正在使用的特定数据库中抽象出来.换句话说,你可能会在SQLite一天,开关PostgresQLMySQL下一个和变化将是相对简单的.

例:

当你运行这个:

python manage.py syncdb 
Run Code Online (Sandbox Code Playgroud)

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

python manage.py sqlall 
Run Code Online (Sandbox Code Playgroud)

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

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