Database 高效查询关联对象模式的扩展详细信息 细节 一个人有许多目标 目标s有人员-关于活动的具体细节s 活动包含通用信息,如世界记录 人员可以组织一个事件来尝试实现目标 人邀请其他人观看带有邀请的事件 模式

Database 高效查询关联对象模式的扩展详细信息 细节 一个人有许多目标 目标s有人员-关于活动的具体细节s 活动包含通用信息,如世界记录 人员可以组织一个事件来尝试实现目标 人邀请其他人观看带有邀请的事件 模式,database,database-design,sqlalchemy,declarative,Database,Database Design,Sqlalchemy,Declarative,注意:示例架构图上只列出了backref,用“(fk)”表示。箭头表示正常关系 问题: 我希望立即显示所有邀请的大多数事件、目标和活动详细信息(不考虑状态,但状态仍然需要) 在我尝试处理这样的连接之前,有没有更好的方法来表示问题?我相信SQL端的人->邀请,这非常简单。我只使用一个id号(针对个人)构建了一些测试表;其余的钥匙都是天然钥匙。查看此查询的执行计划 select I.*, A.activity_placeholder, E.event_location, O.objective_p

注意:示例架构图上只列出了backref,用“(fk)”表示。箭头表示正常关系

问题: 我希望立即显示所有
邀请
的大多数
事件
目标
活动
详细信息(不考虑状态,但状态仍然需要)


在我尝试处理这样的连接之前,有没有更好的方法来表示问题?我相信SQL端的
->
邀请
,这非常简单。我只使用一个id号(针对个人)构建了一些测试表;其余的钥匙都是天然钥匙。查看此查询的执行计划

select I.*, A.activity_placeholder, E.event_location, O.objective_placeholder
from event_invitations I
inner join activity A 
        on (I.activity_name = A.activity_name)
inner join events E 
        on (I.personal_id = E.personal_id 
        and I.activity_name = E.activity_name
        and I.objective_deadline = E.objective_deadline
        and I.event_time = E.event_time)
inner join personal_objectives O 
        on (I.personal_id = O.personal_id
    and  I.activity_name = O.activity_name
    and  I.objective_deadline = O.objective_deadline)
where I.person_invited_id = 2;
显示dbms(PostgreSQL)在整个过程中使用索引,但事件邀请的顺序扫描除外。我确信这是因为我使用的数据很少,所以所有这些表都很容易放入RAM中。(当表适合RAM时,扫描一个小表通常比使用索引更快。)

优化器将查询的每个部分的成本估计为0.00,再好不过了。实际运行时间小于0.2毫秒,但这并不意味着什么

我相信你能把这转化为炼金术。如果你想让我发布我的表格和样本数据,请告诉我