繁体   English   中英

Django模型中的属性数

[英]Number of attributes in Django Models

我搜索了很多东西,却没有找到我想要的东西。

在Django中,模型类的最佳概念是什么?

要扩展User,最好有一个带有多个属性的类,或者将这个类分解为几个带有几个属性的类? 我现在正在使用django ORM。

假设我有一个名为Person的类可以扩展User,那会更好:

class Person(models.Model):
    user = foreingkey(User)
    attribute1 =
    ...
    attributeN =

或者,这样做会更好:

class PersonContac(models.Model):
    user = foreingkey(User)
    attribute1 =
    ...
    attribute3 =

class PersonAddress(models.Model):
    user = foreingkey(User)
    attribute1 =
    ...
    attribute3 =

class PersonHobby(models.Model):
    user = foreingkey(User)
    attribute1 =
    ...
    attribute3 =

我的每个视图都将使用较小类的数据(可能)。

随着时间的流逝,at亵人数会扩大。

我想做的是一次,然后触摸最小的可能性。 用户可以填写各种属性,而并非必需。 用户数量是不确定的(可以很多)。

我对长期性能和维护感到担忧。

如果有人可以解释我,那对我的代码会更好,以及为什么。 使用Django ORM,总的来说会更好(更少的类/更多的属性,或者更多的类/更少的属性)。

最好是,我的视图仅使用一个模型类的数据,或者没有(或几乎没有)区别?

编辑:

在急于写作的时候,我在课堂上使用了坏名字。 这些属性都不是“多对多”字段,“用户”每个属性只有一个值,即为空白。

属性的数量可以随着时间的流逝而扩展,但数量却不多。

将仅特定于一个用户的任何数据直接放入模型中。 可能是“名称”,“生日”之类的东西。

不过,使用单独的模型可能会更好地解决某些问题。 例如,多个人可能具有相同的兴趣爱好,或者一个用户可能具有多个兴趣爱好。 使它成为一个单独的类,并在必要时使用ForeignKeyField或ManyToManyField。

无论您选择什么,真正的诀窍是优化数据库查询的数量。 django-debug-toolbar在这里很有帮助。

默认情况下,拆分模型将导致多个数据库查询,因此请务必仔细阅读精简相关的select

检索查询集时,还要看看defer方法。 如果您知道不会在特定视图中使用这些字段,则可以排除其中一些不必要的字段。

我认为这完全取决于您的界面。

如果必须在单个页面中公开用户的所有数据,并且只有一个大型模型,则最终将只有一个sql联接,而不是每个较小的表一个。

相反,如果只需要其中一些属性,则将用户表与较小的属性连接在一起,则可能会在内存使用方面获得较小的性能提升,因为您不必加载很多不需要使用的属性。被使用(尽管可以通过values来缓解( 此处提供文档

同样,如果您的属性不是强制性的,则至少应了解要填充多少个属性。 拥有几乎空的记录的大表可能会浪费空间。 也许是一个问题,也许不是。 这取决于您的硬件资源。

最后,如果您真的认为自己的属性可以扩展很多,则可以尝试EAV方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM