0

私のアプリケーションには、いくつかの属性を持ついくつかのページがあります。ページをリンクすることができます。ページに属する特定の属性を含むリンクの検索を最適にサポートするデータベース構造が必要です。リンクはページのコレクションであり、ページには多くのリンクを含めることができます。


私のデータベース構造は現在次のとおりです

PAGE:
    id
    title
    content

-

ATTRIBUTE:
    id
    page_id
    name
    value

-

LINK:
    id
    title

-

PAGE_LINK:
    page_id
    link_id

つまり、「マッシュポテト」というレシピページと「ポテト」というリンクに含まれる「ポテト」という材料ページがあるとします。「マッシュポテト」には次の属性があります-食事:夕食、味:おいしい、難易度:簡単、そしてポテト」には属性があります-季節:秋、価格:安い

安くておいしい、秋の季節のリンクを見つけて、「ポテトリンク」をお返ししたいと思います。


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 に答える