2016-12-05 5 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

У вас есть два варианта. Наиболее гибким является создание третьей таблицы, чтобы связать треки и плейлисты в 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 будет добавлять треки ко второму варианту, который вы мне дали? – user2030942

+0

Трудно сказать, не зная, как выглядит ваш код API, но в целом поля 'list: reference' принимают список идентификаторов записей:' db.playlist.insert (..., tracks = [1, 2, 3 , 4, 5]) ', где 1, 2, 3, 4, 5 являются значениями поля' id' из таблицы 'db.track'. – Anthony

+0

Мой код API выглядит следующим образом: db.define_table ('дорожки', ..... ) db.define_table ('плейлиста', ...... ) db.define_table ('playlist_reference', Поле ('плейлист', 'репертуар'), Поле ('track', 'reference track') ) Как я мог бы, например, получить все треки в плейлисте названия x? – user2030942

 Смежные вопросы

  • Нет связанных вопросов^_^