-

DBについての質問です。

  • Ruby on Rails 3.2.8
  • ORM(Mongoid )
  • MongoDB 2.2.1

あるテーブル(コレクション)に動画のデータ(URLやメタ情報など)を保存しています。

たまに動画データが分割されている場合があるので、連続性を持たせるために分割されているものだけに連番を振りたいのですが、この場合どういった関連性を持たせればいいのかわかりません。

どなたか詳しい方教えてもらえませんでしょうか?

うまく質問できていないかもしれませんので、不足している情報などありましたらお気軽に質問してください。

みんなの回答 2 件

名無しさんの回答

ユーザー側で、複数の動画をアップ後、それぞれの再生順序を指定できるようにしておいて、あとはその指定通りに動画idと順番のデータを、どっかのテーブルに保存しておけばいいんじゃない?

名無し

この場合、どの動画と動画が連続していると紐付ければよいのでしょうか?

理解力が低くてもうしわけありません。

名無し

> どの動画と動画が連続していると紐付ければよいのでしょうか?

プログラム側で判断するのではなく、ユーザー側が自分で再生順を決められるようなUIを用意しておいて、あとはユーザー側に委ねるって事でいいんじゃないですか?
プログラム側で自動的に判別することは難しいと思います。
例えば、アップロードした順番に紐付けるって処理は、可能といえば可能ですが、これはユーザー側が、ちゃんと動画を再生したい順番通りに上げてもらうことが前提となります。順番を間違えたりしたら、また最初からやり直しになります。また、後で順番を変更したいというニーズにも応えられません。

名無し

すいません質問の仕方が良くなかったです。

DBのリレーションの貼り方として、MongoDBを使った場合、同じテーブル内でのリレーションを貼る場合、親子関係しか結べず、思った挙動ではありませんでした。

代わりの方法として、関連性だけを持つテーブルをもった場合、
|連続性を示すID|動画ID|再生順|
|1 | 1 |1 |
|1 | 2 |2 |
|1 | 3 |3 |
の様な形になると思うのですが、これだとまとめるためだけの別のデータ作成が必要になるので、
もっとレコード同士をリンクさせる様なブレイクスルーがあるのかなと思い質問させていただきました。

補足ですが、作成、運営、管理、全部自分がやる予定ですので、管理者とユーザーというのは切り分ける必要はないです。
ですが、なるべく簡単に管理できるようにしたいという状況です。

名無しさんの回答

> これだとまとめるためだけの別のデータ作成が必要になるので、

素直にRailsの考え方に沿って作るなら、もう1つテーブルを作って、has_manyか何かでテーブルを関連付けて、動画をグループ分けさせる方が良いと思うのですが、それが出来ない理由があるということでしょうか?

どうしても、1つのテーブルで納めたいのなら、下のいずれかの方法かなー。

  • 「動画ID」のどれかを親IDとして取得して、「連続性を示すID」に保存させる
  • 保存前に、「連続性を示すID」が他のレコードと被らないよう自前でチェック、IDを生成して保存する

正直、保存時にいちいちチェックが入るなど、一手間かける必要がありますし、柔軟性も無くなりますし、バグが混在する可能性もあるので、あまりお勧めできる方法じゃないですね。
「既存システムのデータを再利用するため、テーブルの構造を変えられない」とかなら分からなくも無いですが、そうでないなら、素直にもう一つ、テーブルを作成した方が良いかと思います。

ID:pv/aOj

理由としては、運営上なるべく手間を減らしたいというだけです。

Mongoを使用しているので、Array型が利用できるので、活用すればうまくできるのではないかと思ったのが発端です。

理想としては、管理画面上、動画データの編集画面で、同じ動画コレクション上のレコードを選択して選ぶだけという作業が一番ラクかなと思いました。

見た目上はなんとでもなるのでしょうが、正直プログラミングも、DBも初めてなもので、いわゆる"普通に考えれば"の構造がわからずに困っていました。

色々と参考になりました。
ありがとうございます。

最終更新日:2012-12-04 (2,405 views)

関連するトピックス

ページ上部に戻る