繁体   English   中英

使用字段值选择要联接的数据库表

[英]Choose a database table to join with, using a field value

我正在建立的网站上有一个表,用于存储网站上已上传图像的所有信息。 这些上载的图像可以来自不同的资源,例如留言簿,新闻栏目或议程中的项目。

当然,我希望图像继承其所属资源的权利。 例如:如果不允许用户A查看留言簿,我不希望他能够通过转到image / view / id / 12来查看留言簿上发布的图像(这是使用它的图像请求)在留言簿中)。

我现在所拥有的是,系统会记住图像ID与资源ID耦合使用的资源(在本例中为留言簿)。 但是我不知道图像连接到哪个留言簿(当然我也知道)。

在SQL中,有没有一种方法可以将一个表字段连接到另一个表中的字段,我连接到哪个表可以根据第一个表的字段值之一而变化?

就我而言,我想将图像连接到资源,该资源可以是表gb_posts中的留言簿帖子,也可以是表议程中的议程项目。

还是这是解决问题的一种愚蠢方法,我是否不应该对上载的图像使用一个表,而是将图像附加到资源(例如,作为表中的一列)? 听起来使用一张桌子的使用速度至少要慢很多(但是我会在一处对所有图像进行全面的概述)。

我希望你们能帮助我。

编辑:额外的解释:数据库模型我将尽力解释一切如何工作。

首先:我使用Zend Framework,因此,我也使用Zend_Acl处理特权。

我的数据库结构:-用户连接到角色(直接或通过连接到与角色连接的组)-有一个表资源,其中包含与特权连接的所有资源。 例如:guestbook是一种资源,view或edit是特权。 在控制器/动作旁边,此表中还可以包含其他资源,例如议程中的类别或文件位置。 -角色已连接到特权

例如,当请求查看留言簿时,我可以检查是否允许该用户。

简而言之,例如:用户->角色->特权<-资源

当用户添加带有图像的留言簿帖子时,已使用的资源(在这种情况下,留言簿已保存):guestbook_posts->图片->资源

我希望这能对我的数据库模型有所解释,否则,我将尝试创建表的图像。

听起来好像您想要一个外键约束

更新:显然完全误解了这个问题。

这里有两种方法:

  1. 从目前的情况来看,架构中没有任何东西可以禁止从多个资源链接同一图像。 如果需要的话,外键约束和用于反向引用的索引可能是最好的解决方案,尽管它无法很好地扩展,并且需要进行额外的计算(因为图像上的权限必须是参考资源)。

  2. 另一种方法是创建某种继承模式,其中有一个表列出了“资源”(实际上仅包含标识符),该表被引用为实际资源表和图像表中的外键。 不能用普通SQL表示的唯一约束是不同的资源可能不会共享相同的标识符。

我不得不承认我无法完全理解您想要实现的模型,但是有一个有趣的报价...

但是我不知道图像连接到哪个留言簿(当然我也知道)

如果您以一种方式了解关联,那么您应该可以双向使用关联吗? 我假设您有一个包含“ post_id,image_id”之类的表?

可能是该表仅首先被索引为post_id,在这种情况下,通过image_id查询该表可能会很慢,但是您可以仅使用image_id首先包含一个新索引吗?


如果您可以提供当前具有的表结构示例,而您无法提供完整的查询示例,我们也许可以为您提供进一步的帮助。

创建两个SELECT子句,每个子句都具有对正确表的正确联接,然后使用UNION语句将两个SELECT子句的输出组合在一起。

SELECT field1, field2 
FROM table1 
JOIN table2 on table1.PK = table2.FK
WHERE table1.selector = 1

UNION SELECT field1, field2 
FROM table1 
JOIN table3 on table1.PK = table3.FK
WHERE table1.selector = 2    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM