2016-12-05 1 views
0

私は、ユーザーがプレイリストにトラックを追加したり、プレイリストからトラックを削除したり、プレイリストをプレイリストに追加したり削除したりできるweb2pyアプリケーションを開発中です。Web2py:データベース上にプレイリスト構造を作成して表示するには

私のテーブルには、次のようになります。タイトルとそのプレイリストにリンクされているすべてのトラックを含むよう

db.define_table('track', 
      Field('artist'), 
      Field('album'), 
      Field('title'), 
      Field('duration', 'float'), 
      Field('rating', 'float'), 
      Field('num_plays', 'integer'), 
      Field('created_by', default=get_user_email()), 
      Field('created_on', default=datetime.datetime.utcnow()), 
      Field('track_source',default='manual'), 
      Field('track_uri') 
      ) 

db.define_table('playlist', 
      ...... 
      ) 

は、どのように私は自分のプレイリストのテーブルを定義していますか?

答えて

1

あなたには2つのオプションがあります。最も柔軟性がでトラック及びプレイリストをリンクする第3のテーブルを作成することであるmany-to-many relationship

db.define_table('playlist_tracks', 
    Field('playlist', 'reference playlist'), 
    Field('track', 'reference track')) 

あなたは、例えば、容易に問い合わせることができるように、上記のアプローチは、クエリーの点で最大の柔軟性を可能にするか、どのようにあるトラックが属する多くのプレイリスト。

単純なアプローチは、プレイリストテーブルにlist:referenceフィールドを追加することです:

db.define_table('playlist', 
    Field('tracks', 'list:reference'), ...) 

あなたのクエリは、プレイリストとそれらに関連するトラックの単一または少数の取得に制限されている場合list:referenceアプローチは、罰金ですが、トラックや多数のプレイリストやトラックに関連するより複雑なクエリは効率が悪くなる可能性があります。

+0

ありがとうございます!私のAPIコードは、あなたが私に与えた2番目のオプションにトラックを追加するためにどのように見えますか? – user2030942

+0

あなたのAPIコードがどうなっているのかわからないのは難しいですが、一般的に 'list:reference'フィールドにはレコードIDのリストがあります:' db.playlist.insert(...、tracks = [1、2、3 、4,5]) 'ここで、1,2,3,4,5は' db.track'テーブルの 'id'フィールドの値です。 – Anthony

+0

次のように私のAPIのコードは次のとおりです。 デシベル。define_table( 'トラック'、 ..... ) デシベル。define_table( 'プレイリスト'、 ...... )を デシベル。define_table) プレイリスト内のすべてのトラックを取得するにはどのようにすればよいですか(「再生リスト」、タイトルxの? – user2030942

関連する問題