Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Web-программирование и базы данных. Учебный практикум

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
967 Кб
Скачать

Нормализация (оптимальное разделение на элементар-

ные таблицы)

Прежде чем использовать таблицы с дублирующей информацией, они нормализуются (оптимально разделяются на элементарные таблицы).

Покажем нормализацию на примере. Верхняя таблица разбивается на две нижние.

Фамилия

 

 

Должность

 

Назв. филиала

Адрес

 

 

филиала

 

филиала

 

 

 

 

 

 

 

 

 

 

 

Иванов

 

Охранник

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