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

Posted

技术标签:

【中文标题】我应该如何为 Django 设计数据库?【英文标题】:How should I design the database for Django? 【发布时间】:2012-03-16 05:43:25 【问题描述】:

我喜欢使用 GUI 应用程序来使用 ERD 设计数据库。目前我正在使用免费mysqlWorkbench的EER图。

一旦我喜欢 ERD 的外观,我就Forward Engineer MySQLWorkbench 中的 ERD 来创建实际的数据库。然后,我使用django-admin.py inspectdb 对 MySQL 数据库进行内省,以 逆向工程师 输出 Django 的models.py 的 Python sn-p 代码。

但是我必须获取inspectdb 输出并根据自己的喜好手动编辑它。我真正不喜欢做的一个特定部分是手动从多对多关系中消除每个连接表。

是否有专门为 Django 设计的好的(最好是免费的)GUI ERD 设计程序?

【问题讨论】:

也许您可以将 inspectdb 复制到 someapp/management/commands/my_inspectdb.py 并进行调整。 您需要在 gui 中设计数据库的任何特殊原因?如果需要图表,为什么不在 django 中做所有模型,然后从现有数据库生成图表? 从 Django 创建数据库并在 MySQL 工作台中对图表进行逆向工程不是更容易吗?这将为您节省大量时间。 等等,我有点困惑。像大多数人一样,我是一个视觉型的人,因此我更容易直观地找出所有外键和关系,而不是试图在命令行或 Python 脚本中找出它。除非数据库只有几张表,否则我很难在models.py中从头设计数据库。 见***.com/questions/1806681/… 【参考方案1】:

如果您希望按照您所描述的方式在数据库级别设计您的模型,您将需要这样做:设计您的 SQL,然后将其转换为 Django 模型。

这不是设计 Django 应用程序的常规方式:通常您会按照自己的意愿设计模型,并且只有在需要解决一些性能问题时才会在模式设计上投入大量精力。 Django 模型实际上并不是关系数据库的抽象:它们是应用程序持久对象的抽象,而这些对象恰好是在关系数据库之上实现的。

想要/需要进行明确的架构设计并没有错,但它会让你有点离群(大多数网络开发人员不会),因此你很难找到适合你需要的工具。

最接近的是graph_models 命令,它是Django command extensions 的一部分。这让您可以可视化您的模型(您仍然使用 Python 代码编写它们,但可视化表示将帮助您更快地迭代)。

【讨论】:

如果你没有明确地设计模式,你怎么知道你的表在你的 Django 应用程序中被适当地规范化了? hobbes3:相当。许多 Django/php/RoR 人并不关心规范化——这不一定是对或错,但这是文化。许多 Web 应用程序的数据库非常简单以至于无关紧要,或者非规范化实际上有助于提高性能。典型的(并不总是正确的)态度是从简单的事情开始,只有在出现性能问题时才更改架构以适应数据库服务器而不是人类程序员 非常感谢文化解释。不关心规范化......哇,这不是我从数据库书籍中学到的东西哈哈。但我喜欢你所说的保持简单。这对我来说很有意义:-)。 @hobbes3 标准化不是目标。规范化是一种了解数据库设计权衡的工具。【参考方案2】:

通常不会为 django 应用程序设计数据库布局,这样做可能会导致设计欠佳。

相反,只需设计您的模型类,考虑您将如何查询它们,以及 ForeignKey(和其他关系类型)的工作方式。如果您不这样做,您可能会发现您的应用存在概念不匹配的问题。

【讨论】:

以上是关于我应该如何为 Django 设计数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 django 中的每个匿名用户提供一些唯一的 id

如何为 Django 启用 WSGIPassAuthorization?

如何为 Django 应用程序配置数据库权限?

我如何为 django 1.8 编写初始数据

如何为 Django 模型定义默认数据?

如何为 django 可重用应用程序启动测试?