что помимо переменных первого порядка,
Казалось, что помимо переменных первого порядка, определенных на отношениях первого порядка (т.е. отношений индивидуумов), для оперирования отношениями высших порядков (т.е., отношений отношений и т.д.) были бы необходимы переменные высших порядков.
Однако мы недооценили мощь абстракции. Наша мотивация родовых структур заключалась в обеспечении унифицированной интерпретации всех видов объектов – индивидуальных, агрегатных и родовых. Это означает, что отношения высших порядков структурно идентичны отношениям первого порядка. В результате язык запросов первого порядка оказывается адекватным для всех реляционных моделей, безотносительно к тому, как много уровней обобщения они содержат. По существу, навязывая соответствующую дисциплину структурирования, мы способны эксплуатировать богатство, которое уже подразумевалось в первоначальной работе Кодда.
Несмотря на тот факт, что язык первого порядка может быть адекватен для запросов, существуют серьезные причины разработки примитивов высших порядков для программирования приложений. Рассмотрим следующий запрос, связанный с реляционной моделью, представленной на :
"Выяснить, какой тип имеет служащий 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
Содержание Назад Вперед