Классика баз данных - статьи



         

Заключительные замечания - часть 4


Казалось, что помимо переменных первого порядка, определенных на отношениях первого порядка (т.е. отношений индивидуумов), для оперирования отношениями высших порядков (т.е., отношений отношений и т.д.) были бы необходимы переменные высших порядков.

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

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

"Выяснить, какой тип имеет служащий E5, а затем извлечь его запись из множества записей этого типа служащих."

Этот запрос можно удобно выразить в двух частях, как показано ниже:

Часть 1: R < RESTRICT (employee to E# = E5); S < PROJECT (R on TN); RETRIEVE S;

Часть 2 (в предположении, что ответ на Часть 1 – "trucker"): T < RESTRICT (trucker to E# = E5); RETRIEVE T;

Первая часть возвращает тип служащего E5, например, "trucker", а вторая часть извлекает запись E5 из множества записей типа "trucker". В этом случае пользователь должен формулировать вторую часть, исходя из информации, полученной в первой части.

Если бы этот запрос реализовался как прикладная программа, пользователя можно было бы "заменить" приведенным ниже оператором case:

READ X; R < RESTRICT (employee to E# = X); S < PROJECT (R on TN); T < case S of




Содержание  Назад  Вперед