Я храню некоторую основную информацию, «источники данных», поступающую в мое приложение. Эти источники данных могут быть в форме документа (например, PDF и т. Д.), Аудио (например, MP3 и т. Д.) Или видео (например, AVI и т. Д.). Скажем, например, меня интересует только имя файла источника данных. Итак, у меня есть следующая таблица:
DataSource
Id (PK)
Filename
Для каждого источника данных мне также нужно хранить некоторые его атрибуты. Примером для PDF будет «количество страниц». Примером для аудио будет «битрейт». Примером для видео будет «продолжительность». Каждый источник данных будет иметь различные требования к атрибутам, которые должны быть сохранены. Итак, я смоделировал «атрибут источника данных» следующим образом:
DataSourceAttribute
Id (PK)
DataSourceId (FK)
Name
Value
Таким образом, у меня были бы такие записи:
DataSource->Id = 1
DataSource->Filename = 'mydoc.pdf'
DataSource->Id = 2
DataSource->Filename = 'mysong.mp3'
DataSource->Id = 3
DataSource->Filename = 'myvideo.avi'
DataSourceAttribute->Id = 1
DataSourceAttribute->DataSourceId = 1
DataSourceAttribute->Name = 'TotalPages'
DataSourceAttribute->Value = '10'
DataSourceAttribute->Id = 2
DataSourceAttribute->DataSourceId = 2
DataSourceAttribute->Name = 'BitRate'
DataSourceAttribute->Value '16'
DataSourceAttribute->Id = 3
DataSourceAttribute->DataSourceId = 3
DataSourceAttribute->Name = 'Duration'
DataSourceAttribute->Value = '1:32'
Моя проблема в том, что это не масштабируется. Например, скажем, мне нужно запросить все документы PDF вместе с общим количеством страниц:
Filename, TotalPages
'mydoc.pdf', '10'
'myotherdoc.pdf', '23'
...
Соединения, необходимые для получения вышеуказанного результата, слишком дороги. Как мне решить эту проблему?