Иерархическая природа URI поставщика контента и реляционная природа базы данных

Продвигаясь в изучении Android, я познакомился с концепцией абстракции источника данных через поставщика контента.

Я заметил, что доступ к провайдерам контента осуществляется через URI, которые по своей природе иерархичны.

Все мы знаем об ограничениях иерархии, что является одной причиной того, что реляционные базы данных настолько распространены.

«Проблема» заключается в том, что иерархические URI предназначены для представления реляционных баз данных.

Разве это не снижает мощность и гибкость реляционных баз данных по сравнению с другими методами доступа (например, SQL)? Что-то вроде "сжатия с потерями"?

Если нет, то что мне не хватает?


person Android Eve    schedule 22.02.2011    source источник


Ответы (1)


Возможно, вы упускаете из виду, что URI определяют часть данных, а не все отношения, которые он имеет с другими данными. Они представляют не реляционную базу данных, а просто часть данных в этой базе данных. Вы можете думать о реляционной базе данных как о наборе перекрывающихся иерархий, которые дают вам множество способов получить один и тот же фрагмент данных. Uri просто определяет один из этих путей.

Я использую довольно сложную реляционную базу данных, но я все еще могу получить доступ к части данных с помощью URI.

Вот мой подход:

Путь Uri — это тип данных (или, например, таблица базы данных), из которой я хочу получить данные.
Параметры запроса Uri определяют отношения, которым должны удовлетворять нужные мне данные.

Вы можете использовать любые параметры запроса и любой тип данных, который хотите вернуть. Затем вам решать, как вы реализуете это в своем менеджере баз данных.

person CodeFusionMobile    schedule 22.02.2011
comment
Я только что обнаружил manageQuery(), и кажется, что вы правы. +1. URI — это только часть запроса. Например, вызов manageQuery() принимает дополнительные параметры, такие как порядок сортировки, столбцы для выбора и предложение where. Мне полегчало. :) - person Android Eve; 22.02.2011