gpt4 book ai didi

Python:在数据存储中建模一对一关系

转载 作者:太空狗 更新时间:2023-10-30 02:49:42 26 4
gpt4 key购买 nike

假设我们有两个模型:UserToken。一个用户可能只有一个Token,一个Token只能属于一个用户。

来自关系数据库,以下似乎是实现它的方式:

class User(db.Model):
name = db.StringProperty()

class Token(db.Model):
name = db.StringProperty()
owner = db.ReferenceProperty(User)

这当然也会创建 User.token_set,这是一个 db.Query。但是我真的很想只使用 User.token 而不是 User.token_set.get() 来访问 token ,那么如何......

class User(db.Model):
name = db.StringProperty()
token = db.ReferenceProperty(Token)

class Token(db.Model):
name = db.StringProperty()
owner = db.ReferenceProperty(User)

现在我可以双向访问它们:User.token & User.owner。忽略我拥有那些自动创建的 .token_setuser_set 的事实。

这有什么问题吗?在逻辑方面,在性能方面?

也许我什至不应该有两个模型。实际上,它们都包含四五个属性。他们应该只是一个吗?什么时候应该放弃一对一关系而合并到一个模型中?

感谢您的任何输入!

最佳答案

这是应用引擎数据存储。这不是sql。您应该将系统使用的数据分组在一起。大概你有一些地方可以一起使用用户和 token ,并且由于多对一没有问题,所以它们可以放在同一个模型实例中。这将为您提供更好的性能(例如,通过 token 更简单地检索用户)和更容易处理一致性(更新 token 和用户将在单个事务中)。

我不知道这里是否可以接受自链接,所以如果不能,也许有人会编辑它,但我写了 http://acooke.org/cute/LessonsLea2.html尝试收集我在数据存储方面的经验。您可能会发现它很有用。

[编辑:一种思考方式:您不是在建模数据。您正在编写一个旨在扩展的系统。那 - 而不是建模数据 - 是驱动一切的动力。我并不是说这是个好主意,但这是 Appengine 所做的。如果您的首要任务是建模数据 - 例如,如果您希望多个应用程序以不同的方式使用您的数据 - 那么您不应该使用 appengine。]

关于Python:在数据存储中建模一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6996504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com