- •Переменные
- •Внешние переменные
- •Константы
- •Типы данных в рнр. Преобразование типов
- •Операторы
- •2. Операторы языка php Операторы выбора/ if...Else
- •Операторы выбора/ Переключатель switch
- •Операторы цикла
- •Операторы цикла/ While
- •Операторы цикла/ Do…while
- •Операторы цикла/ For
- •3. Строковые функции php
- •Функция htmlspecialchars
- •Функции поиска в тексте
- •Функции strlen(), chr() и ord()
- •Trim-функции (функции удаления пробельных символов)
- •Функции форматного вывода. Спецификаторы преобразования
- •Функция sscanf()
- •Функции преобразования кодировки
- •Функции работы с бинарными данными
- •Функции работы с блоками текста
- •Функции объединения/разделения строк
- •Функции сравнения строк
- •Функции работы с url
- •Функции преобразования регистра
- •Заключение к главе 3
- •4. Массивы Инициализация массивов
- •Цикл foreach для обхода массивов
- •Многомерные массивы
- •Функция count()
- •Функция in_array()
- •Функция reset()
- •Функции сортировки массивов
- •Работа с курсором (указатель) массива
- •Функция array_walk()
- •Функции Определения и вызовы функций
- •Время жизни переменной
- •Что такое рекурсия
- •Работа с файлами Открытие файлов
- •Отображение файлов
- •Закрытие файлов
- •Чтение из файлов и запись в файлы Чтение из файлов
- •Запись в файлы
- •Копирование, переименование и удаление файлов
- •Атрибуты файлов
- •Перемещение по файлам
- •Работа с каталогами
- •Методы put и post
- •7. Регулярные выражения
- •Базовый синтаксис и создание регулярных выражений
- •Групповой символ
- •Исключающее выражение
- •Квалификаторы
- •Границы
- •Подвыражения
- •Соответствие началу и концу строки
- •Сопоставление со специальными символами
- •Классы символов
- •Функции для работы с регулярными выражениями
- •Perl-совместимые регулярные выражения
- •8. Сессии и cookie в php Сессии (сеансы) в php
- •Открытие сессии
- •Регистрация переменных сессии
- •Закрытие сессии
- •Пример простой сессии
- •Установка cookies
- •Пример простого приложения с cookies
- •Установка срока годности cookies
- •Удаление cookie
- •Проблемы безопасности, связанные с cookies
- •Установка области видимости cookie
- •Шифрование
- •Ограничение доступа для доменов
- •Отправка cookies по защищенному запросу
- •9. Работа с ftp средствами php Основные возможности php при работе с ftp
- •Соединение с ftp-сервером
- •Регистрация на ftp-сервере
- •Закрытие соединения
- •Загрузка файлов с сервера
- •Другие возможности при работе с ftp
- •Переход в родительский каталог
- •Работа через брандмауэр
- •10. Проверка корректности данных Проверка корректности данных
- •Проверка на пустоту поля
- •Проверка допустимости вводимых данных
- •Удаление html - тегов и обратных слешей
- •11. Пишем гостевую книгу на php
- •Добавление записи
- •Реляционные базы данных
- •Индексы
- •Первичные ключи
- •Способы задания первичного ключа
- •Нормализация базы данных
- •Работа с сервером MySql
- •Язык sql
- •Команды sql
- •Типы полей базы данных
Нормализация базы данных
Определение:
Схемой базы данных называется структура связей между полями и таблицами.
Определение:
Нормализацией схемы базы данных называется процедура, производимая над базой данных с целью удаления в ней избыточности.
Нормализация несет с собой немало преимуществ. Очевидно, что в нормализованной базе данных уменьшается вероятность возникновения ошибок, она занимает меньше места на жестком диске и т.д.
Для того, чтобы лучше уяснить приведенное определение нормализации, рассмотрим следующий пример. Ниже показана таблица, в которой указаны фамилии сотрудников и их профессии:
Таблица 3. Пример избыточности в таблицах базы данных
Профессия |
Сотрудник |
"Инженер" |
Гусев И.К. |
"Инженер" |
Иванов П.В. |
"Рабочий" |
Иванов К.Л. |
"Рабочий" |
Дружков П.К. |
"Рабочий" |
Фомичев В.М. |
Эта таблица избыточна - для каждого из сотрудников повторяются одинаковые названия профессий. Т.е. схема такой базы данных не нормализована. Для небольшой базы данных это не критично, но в больших по объёму базах данных это скажется на размере базы и, в конечном счёте, на скорости доступа. Для нормализации необходимо разбить эту таблицу на две - для профессий (см. табл. 4) и для фамилий сотрудников (см. табл. 5).
Таблица 4. Таблица профессий
Профессия |
Первичный ключ |
"Инженер" |
1 |
"Рабочий" |
2 |
Таблица 5. Таблица сотрудников
Профессия (внешний ключ) |
Сотрудник |
1 |
Гусев И.К. |
1 |
Иванов П.В. |
2 |
Иванов К.Л. |
2 |
Дружков П.К. |
2 |
Фомичев В.М. |
Теперь каждый тип профессии обозначен уникальным числом, и строка в базе данных присутствует только в единственном экземпляре: в таблице профессий. Размер поля "профессия" уменьшился, так как строка занимает больше памяти, чем число.
Замечание
В теории баз данных говорится о том, что схема базы данных должна быть полностью нормализована. При работе с полностью нормализованными базами данных необходимо применять весьма сложные SQL-запросы, что приводит к обратному эффекту - замедлению работы базы данных. Поэтому иногда для упрощения запросов даже прибегают к обратной процедуре - денормализации.
Работа с сервером MySql
В этом разделе мы поговорим о том, как работать с клиентской программой mysql, с помощью которой можно подсоединяться к MySQL-серверу, выполнять SQL-запросы и просматривать результаты этих запросов. Текст этого раздела рассчитан на то, что на вашем компьютере уже установлена утилита mysql и существует связь с сервером MySQL.
При подключении к серверу MySQL с помощью программы mysql нужно ввести имя пользователя, и, как правило, пароль. Если сервер и клиент находятся на разных машинах, необходимо также указать имя хоста, на котором запущен сервер MySQL:
shell> mysql -h host -u user -p
После этого на экране появится запрос Enter password:, и вам нужно будет ввести свой пароль. Если соединение прошло нормально, то на экране появляется следующая информация и метка командной строки mysql>:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 459 to server version:
Type 'help' for help.
mysql>
Появление метки mysql> означает, что программа mysql готова к работе.
Отсоединиться от сервера можно в любой момент, набрав команду QUIT:
mysql> QUIT
Bye
Кроме этого, разорвать соединение с сервером можно также, одновременно нажав клавиши +.
Замечание
Как правило, на только, что установленном MySQL на локальной машине доступ осуществляется без ввода пароля и хоста, вводом команды mysql в командной строке.
После того, как вы подсоединитесь к серверу, для того, чтобы освоиться с синтаксисом команд, можно выполнить несколько простых запросов. Поскольку пока еще никакой базы данных не выбрано, приводимые ниже запросы носят общий характер.
Ниже приведена простая команда, запрашивающая у сервера информацию об его версии и текущей дате:
mysql> SELECT VERSION(), CURRENT_DATE;
Ответом MySQL на этот запрос будет следующая таблица:
+--------------+--------------------+
| version() | current_date |
+--------------+--------------------+
1 row in set (0.02 sec)
На примере выполнения этого запроса можно увидеть следующие основные особенности работы с MySQL:
Команда, посылаемая серверу, обычно состоит из SQL-выражения, за которым следует точка с запятой. Из этого правила есть несколько исключений, когда после команды точка с запятой не ставится, к примеру, уже упомянутая команда QUIT;
MySQL выводит результаты запроса в виде таблицы;
После вывода таблицы с результатами запроса, mysql сообщает количество возвращаемых строк и время выполнения запроса. Это удобно, поскольку позволяет оценить как производительность сервера, так и эффективность выполняемого запроса;
После вывода результатов запроса и времени его выполнения, mysql выводит новую строку mysql>, что означает готовность к выполнению новых команд.
Заметим, что команды MySQL не чувствительны к регистру, поэтому приведенные ниже запросы абсолютно идентичны:
mysql> select version(), current_date;
mysql> SELECT VERSION(), CURRENT_DATE;
mysql> Select Version(), Сurrent_DATE;
MySQL позволяет на одной строчке разместить несколько команд, но каждая из них должна заканчиваться точкой с запятой. К примеру:
mysql> SELECT VERSION(); SELECT NOW();
На такой запрос мы получим следующий результат:
+---------------+
| version() |
+---------------+
| 4.0.13-nt |
+---------------+
1 row in set (0.00 sec)
+----------------------------------+
| NOW() |
+----------------------------------+
| 2004-01-25 16:57:00 |
+----------------------------------+
1 row in set (0.03 sec)
Однако помещать все команды на одной строке совершенно необязательно:
mysql> SELECT USER(),
-> CURRENT_DATE;
И вот результат:
+----------------------------+---------------------+
| user() | current_date |
+----------------------------+---------------------+
| ODBC@localhost | 2004-01-25 |
+----------------------------+---------------------+
1 row in set (0.00 sec)
Заметьте, что после того, как мы перешли на новую строку, метка командной строки изменилась с mysql> на ->. Таким образом mysql показывает, что завершенного запроса не получено и она ожидает конца запроса. Эта метка весьма полезна, так как позволяет избежать некоторых ошибок. К примеру, если вы забудете поставить точку с запятой в конце запроса, mysql сообщит вам об этом, выведя метку ->:
mysql> select user()
->
В завершение этого раздела, продемонстрируем, как можно использовать MySQL в качестве простого калькулятора, введя, к примеру, такой запрос:
mysql> select cos(pi()/10), (2*5)-5;