Теория:

Логические функции, рассматривавшиеся нами в качестве примеров, были довольно простыми и легко записывались на естественном языке. Но компьютер, как вы знаете, понимает только формальный язык. И любой формальный исполнитель, каким, в частности, является СУБД Аccess, тоже понимает только формальный язык. Вот об этом языке и пойдет у нас речь. Основу его составляют логические функции. А теперь вспомните ваш опыт обращения с числовыми функциями на уроках математики. Изобретение буквенных обозначений переменных и языка формул для записи связей между ними стало революционным шагом. Вот и для логических функций естественно ввести некоторый язык формул, позволяющий относительно просто и достаточно стандартно записывать их. Строятся эти формулы, как и формулы в алгебре, из некоторых «кирпичиков», соединенных знаками операций. Для алгебраических выражений «кирпичиками» выступают числа и переменные, в качестве операций выступают арифметические операции — сложение, умножение, вычитание и деление, а также некоторые стандартные функции (показательная, логарифмическая, тригонометрические и т. п.).
Что же выступает в роли «кирпичиков» логического выражения? Это некоторые стандартные предикаты, определяющие, истинно или ложно утверждение о том, что при заданных значениях переменных они находятся в заданном отношении. В качестве таких отношений обычно фигурируют отношения сравнения \(=\) (равно),  (не равно), \(<\) (меньше), \(>\) (больше) и т. п. 
Однотипность выражений означает, что после вычисления их значений для любого допустимого набора переменных мы получаем значения одного типа, например числового, или символьного, или еще какого-либо. Теперь можно формально определить логические выражения. Мы будем обозначать их большими латинскими буквами.
  1. Всякое атомарное отношение есть логическое выражение.
  2. Истина и Ложь — логические выражения.
  3. Если \(A\) — логическое выражение, то выражение не \((A)\) тоже логическое выражение.
  4. Если \(A\) и \(B\) — логические выражения, то выражения \(A\) и \(B\), \(A\) или \(B\) и не \(B\) тоже являются логическими.
Вот примеры логических выражений:
  • \(не (x=СЛОН)\)
  • \((x=2+2)\) и y>2x+3.
Правила \(1-4\) определяют формальную грамматику языка логических выражений. Заметим, что в определении логического выражения мы использовали не все логические операции, но это не сказывается на возможностях данного языка, поскольку, как вы знаете, операции «следование», «равносильность», «исключающее или» выражаются через указанные три операции. Но дело тут не в экономии используемых операций, а в том, что СУБД Access воспринимает, как мы чуть позже убедимся, язык логических выражений с операциями отрицания, дизъюнкции и конъюнкции. Логические выражения нужны для того, чтобы компьютеру на понятном для него языке сформулировать, с какой логической функцией ему надлежит иметь дело. Пусть теперь на множестве \(M\) нам дано некоторое отношение с атрибутами x1,x2,...,xn. Рассмотрим логическую функцию от тех же переменных (не обязательно всех). Возьмем произвольный набор значений атрибутов, который принадлежит данному отношению. Подставим эти значения в логическую функцию вместо соответствующих переменных. Тогда логическая функция примет определенное значение. Выберем из всех наборов значений атрибутов, принадлежащих данному отношению, все те, для которых данная функция принимает значение Истина.
 
Обрати внимание!
Такую операцию над отношением называют фильтрацией, а саму логическую функцию называют фильтром.
Если отношение задано таблицей, то фильтрация приводит к отбору тех строк, в которых стоят значения атрибутов, дающих истинное значение заданной логической функции. Как вы помните, таблицы — это основной способ представления информации в реляционных базах данных. Знакомясь с СУБД Access, вы рассматривали и фильтрацию, т. е. отбор строк таблицы, удовлетворяющих условиям записанным на бланк \(QBE\).Теперь, мы надеемся, вам понятно, что на бланк \(QBE\) вы специальным образом записывали некоторый предикат (без кванторов!), в котором имена атрибутов — это имена переменных, с помощью союза и в нем соединены атомарные отношения, стоящие в одной строке, а получившиеся таким образом сложные выражения соединяются союзом или. Итак, на бланке \(QBE\) записывается не что иное, как логическое выражение, представлено оно в дизъюнктивной нормальной форме. Чтобы это увидеть, достаточно «списать» его с бланка \(QBE\) по указанным правилам. Напомним, что любое сложное логическое выражение может быть записано через простые с помощью дизъюнктивной нормальной формы. Так что фильтр в СУБД Access — это фактически бескванторное логическое выражение, записанное в дизъюнктивной нормальной форме.
Наверное, у вас возник вопрос: почему в языке логических выражений СУБД Access отсутствуют кванторы? Ответ такой: в любой базе данных, созданной с помощью СУБД, присутствует лишь конечное число значений для любого атрибута. Представим, что у некоторого атрибута \(x\) множество всех его значений — это a1,a2,...,an. Легко понять, что тогда для любого предиката Px,y1,y2,...,yn выражение xPx,y1,y2,...,yn равносильно конъюнкции Pa1,y1,y2,...,yk и Pa2,y1,y2,...,yk и ... и Pan,y1,y2,...,yk, а выражение xPx,y1,y2,...,yn равносильно дизъюнкции Pa1,y1,y2,...,yk или ... или Pan,y1,y2,...,yk.
Так что в кванторах нужды нет.
В базе данных телефонной станции имеется таблица, в которой указано, кто именно является абонентом данного телефонного номера.
 
3.png
 
Она обновляется нечасто. Кроме того, имеется таблица совершенных телефонных звонков, которая посстоянно обновляется.
 
2.png
 
Имеются еще таблицы, содержащие сведении об оплате телефонных разговоров их владельцами, о выставлении счетов и т. д. Иметь все эти сведения в одной таблице не только неудобно, по и неаффективно, поскольку ее объем будет огромен. Но вот наступает момент, когда надо выписать абонентам счета за текущий месяц. Теперь надо по таблице вызовов через номер телефона определить абонента и записать в счет все относящиеся к нему вызовы. На языке отношений это можно выразить так.
Пусть \(S (x,y,z)\) — отношение, показывающее, что по телефону с номером \(x\) был разговор с пунктом \(y\) продолжительностью \(z\) минут, а \(A(x,v)\) — отношение, показывающее, что \(v\) является владельцем телефона с номером \(x\). Нам же нужно отношение \(M (v,y,z)\) показывающее, что абонент \(v\) разговаривал с пунктом \(y\) в течение \(z\) минут. Отношение определяется так: имеет место отношение \(M (v,y,z)\), если существует \(x\), для которого \(S (x,y,z)\) и \(A(x,v)\). В этом случае говорят, что  \(M (v,y,z)\) является произведением отношений \(S (x,y,z)\) и \(A(x,v)\).
Как видите, появился кнантор существования. Поскольку Access — многотабличная СУБД, то объединения таблиц приходится выполнять операцией умножения отношений. Правда, в документации к этой СУБД такая операция называется соединением таблиц. Поскольку Access имеет графический интерфейс, то установление соединения таблиц по нужным атрибутам производится с помощью мышки в протягинянием «веревочки» между этими атрибутами.
 
4.png
 
Если же какой-либо атрибут объявлен ключом, то около него, над «веревочкой» появляется цифра \(1\), а на другом конце появится значок . Это означает, что каждая строка таблицы \(A\) может оказаться связанной с несколькими строками таблицы \(B\), но каждая строка таблицы \(B\) связана ровно с одной строкой таблицы \(A\). Такую связь таблиц называют связью по типу один-ко-многим.
 
5.png
 
Если же оба атрибута объявлены ключевыми, то на обоих концах появляются \(1\), которые означают, что в обеих таблицах каждая строка связана ровно с одной строкой из другой таблицы. Такую связь называют связью по типу один-к-одному.

6.png
Источники:
Гейн А. Г., Ливчак А. Б., Сенокосов А. И. Информатика и ИКТ.  10 класс. М. : Просвещение, 171 с.