0

我的应用程序有一些Pages拥有一些Attributes页面可以链接在一起。我希望我的数据库结构能够最好地支持搜索包含属于Pages的某些Attributes的Links。链接是页面的集合,页面可以有许多链接。


我的数据库结构目前如下

PAGE:
    id
    title
    content

-

ATTRIBUTE:
    id
    page_id
    name
    value

-

LINK:
    id
    title

-

PAGE_LINK:
    page_id
    link_id

假设我有一个名为“Mash Potato”的食谱页面和一个名为“Potato”的配料页面,它们包含在一个名为“Potato Link”的链接“土豆泥”具有以下属性-膳食:晚餐,风味:咸味,难度:简单,并且“土豆”具有以下属性-季节:秋季,价格:便宜

我希望能够找到一个便宜、美味和秋季季节的链接,并获得“土豆链接”作为回报。


如何在 SQL 中编写该查询,这是查询此类内容的最佳数据库结构吗?

4

1 回答 1

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. ...
        )
于 2013-03-28T14:29:50.770 回答