Мне кажется, у меня проблема с дизайном схемы для моего музыкального приложения.
У меня есть 3 коллекции: Artists
, Tracks
и Albums
.и 3 класса: artists
, albums
и tracks
документ от artists
:
[_id] => MongoId Object
(
[$id] => 4ee5bbfd615c219a07000000
)
[freeze] => false,
[genres] => Array,
[hits] => 0,
[name] => Sarya Al Sawas,
[pictures] => Array,
документ от albums
:
[_id] => MongoId Object
(
[$id] => 4ee88308615c218128000000
)
[name] => Sabia
[slug] => wafiq-habib-ft-sarya-al-sawas-sabia
[year] => 1999
[genres] => Array,
[pictures] => Array,
[artists] => Array
(
[0] => MongoId Object
(
[$id] => 4ee34a3b615c21b624010000
)
[1] => MongoId Object
(
[$id] => 4ee5bbfd615c219a07000000
)
)
документ из tracks
[_id] => MongoId Object
(
[$id] => 4ee8a056615c21542a000000
)
[name] => Bid Ashok
[slug] => wafiq-habib-ft-sarya-al-sawas-bid-ashok
[genres] => Array,
[file] => /m/tracks/t.4ee8a05540c624.04707814.mp3,
[freeze] => false,
[hits] => 0,
[duration] => 303,
[albums] => Array
(
[0] => MongoId Object
(
[$id] => 4ee5cbc3615c216509000000
)
)
[artists] => Array
(
[0] => MongoId Object
(
[$id] => 4ee5bbfd615c219a07000000
)
[1] => MongoId Object
(
[$id] => 4ee34a3b615c21b624010000
)
)
это прежде всего хороший дизайн схемы ??!Я разработал эту схему таким образом, потому что из многих ко многим взаимосвязям иногда треки имеют 2 исполнителя, а альбомы имеют 2 исполнителя.
В любом случае у меня возникают проблемы с запросом альбомов, которые прикреплены к конкретному треку.
позволяетскажем, я на странице исполнителя
мне нужно получить все альбомы и треки исполнителя, поэтому я делаю это:
$cursors = array(
'albums' => $this->albums->find(array('artists' => $artist->_id))->sort(array('_id' => -1)),
'tracks' => $this->tracks->find(array('artists' => $artist->_id))->sort(array('_id' => -1)),
'clips' => $this->clips->find(array('artists' => $artist->_id))->sort(array('_id' => -1))
);
foreach($cursors as $key => $cursor) {
foreach($cursor as $obj) {
$obj['name'] = ($this->lang->get() != 'ar' ? $obj['translated']['name'] : $obj['name']);
$obj['by'] = $this->artists()->get($obj['artists'])->toString('ft');
${$key}[] = $obj;
}
}
Мне нужно зациклить все треки и получить названия их альбомов. Допустим, у этого исполнителя 3000 треков, я думаю, что это будет очень медленно ...
, поэтому мой вопрос: Это хороший дизайн схемы ?