- •Нормализация. 1нф, 2нф, 3нф.
- •Сравнение технологий bde и ado.
- •Индексирование бд. Правила индексирования.
- •Работа с sql-запросами в ms Access.
- •Использование фразы having. Использование фразы having
- •9. Выборка вычисляемых значений. Исключение дубликатов. Исключение дубликатов
- •10. Запросы с использованием нескольких таблиц.
- •Фраза group by
- •12. Связанные таблицы. Ключи. Виды ключей.
- •13. Типы данных в sql.
- •14. Сетевая модель данных. Файл – сервер и клиент – сервер.
- •15. Обзор визуальных компонентов среды делфи, необходимых для работы с бд.
- •16. Предложение select. Область применения. Формат записи. О предложении select
- •18. Фраза where. Операторы сравнения.
- •19. Агрегатные функции в sql.
- •20. Реляционная модель данных.
- •21. Предложение delete. Удаление единственной записи. Удаление множества записей.
- •23. Предложение insert. Вставка единственной записи. Вставка множества записей.
- •24. Иерархическая модель данных.
- •25. Обзор не визуальных компонентов делфи, необходимых для работы с бд.
- •26. Модель данных.
- •27. Фразы between, in, like. Использование between
- •Использование in
Индексирование бд. Правила индексирования.
Индексы представляют механизмы быстрого доступа к хранящимся в таблице данных.
Такой подход позволил заменить физическую реорганизацию данных (перестановку записей и и.д.), это (индекс) позволяет значительно увеличить скорость обработки больших объемов информации. Для создания индекса определяющий массив целых чисел , в котором каждый элемент содержит один номер записи файла прямого доступа. Данный массив в дальнейшем используется для определения номера записей, который необходимо обратиться. Записи одного физического файла могут содержать одновременно несколько разных индексов для осуществления различных алгоритмов работы с данными.
Назначение индексов – заключается в том, чтобы хранить отсортированные значения индексов, полей и указатель на запись в таблице.
Правила индексирования:
Должны быть проиндексированы те поля, по которым чаще всего осуществляется поиск данных.
Не рекомендуется загружать таблицу лишними индексами (не более 5 шт на таблицу).
Индексы внешних ключей, как правило, не нужны.
Каждая таблица должна содержать первичный ключ, поскольку по первичному ключу легко быстро перейти к нужной записи, а также он необходим для связывания таблиц.
С точки зрения физической организации к индексам близки запросы т.к для их организации также необходимо создание промежуточной таблицы являющейся представлением существующих данных.
Заложенные в таблицах отношения позволяют конструировать различные логические представления данных. Результат выполнения запроса не хранится в отличие от создаваемых промежуточных таблиц.
Работа с sql-запросами в ms Access.
Использование фразы having. Использование фразы having
Фраза HAVING (рис. 2.3) играет такую же роль для групп, что и фраза WHERE для строк: она используется для исключения групп, точно также, как WHERE используется для исключения строк. Эта фраза включается в предложение лишь при наличии фразы GROUP BY, а выражение в HAVING должно принимать единственное значение для группы.
Например, выдать коды продуктов, поставляемых более чем двумя поставщиками:
SELECT ПР ¦ Результат ПР
FROM Поставки ¦ --
GROUP BY ПС ¦ 9
HAVING COUNT(*) > 2; ¦ 11
¦ 12
9. Выборка вычисляемых значений. Исключение дубликатов. Исключение дубликатов
В предыдущем примере был выдан правильный, но не совсем удачный перечень основных продуктов: из него не были исключены дубликаты. Для исключения дубликатов и одновременного упорядочения перечня необходимо дополнить запрос ключевым словом DISTINCT (различный, различные), как показано в следующем примере:
SELECT DISTINCT Основа
FROM Блюда;
Выборка вычисляемых значений
Фраза SELECT может содержать не только перечень столбцов таблицы или символ *, но и выражения, общая структура которых была приведена на рис. 2.1,а.
Например, если нужно получить калорийность всех продуктов, то можно учесть, что при окислении 1 г углеводов или белков в организме освобождается в среднем 4.1 ккал, а при окислении 1 г жиров - 9.3 ккал, и выдать запрос:
SELECT Продукт, ((Белки+Углев)*4.1+Жиры*9.3)
FROM Продукты;
результат которого приведен на рис. 2.5,а.
Фраза SELECT может включать не только выражения, но и отдельные числовые или текстовые константы. На рис. 2.5,б приведен результат запроса:
SELECT Продукт, ‘Калорий =’, ((Белки+Углев)*4.1+Жиры *9.3)
FROM Продукты;
+-------------------------------------------------------------------+
¦а) б) в) ¦
¦ Продукт Продукт Продукт ¦
¦ -------- ------ -------- --------- ------ -------- ------ ¦
¦ Говядина 1928.1 Говядина Калорий = 1928.1 Зелень 118.9 ¦
¦ Судак 1523. Судак Калорий = 1523. Помидоры 196.8 ¦
¦ Масло 8287.5 Масло Калорий = 8287.5 Морковь 349.6 ¦
¦ Майонез 6464.7 Майонез Калорий = 6464.7 Лук 459.2 ¦
¦ Яйца 1618.9 Яйца Калорий = 1618.9 Яблоки 479.7 ¦
¦ Сметана 3011.4 Сметана Калорий = 3011.4 Молоко 605.1 ¦
¦ Молоко 605.1 Молоко Калорий = 605.1 Кофе 892.4 ¦
¦ Творог 1575. Творог Калорий = 1575. Судак 1523. ¦
¦ Морковь 349.6 Морковь Калорий = 349.6 Творог 1575. ¦
¦ Лук 459.2 Лук Калорий = 459.2 Яйца 1618.9 ¦
¦ Помидоры 196.8 Помидоры Калорий = 196.8 Говядина 1928.1 ¦
¦ Зелень 118.9 Зелень Калорий = 118.9 Сметана 3011.4 ¦
¦ Рис 3512.1 Рис Калорий = 3512.1 Рис 3512.1 ¦
¦ Мука 3556.7 Мука Калорий = 3556.7 Мука 3556.7 ¦
¦ Яблоки 479.7 Яблоки Калорий = 479.7 Сахар 4091.8 ¦
¦ Сахар 4091.8 Сахар Калорий = 4091.8 Майонез 6464.7 ¦
¦ Кофе 892.4 Кофе Калорий = 892.4 Масло 8287.5 ¦
+-------------------------------------------------------------------+
Рис. 2.5. Примеры запросов с вычисляемыми полями
А что произойдет, если какой-либо член выражения не определен - имеет значение NULL и откуда появилось такое значение?
Если при загрузке строк таблицы в какой-либо из вводимых строк отсутствует значение для какого-либо столбца, то СУБД введет в такое поле NULL-значение. NULL-значение “придумано” для того, чтобы представить единым образом “неизвестные значения” для любых типов данных. Действительно, так как при вводе данных в столбец или их изменении СУБД запрещает ввод значений не соответствующих описанию данных этого столбца, то, например, нельзя использовать пробел для отсутствующего значения числа. Нельзя для этих целей использовать и ноль: нет месяца или дня недели равного нулю, да и для чисел ноль не может рассматриваться как неизвестное значение в одном месте и как известное - в другом. При выводе же NULL-значения на экран или печать его код воспроизводится каким-либо специально заданным символом или набором символов: например, -0- или пробелом (если его нельзя перепутать с текстовым значением пробела).
С помощью специальной команды можно установить в СУБД один из двух режимов представления NULL-значений при выполнении числовых расчетов: запрет или разрешение замены NULL-значения нулем. В первом случае любое арифметическое выражение, содержащее неопределенный операнд, будет также иметь неопределенное значение. Во втором случае результат вычислений будет иметь численное значение (если это значение попадает в диапазон представления соответствующего типа данных).
Например, при выполнении запроса:
SEL ПР, Цена, К_во, (Цена * К_во) FROM Поставки
и разных “настройках” СУБД могут быть получены два разных результата:
ПР Цена К_во (Цена*К_во) ПР Цена К_во (Цена*К_во)
-- ---- ---- ----------- -- ---- ---- -----------
9 -0- -0- -0- 9 -0- -0- 0.
11 1.5 50 75. 11 1.5 50 75.
12 3. 10 30. 12 3. 10 30.
15 2. 170 340. 15 2. 170 340.
