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

       

Семантика и множественные операции запросов выборки информации


Если запросы основываются на модели данных "сущность-связь", то становится совершенно очевидной семантика запросов выборки информации. Для ясности мы вначале обсудим ситуацию на уровне 1. Концептуально, элементы информации организованы так, как показано на рис. 4 и 5 (на рис. 2 и 3). Многие запросы выборки информации могут рассматриваться как комбинация следующих базисных типов операций:

  • Выбор подмножества значений из множества значений.
  • (2) Выбор подмножества сущностей из множества сущностей (т.е. выбор некоторых строк на рис. 4). Сущности выбираются с помощью указания значений некоторых атрибутов (т.е. подмножеств множеств значений) и/или их связей с другими сущностями.
  • Выбор множества связей из множества связей (т.е. выбор некоторых строк на рис. 5). Связи выбираются с помощью указания значений некоторого(ых) атрибута(ов) и/или путем идентификации некоторых сущностей в связи.

  • Выбор подмножества атрибутов (т.е. выбор столбцов на рис. 4 и 5).
  • Например, запрос выборки информации "Каков возраст служащих, чей вес больше 170 и которые работают над проектом со значением атрибута PROJECT-NO, равным 254?", может быть выражен следующим образом:

    {AGE(e) | e ∈ EMPLOYEE, WEIGHT(e) > 170, [e,ej] ∈ PROJECT-WORKER, ej ∈ PROJECT, PROJECT-NO(ej) = 254};

    или

    {AGE(EMPLOYEE) | WEIGHT(EMPLOYEE) > 170, [EMPLOYEE,PROJECT] ∈ PROJECT-WORKER, PROJECT-NO(EMPLOYEE) = 254}.

    Для выборки информации на уровне 2, организованной так, как показано на рис. 6, сущности и связи в ii и iii должны быть заменены первичными ключами (PK – Primary Key) сущностей и PK связей. Приведенный выше запрос выборки информации может быть выражен как:

    {AGE(EMPLOYEE.PK) | WEIGHT(EMPLOYEE.PK) > 170, (WORKER/EMPLOYEE.PK, PROJECT/PROJECT.PK) ∈ {PROJECT-WORKER.PK}, PROJECT-NO(PROJECT.PK) = 254};

    Для выборки информации, организованной в виде отношений сущностей/связей (рис. 7, 8 и 9) мы можем использовать язык, подобный Sequel [6]:

    SELECT AGE FROM EMPLOYEE WHERE WEIGHT > 170 AND EMPLOYEE.PK = SELECT WORKER/EMPLOYEE.PK FROM PROJECT-WORKER WHERE PROJECT-NO = 254.

    Можно выбирать информацию о сущностях из двух различных множеств сущностей без указания связи между ними. Например, запрос выборки информации "Перечислить имена служащих и названия кораблей (ship), которые имеют одинаковый возраст", в нотации уровня 1 может быть выражен следующим образом:

    {(NAME(ei), NAME(ej))| ei ∈ EMPLOYEE, ej ∈ SHIP, AGE(ei)=AGE(ej)}.

    Здесь мы больше не будем обсуждать синтаксис языка. Мы только хотим подчеркнуть, что запросы информации можно выразить, используя понятия множества и операции над множествами [17], и семантика запросов совершенно очевидна, если принять эту точку зрения.



    Содержание раздела