我该如何为Django设计数据库?

4
我喜欢使用图形用户界面应用程序设计ERD数据库。目前我正在使用免费的MySQLWorkbench中的EER Diagram。
一旦我喜欢ERD的外观,我就会在MySQLWorkbench中进行正向工程以创建实际数据库。然后,我使用django-admin.py inspectdb检查MySQL数据库,以反向工程为Django的models.py生成Python代码片段输出。
但是,我必须接受inspectdb的输出并手动编辑它以符合我的要求。我特别不喜欢手动消除许多对多关系中的每个连接表。
是否有一个好的(最好是免费的)GUI ERD设计程序专门为Django设计?

也许你可以将inspectdb复制到someapp/management/commands/my_inspectdb.py中并进行适当修改。 - jpic
2
你需要在GUI中设计数据库的特定原因是什么?如果你需要一个图表,为什么不在Django中完成所有模型,然后从现有的数据库生成一个图表呢? - miki725
从Django创建数据库,然后在MySQL Workbench中进行反向工程绘图,这样会更容易些,能省下很多时间。 - Mariusz Jamro
4
等一下,我有点困惑。像大多数人一样,我是一个视觉感知型的人,所以通过可视化的方式来理解外键和表之间的关系比在命令行或Python脚本中尝试理解更容易。除非数据库只有很少的几个表,否则很难在models.py中从零开始设计数据库。 - hobbes3
请参见 https://dev59.com/m0rSa4cB1Zd3GeqPXIh1,该链接涉及管理Django模型的GUI设计师。 - enticedwanderer
2个回答

7
如果你想在数据库层面设计你的模型,就像你描述的那样,你需要做的就是设计你的SQL,然后将其转换为Django模型。这不是设计Django应用程序的正常方式:通常你会根据自己的要求设计模型,并只在需要解决一些性能问题时花费大量精力进行架构设计。Django模型实际上并不是关系数据库的抽象:它们是你的应用程序持久化对象的抽象,恰好是在关系数据库之上实现的。
想要/需要进行显式架构设计并没有什么问题,但这使你成为了一个异类(大多数Web开发人员并不这样做),因此你很难找到适合你需求的工具。
最接近的东西是Django命令扩展中的graph_models命令。这让你可以可视化你的模型(你仍然需要用Python代码编写它们,但视觉表示将帮助你更快地迭代)。

4
如果您没有明确设计模式,那么如何判断您的 Django 应用程序中的表是否已经适当地规范化? - hobbes3
6
许多Django/PHP/RoR的开发者并不关心规范化,这并不是对或错,但是这是文化。许多Web应用程序的数据库非常简单,规范化并不重要,或者反规范化实际上有助于性能。典型(不总是正确的)的态度是从简单的东西开始,只有当存在性能问题时,才会改变数据库模式以适应数据库服务而不是人类程序员。 - kdt
3
非常感谢您的文化解释。不关心规范化... 哇,这是我从数据库书籍中没有学到的东西哈哈。但我喜欢你说的保持简单。对我来说很有意义 :-). - hobbes3
1
@hobbes3 正规化不是目标,而是了解数据库设计中权衡的工具。 - Marcin

4

通常情况下,不需要为django应用程序设计数据库布局,这样做可能会导致子优化的设计。

相反,只需设计你的模型类,考虑如何查询它们以及ForeignKey(和其他关系类型)的工作方式即可。如果没有这样做,你可能会发现你的应用程序遭受概念不匹配的困扰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接