
- •Технологии разработки программного обеспечения
- •Реляционное представление данных
- •Типы субд
- •Место и роль субд Microsoft Access®
- •Объекты
- •Особенности интерфейса
- •Режимы работы с бд
- •Порядок выполнения работы
- •Контрольные вопросы
- •Свойства полей. Обзор
- •Регистронезависимость Access
- •Свойства полей Тип данных и Размер поля
- •Приоритеты при разработке субд
- •Проектировочный режим: средства создания объектов
- •Эксплуатационный режим таблиц
- •Порядок выполнения работы
- •Варианты заданий
- •Контрольные вопросы
- •Реализация разделения данных. Ключевые поля
- •Вид связи один-к-одному
- •Вид связи один-ко-многим
- •Вид связи многие-ко-многим
- •Механизм создания ключей
- •Механизм подтаблиц
- •Порядок выполнения работы
- •Варианты заданий
- •Контрольные вопросы
- •Фильтры по выделенному
- •Запросы
- •Классификация запросов
- •Запросы на выборку
- •Отличия фильтров от запросов на выборку
- •Понятие предиката
- •Константы и переменные в запросах
- •Операторы в запросах
- •Бланк запроса в Access
- •Запросы с параметрами
- •Порядок выполнения работы
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Контрольные вопросы
- •Групповые операции
- •Запрос на обновление
- •Встроенные функции
- •Язык sql
- •Порядок выполнения работы
- •Вариант 10
- •Контрольные вопросы
- •Компилируемые и интерпретируемые языки программирования
- •Написание программы на языке Perl
- •Синтаксис языка Perl
- •Функции Perl
- •Порядок выполнения работы
- •Регулярные выражения
- •Операция поиска в строке
- •Оператор замены в строке
- •Обратные ссылки
- •Предопределённые переменные
- •Замена в текстовом файле
- •Функции работы со строками
- •Порядок выполнения работы
- •Подчинённая таблица «Корреспонденция»
- •Вариант 2 Главная таблица «Партнёры»
- •Подчинённая таблица «Сделки»
- •Вариант 3 Главная таблица «Сотрудники»
- •Подчинённая таблица «Поручения»
- •Вариант 4 Главная таблица «Товары»
- •Подчинённая таблица «Сертификаты»
- •Вариант 5 Главная таблица «Заказы»
- •Подчинённая таблица «Заказчики»
- •Вариант 6 Главная таблица «Поставки»
- •Подчинённая таблица «Посредники»
- •Вариант 7 Главная таблица «Терминалы»
- •Подчинённая таблица «Покупки»
- •Вариант 8 Главная таблица «Плательщики»
- •Подчинённая таблица «Счета»
- •Вариант 9 Главная таблица «Проекты»
- •Подчинённая таблица «Исполнители»
- •Вариант 10 Главная таблица «Мероприятия»
- •Подчинённая таблица «Персонал»
Регистронезависимость Access
СУБД Access является регистронезависимой. Это значит, что имена всех объектов, полей таблицы, элементов управления формы и отчёта и т.п., записанные в разном регистре одной и той же последовательностью букв, будут считаться одинаковыми. Например, имена полей ФИО, фио и ФиО будут обозначать одно и то же.
При этом регистр написания имён элементов и текстовых данных остаётся таким, каким его внесли в СУБД.
Аналогичная ситуация и с сортировкой текстовых данных.
Свойства полей Тип данных и Размер поля
Остановимся поподробнее на свойствах полей Тип данных и Размер поля, таблица 2.
От типа поля зависит, какие данные можно в него вносить в поле, а какие нет, а также допустимый набор операций с данными, содержащимися в поле. Например, данные в поле Цена можно просуммировать, чтобы определить общую стоимость. Суммировать данные, содержащиеся в поле Номер телефона, совершенно бессмысленно, даже если номера телефонов записаны одними цифрами. Очевидно, что эти поля обладают разными характеристиками, служат разному предназначению.
Однако количество типов данных ограничено, и под каждое поле в Access нельзя выбрать свой уникальный тип. Но это означает лишь, что разработчик должен постоянно помнить о том, что имеет смысл, а что не имеет, обязан предусмотреть это в своей СУБД. Вычисление суммы номеров телефонов, даже если выбран числовой тип данных, должно быть исключено, по крайней мере, для пользователей.
Размер поля – это то, сколько места в БД будет занимать каждая его ячейка, таблица 2.
Таблица 2 – Типы данных полей и их размеры
Тип даннах полей |
Использование |
Размер |
Текстовый |
Текст, состоящий из любых символов, в кодировке Unicode (2 байта на символ) |
До 255 символов, задаётся отдельно |
Поле МЕМО |
Текст в кодировке Unicode |
До 64000 символов, не задаётся |
Числовой: байт, целое, длинное целое, одинарное с плавающей запятой, двойное с плавающей запятой, действительное |
Числа: целые (байт, целое, длинное целое, действительное) и дробные (с плавающей запятой) |
Байт – 1 байт, целое – 2 байта, длинное целое и одинарное с плавающей запятой – 4 байта, двойное с плавающей запятой – 8 байтов, действительное – 12 байтов. |
Денежный |
Значения валют. Денежный тип используется для предотвращения округлений во время вычислений. Предполагает до 15 символов в целой части числа и 4 - в дробной |
8 байтов |
Дата/время |
Даты и/или время |
8 байтов |
Логический |
Поля, содержащие только одно из двух возможных значений, таких как Да/Нет, Истина/Ложь, Вкл/Выкл |
1 бит |
Счётчик |
Автоматическая вставка последовательных (увеличивающихся на 1) или случайных чисел при добавлении записи |
4 байта |
Крайне важным для понимания дальнейшего материала является изучение способов хранения основных типов данных. Всё множество рассматриваемых нами типов данных подразделяют на строковые (типы текстовый и поле МЕМО) и числовое (все остальные, представленные в таблице 2) типы данных. Ниже мы увидим причину подобной классификации.
Текстовый тип
Является наиболее применимым в СУБД. В него можно записывать всё что угодно – все печатные (видимые на экране) символы и символ пробела. Размер в данном случае задаётся явно и означает максимальное число символов, которое возможно записать в ячейку. Остаток строки остаётся пустым, рисунок 4, слева.
Такое положение вещей обусловлено главным образом тем, чтобы не нарушалась структурированность таблицы. В противном случае для извлечения 1000-й строки из таблицы пришлось бы сначала прочитать все 999 предыдущих строк.
Тип поле МЕМО
Внешне очень похож на текстовый тип. Главное отличие заключается в формате хранения. В таблице вместо самих строк хранятся указатели на них. Указатели имеют фиксированную длину, поэтому структурированность данных не нарушается и здесь. В базе данных, но в отдельном месте есть специальная область для хранения самих строк типа поле МЕМО. На них и ссылаются указатели в таблице с данными, рисунок 4, справа.
Из такого формата хранения следует, что максимальный размер строки, как в текстовом типе, не задаётся.
Рисунок 4 – Сравнение форматов хранения строковых типов данных
На первый взгляд, данный тип кажется лучшим решением по сравнению с текстовым типом данных. Однако это не так. Содержание подобной отдельной области, связывание каждый раз при просмотре таблицы всех данных воедино тоже требует затрат. Кроме того, в такой области тоже имеются «дыры» (точки на рисунке 4, справа).
Поэтому тип поле МЕМО рекомендуется использовать только для строк с сильно отличающейся, порой очень большой длиной. Например, для кратких характеристик работников, описания их выговоров (у кого-то может быть больше десятка выговоров, а у большинства – ни одного) и т. п.
Числовой тип
Числовой тип данных подразделяется на целые и дробные подтипы. В целые числовые типы данных (байт, целое, длинное целое и действительное) можно записать только цифры и символ «минус» перед ними (кроме подтипа байт, где все числа неотрицательные, таблица 2).
В дробные типы данных (одинарное и двойное с плавающей точкой) можно записать ещё разделитель целой и дробной части (запятая в русской инсталляции и точка – в английской).
Любое
число может быть записано в экспоненциальной
форме (Например,
).
От
размера числовых типов данных зависит
насколько большой диапазон чисел они
могут представлять. Как известно, в 1
байте содержится 8 бит, каждый бит может
принимать только 2 значения (0 или 1).
Следовательно, числовой подтип байт
может представлять
различных значений. В СУБД это числа от
0 до 255 включительно. Целый подтип длиной
в 2 байта или в 16 бит уже может представлять
различный значений чисел от -32768 до 32767
и т.д.
Дробное число в СУБД хранится следующим образом. Как уже было показано выше, все числа можно перевести в экспоненциальную форму. Допустим, что мы это сделали так, чтобы разделитель целой и дробной части всё время был в одном заранее оговоренном месте. Тогда нам можно не хранить как этот разделитель, так и основание степени, поскольку эти части числа всегда будут одинаковыми. Схема хранения таких чисел представлена на рисунке 5.
Рисунок 5 – Представление дробных чисел в СУБД
Ячейка дробного числа делится на 4 части, размер которых строго фиксирован. Следует обратить внимание на тот факт, что все иррациональные числа и некоторые рациональные дроби (см., например, 1/3) не могут быть точно представлены в таком формате. Это порождает всевозможные погрешности при вычислении.
В ряде случаев дробное число представляется в процентном формате. По сути, процент – это обычное дробное число. Поэтому при вводе такого числа нужно либо ставить символ % сразу после него (21%; 4,7%; -0,72%), либо вводить его в виде обычного дробного числа (0,21; 0,047; -0,0072).
Денежный тип данных
Этот тип данных создан специально для финансовых операций. Для предотвращения возникновения погрешностей количество разрядов в дробной части предполагается фиксированным и равным 4. Само число хранится также, как и дробное, только все дробные разряды обязательно записываются туда слева, рисунок 6.
Рисунок 6 – Представление денежного типа в СУБД
В
данном случае, как мы видим, всё свелось
к одному и тому же порядку
.
А раз так, то его можно и не хранить,
просто помня о том, где проходит разделение
целой и дробной части (пунктирные линии
на рисунке 6 не хранятся в БД, но об их
положении знает СУБД).
Наименование валют также не хранится в БД – это прерогатива свойства Формат поля.
Таким образом, по сути, денежные числа хранятся как целые.
Тип данных Дата/Время
Тип данных Дата/Время хранится в Access в формате числа двойной точности с плавающей запятой, рисунок 5. Целая часть числа представляет собой дату, а дробная часть – время. То есть, в каждой ячейке с этим типом данных обязательно содержится какая-то дата и какое-то время.
Дата может принимать значения от -657 434 (1 января 100 г. н.э.) до 2 958 465 (31 декабря 9999 г. н.э.). Нулевому значению даты соответствует 30 декабря 1899 г. Даты до 30 декабря 1899 г. хранятся в Access в виде отрицательных чисел.
Время может принимать значения от …,0 (00:00:00) до …,99999 (23:59:59). Числовое значение представляет собой долю дня. Можно перевести числовое значение в часы, минуты и секунды, последовательно умножая остаток на 24 для вычисления часов или на 60 для минут и секунд.
В таблице 3 показано, как хранятся значения даты/времени в Access:
Таблица 3 – Примеры соответствия дробного числа дате и времени
Дата/Время |
Составляющая даты |
Реальная дата |
Составляющая времени |
Реальное время |
1,0 |
1 |
31 декабря 1899 г. |
,0 |
00:00:00 |
2,5 |
2 |
1 января 1900 г. |
,5 |
12:00:00 |
27468,96875 |
27468 |
15 марта 1975 г. |
,96875 |
23:15:00 |
36836,125 |
36836 |
6 ноября 2000 г. |
,125 |
03:00:00 |
Можно отформатировать значение даты/времени таким образом, чтобы отображалась дата, время или то и другое. При использовании формата только даты значение составляющей времени в Access равняется нулю. И наоборот.
Логический тип данных
Данный тип применяют для характеристик объекта, которые можно уложить в схему «да-нет». Например, наличие действительного талона техосмотра у автовладельца, возможность порта принимать нефтяные танкеры и т.п.
Наиболее удобным представлением для таких полей является флажок. Однако даже этот тип данных относят к числовым. Принято, что -1 означает «Да» (флажок включён), а 0 означает «Нет» (флажок выключен).