通常当你有一个带有selfrefernece的表时,比如在树中,你有一个属性作为外键,它指向表的主键。 (比如文档中的Adjacency List Relationships示例)
但是,我有一个自然键,其工作方式如下: “”是根
因此树中的每个级别都有一个字符,每个节点的子节点都是具有相同开头且添加了一个字符的子节点。这被称为“物化钥匙”
如何在不添加额外属性的情况下使用SQLAlchemy映射器来引用父级?
注意:我只对阅读这种关系感兴趣,如果像node.children.append(child)
这样的东西没那么好的话。另外我坚持使用版本0.4.8,但如果在这个版本中不可能,但只有在较新的版本中,我可能会努力更新。
修改 我在SA mailinglist上得到了第一个答案。它有效,但它不像我希望的那样基于映射器(例如使用eagerload)
答案 0 :(得分:1)
我确实理解了这个问题的约束,但你为什么要避免使用额外的密钥呢?当然,它是冗余信息,但根据您的数据(行数,密钥的平均长度),拥有额外的密钥实际上可能会提高您在SELECT
上的性能,并且您可以使用eager-loading SA中的关系以最微不足道的方式。
例如,您可以执行以下操作:
PERSISTENT COMPUTED
列,这样您的客户端甚至不必提供父键,它将使用公式自动从KEY列计算(剪切最后一个字符) 。在这种情况下,您在此列上有一个数据库索引和非常快速的关系检索。