Web-программирование и базы данных. Учебный практикум
.pdfНормализация (оптимальное разделение на элементар-
ные таблицы)
Прежде чем использовать таблицы с дублирующей информацией, они нормализуются (оптимально разделяются на элементарные таблицы).
Покажем нормализацию на примере. Верхняя таблица разбивается на две нижние.
Фамилия |
|
|
Должность |
№ |
|
Назв. филиала |
Адрес |
|||
|
|
филиала |
|
филиала |
||||||
|
|
|
|
|
|
|
|
|
|
|
Иванов |
|
Охранник |
1 |
|
Омега |
Москва |
||||
|
|
|
|
|
|
|
|
|
|
|
Петрова |
|
Начальник |
2 |
|
Альфа |
Пушкин |
||||
|
|
|
|
|
|
|
|
|
|
|
Сидоров |
|
Менеджер |
2 |
|
Альфа |
Пушкин |
||||
|
|
|
|
|
|
|
|
|
|
|
Яблоков |
|
Начальник |
1 |
|
Омега |
Москва |
||||
|
|
|
|
|
|
|
|
|
|
|
Акулова |
|
Охранник |
3 |
|
Отдел продаж |
Самара |
||||
|
|
|
|
|
|
|
|
|
|
|
Акулова |
|
Начальник |
3 |
|
Отдел продаж |
Самара |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
Фамилия |
|
Должность |
№ филиала |
|
||||||
Иванов |
|
Охранник |
|
|
1 |
|
|
|
||
Петрова |
|
Начальник |
|
|
2 |
|
|
|
||
Сидоров |
|
Менеджер |
|
|
2 |
|
|
|
||
Яблоков |
|
Начальник |
|
|
1 |
|
|
|
||
Акулова |
|
Охранник |
|
|
3 |
|
|
|
||
Акулова |
|
Начальник |
|
|
3 |
|
|
|
||
|
|
|
|
|
|
|
||||
№ филиала |
|
Назв. филиала |
|
Адрес филиала |
|
|||||
1 |
|
Омега |
|
|
Москва |
|
|
|||
2 |
|
Альфа |
|
|
Пушкин |
|
|
|||
3 |
|
Отдел продаж |
|
Самара |
|
|
||||
Комплекс Denver обеспечивает возможность на клиентском компьютере обращаться из PHP к реляционной базе данных
MySQL.
91
Упражнения по PHP при использовании баз данных MySQL на сервере
Для работы с базами данных нам будет необходим следую-
щий php-файл connect_mysql.php:
<?php |
|
$Host = «localhost»; // Имя сервера |
|
$User = «root»; |
// Имя пользователя |
$Passwd = «»; |
// Пароль |
$DBName= «bd»; |
//имя базы |
$Connect=@mysql_connect($Host, $User, $Passwd); @mysql_select_db($DBName, $Connect); //mysql_query (“SET character_set_client=’cp1251’”); //mysql_query (“SET character_set_results=’cp1251’”);
//mysql_query (“SET collation_connection=’cp1251_general_ci’”); ?>
Можно использовать упрощенный вариант файла соединения с базой, но в этом случае будут проблемы с использованием кириллицы:
<?php |
|
$Host = «localhost»; // Имя сервера |
|
$User = «root»; |
// Имя пользователя |
$Passwd = «»; |
// Пароль |
$DBName= «bd»; |
//имя базы |
$Connect=@mysql_connect($Host, $User, $Passwd); ?>
92
Упражнение 4.1. Удаление и создание базы данных
<html>
<head>
<title>удаление и создание базы bd</title> </head>
<body>
<?php
//Запустите эту программу, которая //удалит базу bd,
//с которой, возможно, работали другие студенты, //и создаст новую базу для вашей работы
//
require_once(‘connect_mysql.php’); //файл присоединения к базе //=================================================== $sql=»DROP DATABASE bd»; //sql-строка для создания базы $result=mysql_query($sql); //удаление таблицы
if (!$result) {
} else {echo «нет базы для удаления </br>»;
}
echo «база успешно удалена </br>»;
//==================================================== $sql=”CREATE DATABASE bd;”;
$result=mysql_query($sql); //создание базы bd if (!$result) {
} else {echo «не удалось создать базу «.mysql_error();
}
echo «база успешно создана»;
//====================================================
?>
</body
</html>
Это упражнение показывает, как подключаться из PHP к MySql, создавать и удалять пробную базу в среде MySql.
93
Упражнение 4.2. Удаление и создание таблицы в базе данных
<html>
<head>
<title>удаление и создание таблицы в базе</title> </head>
<body>
<?php
//Эта программа удаляет таблицу my_table,
//которая, возможно, осталась после работы других студентов, //каждая строчка содержит уникальный автоматический номер
//и четыре поля field1, field2...
//
//Создайте свою новую таблицу my_table //со следующими полями (колонками): //id, fam, pol, ocenka
//где id — первичный ключ, уникальный автоматический номер, // fam,pol — текстовые для хранения фамилии и пола
// оценка — целого числового типа для хранения оценки
//
require_once(‘connect.php’); //файл присоединения к базе //=================================================== $sql=»DROPTABLE my_table»; //sql-строка для удаления таблицы table1 $result=mysql_query($sql); //удаление таблицы
if (!$result) {
} else {echo «нет таблицы для удаления </br>»;
}
echo «таблица успешно удалена </br>»;
//==================================================== $sql=”CREATE TABLE my_table
(id INTEGER NOT NULLAUTO_INCREMENT, field1 TEXT,
field2 INTEGER, field3 TEXT, field4 TEXT,
PRIMARY KEY (id) );”;
$result=mysql_query($sql); // создание таблицы table1 if (!$result) {
echo «не удалось создать таблицу «.mysql_error();
} else {echo «таблица успешно создана»;
}
//====================================================
?>
</body>
</html>
Это упражнение знакомит с созданием в базе данных таблицы из нескольких полей, одно из которых является уникальным ключом.
94
Упражнение 4.3. Вставка данных в таблицу базы данных
<html> |
|
|
|
|
|
|
|
<head> |
|
|
|
|
|
|
|
<title>вставка данных в таблицу</title> |
|
|
|
||||
</head> |
|
|
|
|
|
|
|
<body> |
|
|
|
|
|
|
|
<?php |
|
|
|
|
|
|
|
//Эта программа добавляет в таблицу my_table, |
|
|
|||||
//одну запись (строчку) данных |
|
|
|
||||
// |
|
|
|
|
|
|
|
//Добавьте ввод остальных данных, чтобы в результате |
|
|
|||||
//в таблице оказались следующие данные |
|
|
|
||||
//fam |
pol ocenka |
|
|
|
|
||
// |
|
М |
5 |
|
|
|
|
//Иванов |
|
|
|
|
|
||
//Петрова |
Ж |
3 |
|
|
|
|
|
//Сидоров |
М |
4 |
|
|
|
|
|
//Яблоков |
М |
4 |
|
|
|
|
|
//Акулова |
Ж |
3 |
|
|
|
|
|
// |
|
|
|
//файл присоединения к базе |
|
||
require_once(‘connect.php’); |
|
||||||
//==================================================== |
|||||||
$sql=”INSERT |
|
INTO |
my_table |
(fam,pol,ocenka) |
VALUES |
||
(‘Иванов’,’М’,5);”; |
|
|
, |
|
|||
$result=mysql_query($sql); //создание таблицы table1 |
|
||||||
if (!$result) exit («не удалось вставить данные «.mysql_error()); //====================================================
//===================================================
//====================================================
//====================================================
//==================================================== echo «данные успешно вставлены»;
?>
</body>
</html>
Это упражнение знакомит с вводом данных в таблицу базы данных.
95
Упражнение 4.4. Создание запроса на все поля в базе данных
<html>
<head>
<title>запрос на все поля в базе</title> </head>
<body>
<?php
//Попробуйте первый способ вывода данных на экран //Затем закомментируйте команды первого способа и //удалите комментарии у второго способа вывода на экран //и попробуйте второй способ require_once(‘connect.php’);
$sql=”SELECT id,fam,pol,ocenka FROM my_table”; $result=mysql_query($sql);
echo $result;
if(!$result)exit(«Ошибкавыполнениязапроса1».mysql_error().»??????»); $nrows=mysql_num_rows($result);
if ($nrows==0){
} else {exit(“Пусто!”);
echo $nrows.» записей. успех!<br>»;
}
echo («1-й способ вывода данных <br />»);
for ($i=0;$i<$nrows; $i++) { $line=mysql_fetch_row($result);
echo “строка “.$i.”: “.$line[0].” “.$line[1].” “.$line[2].” “.$line[3].”<br />”;
}
//echo (“<br /> 2-й способ вывода данных <br />”); //for ($i=0;$i<$nrows; $i++) {
//$assoc=mysql_fetch_assoc($result);
//echo “строка “.$i.”: “.$assoc[‘id’].” “.$assoc[‘fam’].” “.$assoc[‘pol’].” “.$assoc[‘ocenka’].”<br />”;
//}
?>
</body>
</html>
Это упражнение знакомит с выводом данных из таблицы базы данных. В цикле очередная запись попадает в массив, а затем разбирается по полям. Демонстрируются два способа с массивами.
96
Упражнение 4.5. Разные способы вывода всех данных на экран
<html>
<head>
<title>запрос на все поля в базе</title> </head>
<body>
<?php
//замените в sql-команде список полей на * //звездочка обозначает список всех полей таблицы //Изучите два разных способа вывода данных на экран require_once(‘connect.php’);
$sql=”SELECT id,fam,pol,ocenka FROM my_table”; $result=mysql_query($sql);
if(!$result)exit(“Ошибкавыполнениязапроса1”.mysql_error().”??????”); $nrows=mysql_num_rows($result);
if ($nrows==0){
} else {exit(“Пусто!”);
echo $nrows.» записей. успех!<br>»;
}
//echo («1-й способ вывода данных <br />»); //for ($i=0;$i<$nrows; $i++) {
//$line=mysql_fetch_row($result);
//echo “строка “.$i.”: “.$line[0].” “.$line[1].” “.$line[2].” “.$line[3].”<br />”;
//}
echo (“<br /> 2-й способ вывода данных <br />”); for ($i=0;$i<$nrows; $i++) {
$assoc=mysql_fetch_assoc($result);
echo “строка “.$i.”: “.$assoc[‘id’].” “.$assoc[‘fam’].” “.$assoc[‘pol’].” .$assoc[‘ocenka’].”<br />”;
}
?>
</body>
</html>
Это упражнение знакомит с выводом данных из таблицы, с использованием в команде SQL знака «*».
97
Упражнение 4.6. Вывод только списка фамилий с помощью удаления из запроса лишней информации
<html>
<head>
<title>список фамилий</title> </head>
<body>
<?php
//запросите из базы в выведите только список фамилий //, изменив программу соответствующим образом require_once(‘connect.php’);
$sql=”SELECT id,fam,pol,ocenka FROM my_table”; $result=mysql_query($sql);
if(!$result)exit(“Ошибкавыполнениязапроса1”.mysql_error().”??????”); $nrows=mysql_num_rows($result);
if ($nrows==0){
} else {exit(“Пусто!”);
echo $nrows.» записей. успех!<br>»;
}
for ($i=0;$i<$nrows; $i++) { $line=mysql_fetch_row($result);
echo “строка “.$i.”: “.$line[0].” “.$line[1].” “.$line[2].” “.$line[3].”<br>”;
}
?>
</body>
</html>
Это упражнение показывает, как вывести значения только одного поля.
98
Упражнение 4.7. Вывод только списка фамилий с помощью замены знака «*»
<html>
<head>
<title>список фамилий</title> </head>
<body>
<?php
//запросите из базы и выведите только список фамилий //соответствующим образом, изменив программу require_once(‘connect.php’);
$sql=”SELECT * my_table”; $result=mysql_query($sql);
if(!$result)exit(«Ошибкавыполнениязапроса1».mysql_error().»??????»); $nrows=mysql_num_rows($result);
if ($nrows==0){
} else {exit(“Пусто!”);
echo $nrows.» записей. успех!<br>»;
}
for ($i=0;$i<$nrows; $i++) { $line=mysql_fetch_row($result);
echo “строка “.$i.”: “.$line[0].” “.$line[1].” “.$line[2].” “.$line[3].”<br>”;
}
?>
</body>
</html>
Это упражнение учит не только редактировать SQL-запрос, но и искать в нем ошибки.
99
Упражнение4.8.Выборкапосовпадениютекстовогополя
<html>
<head>
<title>Выборка по совпадению текстового поля</title> </head>
<body>
<?php
//запросите из базы информацию о женщинах
//для этого введите конкретное условие вместо TRUE // текстовое_поле=’строка_для_сравнения’
//
//строки вывода на экран скопируйте из предыдущих упражнений
//
echo «Выборка женщин<br/>»;
echo «Должно быть две женщины<br/>»; require_once(‘connect.php’);
$sql=”SELECT * FROM my_table WHERE TRUE ; “; /$sql=”SELECT * FROM my_table WHERE pol=’Ж’; “; $result=mysql_query($sql);
if (!$result) exit(“Ошибка выполнения запроса”.mysql_error().”??????”); $nrows=mysql_num_rows($result);
if ($nrows==0){
} else {exit(“Пусто!”);
echo $nrows.» записей. успех!<br/>»;
}
for ($i=0;$i<$nrows; $i++) { $line=mysql_fetch_row($result);
echo “строка “.$i.”: “.$line[0].” “.$line[1].” “.$line[2].” “.$line[3].”<br>”;
}
?>
</body>
</html>
Это упражнение показывает, как с помощью SQL осуществлять выборку на совпадение текстового поля и задаваемой числовой строки.
100
