10059


通販サイトのカート、動画サイトのウォッチリストや履歴などは、  
1ユーザーに対し、複数のデータ（カート内の商品,閲覧したページ）が結びつくかと思いますが、  
それらはどのようにDBに保存し、取得すればいいのでしょうか？

配列で保存、と思ったりしましたがよろしくない気がしました（なんとなくですが...）

> 環境  
>  -MySQL5.6  
>  -Play framework2.3  
>  -Scala2.11


CC BY-SA 3.0
2015-05-11T08:38:46.763
10040
2015-05-12T02:07:56.313
9328
question
mysql scala playframework
履歴やウォッチリストを実装する際、DBにはそれらのデータをどのように保存すれば良いのか


通販サイトに限った話になってしまいますが、[こちら](https://github.com/EC-CUBE/ec-
cube/tree/eccube-3.0.0-beta/docs)でEC-CUBEのER図が公開されています。  
日本では有名なECのプラットフォームだと思いますので参考にしてみては如何でしょうか。  
※余計なお世話かもしれませんが、judeファイルは[astah* community](http://astah.change-
vision.com/ja/product/astah-community.html)で開けます。

また、動画の閲覧履歴のような永続保存しなくてよさそうだったり、ACIDを強く意識する必要のない情報なら、[NoSQL](http://ja.wikipedia.org/wiki/NoSQL)を検討してみても良いんじゃないかと思います。


CC BY-SA 3.0
2015-05-11T16:36:42.127
10059
2015-05-11T16:36:42.127
3516
10040
answer


つい最近でた "理論から学ぶデータベース実践入門"

<http://gihyo.jp/book/2015/978-4-7741-7197-5>

という本の第9章が「履歴データとうまく付き合う」となっているので、参考になるのではないかと思います。

今、手元にないので、記憶を元にすごく簡単に要約しておくと

  * そもそもリレーショナルデータベースは履歴データを扱うものとして作られたわけではないので、完璧な方法は存在しない
  * 扱おうとすると、いくつかの方法がある
  * それぞれの方法はトレードオフなので、それらを理解して状況によってどれを使うか判断すべき
  * DBのカラムにフラグを追加する方法は一見手軽だが、かなりデメリットが多いので避けるべき

という感じだったと思います


CC BY-SA 3.0
2015-05-12T02:07:56.313
10065
2015-05-12T02:07:56.313
56
10040
answer