Hir*_*uri 4 django django-models
我正面临两难境地,我正在创建一个新产品,我不想弄乱我在数据库中组织信息的方式。
我的模型有这两个选择,第一个是使用外键将它们链接在一起。
Class Page(models.Model):
data = JsonField()
Class Image(models.Model):
page = models.ForeignKey(Page)
data = JsonField()
Class Video(models.Model):
page = models.ForeignKey(Page)
data = JsonField()
etc...
Run Code Online (Sandbox Code Playgroud)
第二个是将所有内容保留在Page的 JSONField 中:
Class Page(models.Model):
data = JsonField() # videos and pictures, etc... are stored here
Run Code Online (Sandbox Code Playgroud)
一个比另一个更好,为什么?这对我将来组织数据库的方式将是一个巨大的帮助。
我想也许第二个选项可能会更慢,因为每次发生变化时,所有 json 都会被覆盖,但这会产生巨大的差异还是我说的是错误的?
AJSONField混淆了底层数据,使得编写可读代码和充分利用 Django 的内置 ORM、验证和其他细节(ModelForm例如 s)变得困难。虽然它可以灵活地将您想要的任何内容保存到数据库中(例如,在添加新字段时无需迁移数据库),但它消除了显式字段的清晰度,并且很容易在以后引入错误。
例如,如果您开始在数据中保存一个新键,然后尝试在代码中访问该键,则旧对象将不具有它,并且您可能会发现应用程序崩溃,具体取决于您正在访问的对象。如果您使用单独的字段,则不会发生这种情况。
我总是尽量避免它,除非没有其他办法。
通常我在两种情况下使用 JSONField:
如果您使用 PostgreSQL 作为关系数据库,它会被优化为在 JOIN 上表现出色,因此使用ForeignKeys 实际上是一件好事。在您的代码中使用select_related和prefetch_related来优化查询的数量,但即使对于数百万个条目,查询本身也能很好地扩展。
| 归档时间: |
|
| 查看次数: |
1226 次 |
| 最近记录: |