我的应用程序有一些 页 ,它们拥有一些 属性 。 页面 可以 链接 。我希望我的数据库结构能够最好地支持搜索 链接 ,其中包含属于的某些 属性 页 即可。链接是Pages的集合,Page可以有很多链接。
我的数据库结构目前如下
PAGE:
id
title
content
-
ATTRIBUTE:
id
page_id
name
value
-
LINK:
id
title
-
PAGE_LINK:
page_id
link_id
所以说我的食谱 Page 名为'Mash Potato'和成分 Page 称为'Potato',其中包含 链接 ,名为'Potato Link'。 'Mash Potato'具有以下 属性 - 膳食:晚餐,风味:咸味,难度:简单, AND 'Potato'具有 属性 - 季节:秋季,价格:便宜。
我希望能够找到 Cheap,Savory和秋季季节的链接,并获得“ Potato Link”的回复。
如何在SQL中编写该查询,这是查询此类内容的最佳数据库结构吗?
答案 0 :(得分:1)
您的属性已附加到网页上。因此,您可以通过检查页面是否存在这些属性来搜索具有某些属性的页面。查找页面如下所示:
Select Page.ID
From Page
where EXISTS
(Select *
From Attributes
Where Page_Id = Page.ID
and ( (Name = 'Season' and Value = 'Autumn')
or (Name = 'Flavour' and Value = 'Savory')
... etc. ...
)
如果您想查找链接,那么您可以将其加入PAGE_LINK(如果您愿意,也可以加入LINK。)
Select Page.ID
From Page
Join Page_Link PL on PL.Page_ID = Page.ID
Join Link on Link.ID = PL.Link_ID
where EXISTS
(Select *
From Attributes
Where Page_Id = Page.ID
and ( (Name = 'Season' and Value = 'Autumn')
or (Name = 'Flavour' and Value = 'Savory')
... etc. ...
)