我正在建立的网站有一个表格,用于存储网站上传图像的所有信息。这些上传的图像可以来自不同的资源,例如留言板,新闻栏目或议程中的项目。
当然,我希望图像继承其所属资源的权利。例如:如果不允许用户A查看留言簿,我不希望他能够通过转到image / view / id / 12来查看留言簿上发布的图像(这将是图像请求使用它在留言簿中。)
我现在拥有的是系统记住所使用的资源(在本例中是留言簿),image-id与资源ID相关联。但是我不知道图像连接到哪个留言簿帖子(我当然知道它的相反方式)。
在SQL中是否有办法将一个表字段连接到另一个表中的字段,我连接到哪个表可能会根据第一个表的字段值之一而变化? < / em>
在我的情况下,我想将图像连接到资源,这可能是表格gb_posts中的留言板帖子或表议事项目中的议程项目。
或者这是解决问题的一种愚蠢的方法,我不应该为上传的图像使用一个表,而是将图像附加到资源上(例如,作为表中的列)?听起来好像使用一个表在使用中至少要慢得多(但我会在一个地方对所有图像进行很好的概述)。
我希望你们能帮助我。
编辑:额外说明:db model 我将尝试解释它如何最好地工作。
首先:我使用Zend Framework,因此我也使用Zend_Acl来处理priveleges。
我的数据库结构: - 用户连接到角色(直接或通过连接到连接到角色的组) - 有一个表资源包含连接到priveleges的所有资源。例如:留言簿是资源,查看或编辑是priveleges。在控制器/动作旁边,该表中还可以有其他资源,例如议程中的类别或文件位置。 - 角色与privelege相关联
例如,当请求查看留言簿时,我可以检查是否允许用户。
简而言之: 用户 - &gt;角色 - &gt; priveleges&lt; - resources
当用户添加带有图像的留言板帖子时,使用的资源(在这种情况下保存了留言簿): guestbook_posts - &gt;图像 - &gt;资源
我希望这能解释一下我的数据库模型,如果没有,我会尝试创建表格的图像。
答案 0 :(得分:0)
听起来像是想要foreign key constraint。
更新:显然,完全误解了这个问题。
这里有两种方法:
目前的情况是,架构中没有任何内容可以禁止从多个资源链接相同的图像。如果需要,那么外键约束和反向引用的索引可能是最好的解决方案,虽然它不能很好地扩展,并且需要额外的计算(因为图像上的权限需要是权利的联合。参考资源)。
另一种方法是创建某种继承模式,其中有一个表列出了“资源”(实际上只包含标识符),该表从实际资源表和images表中作为外键引用;唯一不能在纯SQL中表达的约束是不同的资源可能不共享相同的标识符。
答案 1 :(得分:0)
我不得不承认我没有完全理解你想要实现的模型,但有一个有趣的引用......
但是我不知道哪个 留言簿发布图像已连接 (我当然知道另一种方式 周围)强>
如果您以某种方式了解关联,那么您应该可以在两个方向上使用关联吗?我假设你有一个包含“post_id,image_id”或其他什么的表?
表可能只是首先将post_id索引,在这种情况下,通过image_id查询该表可能会很慢,但是你可以先用image_id包含一个新索引吗?
如果您可以提供目前所拥有的表格结构的示例,以及您无法满足的查询示例,我们可以为您提供进一步的帮助。
答案 2 :(得分:0)
创建两个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