こんにちは。
groongaの初心者です。テーブルの設計で助けを求め、ポスト致します。
<仕様>
次の親・子関係(1:n)のテーブルの情報があります。
親・子テーブルどっちでも1,2,3でhitしたら親の記事テーブルの1-5の情報を出力したい(json type) *4,5は検索対象ではない
- 親の記事テーブル(検索出力結果に出す)
- 作成者
- タイトル
- 本文
- 登録日時
- 更新日時
- 子のコメントテーブル(0個以上有る)
- 作成者
- タイトル
- コメント
- 登録日時
- 更新日時
- 子のツイッターテーブル(0個以上有る)
- 作成者
- タイトル
- コメント
- 登録日時
- 更新日時
- これから子のフッターが追加されます(0個以上複数可能)
groongaはjoinができない古いバージョン(4)なので、
以下のように一個のテーブルにくっつける設計方法を考えております。
以下のリンク先の記事から大変ヒントをいただきました。
https://kitaitimakoto.github.io/apehuci/2016/02/26.html
・groonga用トータル設計テーブル
親の記事部分 + 子のコメント部分 + 子のツイッター部分 <- 子のコメント+ツイッターの数分くっつける(親の記事部分は重複有り)
・一つのポストがコメント3個、ツイッター2個を持つ場合の例
json
1{ 2 post_id : 1, 3 post_register : "register01", 4 post_title : "title01", 5 post_contents : "contents01", 6 post_create_dt : 2017-01-12 11:12:13, 7 post_update_dt : null, 8 comments_register : "register0101", 9 comments_title : "title0101", 10 comments_contents : "contents0101", 11 comments_create_dt : 2017-01-12 11:12:13, 12 comments_update_dt : null, 13 twitter_register : "register010101", 14 twitter_title : "title010101", 15 twitter_contents : "contents010101", 16 twitter_create_dt : 2017-01-12 11:12:13, 17 twitter_update_dt : null 18}, 19{ 20 post_id : 1, 21 post_register : "register01", 22 post_title : "title01", 23 post_contents : "contents01", 24 post_create_dt : 2017-01-12 11:12:13, 25 post_update_dt : null, 26 comments_register : "register0102", 27 comments_title : "title0102", 28 comments_contents : "contents0102", 29 comments_create_dt : 2017-01-12 11:12:13, 30 comments_update_dt : null, 31 twitter_register : "register010102", 32 twitter_title : "title010102", 33 twitter_contents : "contents010102", 34 twitter_create_dt : 2017-01-12 11:12:13, 35 twitter_update_dt : null 36}, 37{ 38 post_id : 1, 39 post_register : "register01", 40 post_title : "title01", 41 post_contents : "contents01", 42 post_create_dt : 2017-01-12 11:12:13, 43 post_update_dt : null, 44 comments_register : "register0103", 45 comments_title : "title0103", 46 comments_contents : "contents0103", 47 comments_create_dt : 2017-01-12 11:12:13, 48 comments_update_dt : null, 49 twitter_register : "", 50 twitter_title : "", 51 twitter_contents : "", 52 twitter_create_dt : , 53 twitter_update_dt : 54} 55...
親のpost部分にhitしたら(子のレコードの)重複分、結果が出るためdrilldownコマンドで親のpost毎、グルーピングしたいと思います。
commentsやtwitterの子に1件以上hitしても、結果は親のpost毎、グルーピングしたいと思います。
以下groongaのドキュメントを見て想像したselectコマンドです。公式ページでは最新バージョンのドキュメントが載ってるので古いバージョンをインストールして確かめないと動くか分からないんですが、設計法として最善策かが知りたいです。mroongaなどは使えなくバージョンも4のgroonga httpサーバーに決まっております。
sql
1select 2 --table Post 3 --match_columns post_register, post_title, post_contents, comments_register, comments_title, comments_contents, twitter_register, twitter_title, twitter_contents 4 --output_columns _key, post_id, post_register, post_title, post_contents, post_create_dt, post_update_dt 5 --query @検索語 6 --drilldown post_id
もし勘違いしているどころや、
もっといい設計方法など是非教えてください。
(テーブルをPost, Comments, Twitterの3個に分けて検索しながら親のPostを参照して出力する方法など)
助かるリンクなども構いません。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/13 04:39 編集