gpt4 book ai didi

database-design - web2py中的多对多关系

转载 作者:行者123 更新时间:2023-12-01 12:52:34 25 4
gpt4 key购买 nike

我的 web2py 项目中有一个与此类似的文章表:

db.define_table('articles',
Field('created_on', 'datetime', default = datetime.today(),
required = True, notnull = True,
requires = [IS_NOT_EMPTY(),
IS_DATETIME(format=T('%Y-%m-%d %H:%M:%S'))]),
Field('article_en', 'text', required = True,
notnull = True, requires = IS_NOT_EMPTY()))

还有一个跟踪上传文件的:

db.define_table('files',
Field('filename', 'string', required = True, notnull = True),
Field('uploaded_data', 'upload', autodelete = True,
required = True, notnull = True, requires = IS_NOT_EMPTY()),
Field('created_on', 'datetime', required = True, notnull = True))

现在我想获得一篇文章使用的每个文件的引用,以及一个文件所属的每篇文章的引用。我需要这个,这样我就可以轻松删除未使用的文件,而不会因为被忽视的关系而搞乱文章。

更直接地说,这种关系非常接近于此:每篇文章都有几个文件,每个文件链接到不同的文章。

根据我从 web2py 书中收集到的信息,没有直接支持多对多关系。为了解决这个问题,一个简单的解决方法是使用处理关系的中间表,但显然我不是数据库大师,所以我几乎不知道应该怎么做。

一些帮助将不胜感激!

最佳答案

web2py 确实支持 many-to-many relationships .为此,您可以定义一个链接其他两个表的中间表:

db.define_table('article_files',
Field('article', db.articles),
Field('file', db.files))

这不是解决方法,而是在 RDBMS 中处理此类关系的标准方法。请注意,web2py 使用数据库抽象层 (DAL),而不是 ORM。 ORM 通常不需要您显式定义中间表,但它仍会在幕后创建一个。

您也可以考虑使用 list:reference字段。

关于database-design - web2py中的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335410/

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