gpt4 book ai didi

sqlalchemy - 将一个模型与单个关系中的多个其他模型相关联

转载 作者:行者123 更新时间:2023-12-03 00:02:43 26 4
gpt4 key购买 nike

我有一个模型 Thing,它可以由多种类型的 Thing 进行子类化,例如 PointyThingTastyThing。我有第二个模型,Instance,它与 Thing 一对多相关(一个 Instance 可能是单个实例的类型) Thing,但给定 Thing 会有许多实例)。然后,Instance 与一个 Player 相关(每个 instance 有一个 Player,但有一个 player code> 有许多带有 backref 的 Instance,以便 Player 可以调用它的 .inventory 属性来查看它拥有什么。

一切都很好,但我还有一个模型Place。我希望 Place 也拥有 Instance,就像 Player 拥有 instance 一样。

最好创建一个与 Instance 模型链接的 Owner 模型,然后子类化以获得 PlayerPlace 或 SQLAlchemy 中一些我还不知道的未知方法?

最佳答案

我认为您所要求的最佳解决方案取决于许多因素。

从技术上讲,如果我单独查看您的示例,该解决方案看起来像是一个相当不错的hack,它避免了创建另一个关系表。如果您永远不会使用多态支持进行查询,那么这可能会很好。然而它仍然是一个黑客。想象一下,稍后您用更多的子类扩展您的 Player 模型,并且您可能开始使用多态查询,并且您将始终需要问自己“它将如何影响我的黑客”? 。即使一切仍然可以正常工作(现在我无法举出会破坏你逻辑的例子),你仍然需要小心。
但让我们看看这个 hack 有什么好处?我们节省了一个 relationship 表,但实际上您为您的 Owner 模型引入了另一个表(我假设 Concrete Table Inheritance ),那么真正的增益是多少?

另一方面,我想知道您的Instance表实际上不应该是三元关系吗?我假设 Thing 的每个实例都存储在某个 Place 中,并且可能属于 Player,因此它可能只是一张看起来像的表像:

Instance[
ID primary_key,
Thing_ID (FK) NOT NULL,
Place_ID (FK) NOT NULL,
Person_ID (FK) NULL
]

请注意,Person_ID 可为空,因为我假设事物的实例在分配之前可能不属于任何人。但在您的情况下,它可能始终为 NOT NULL

希望这有帮助。了解您决定走哪条路以及原因会很好。

关于sqlalchemy - 将一个模型与单个关系中的多个其他模型相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10406604/

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