Опубликован: 17.08.2006 | Уровень: для всех | Доступ: платный
Лекция 15:

Работа с базами данных

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >
Аннотация: В этой лекции разговор пойдет о программировании баз данных на языке Perl и о средствах взаимодействия с системами управления базами данных, которые имеются в Perl. Основное внимание будет уделено DBI - универсальному интерфейсу доступа к базам данных. Цель лекции: узнать о средствах работы с базами данных в Perl и научиться применять их в своих программах для доступа к разным типам баз данных - от автономных таблиц до серверов баз данных.
Ключевые слова: информация, flat file, эволюция, базы данных, БД, база данных, метаданные, СУБД, сервер баз данных, компьютер, INTO-переменные, реляционная база данных, структурированный язык, запрос SQL, structure, query language, SQL, международный стандарт, XML, система программирования, perl, запись, идентификатор, целое число, latin-1, area, текстовый файл, Berkeley DB, операционный, Unix, dbm, database manager, ассоциативность, массив, сайт, Linux, freebsd, solaris, поддержка, операционная система, Windows, модуль, дистрибутив, activate, команда, ppm, install, файл, связь, доступ к файлу, file, DB-9, ключ, значение, функция, freeze, диск, структура данных, преобразование данных, поиск, ПО, удаление записей, deletion, персональный компьютер, clipper, xbase, суффикс, database file, доступ, интерфейс, программа, создание таблицы, список, курсор, программное обеспечение, вывод, универсальность, унификация, механизм, запрос-ответ, источник данных, драйвер, универсальные интерфейсы, ODBC, open database connectivity, JDBC, Java, database, connect, DBI, interface, компонент, Web-сервис, driver, DB2, interbase, mysql, Oracle, Sybase, соединение с базой данных, конструктор, класс, имя пользователя, пароль, параметр, Data Source, манипулятор, handler, preparation, язык запросов sql, слот, placeholder, z-отчет, statement, executive, подстановка, Disconnect, ресурс, создание базы данных, create, insertion, UPDATE, выборка, selection, выход, web-форма, контекст, диапазон, аргумент, множество, системная документация, перечисление, выборка данных, web-приложение, web-сервера, клиент-сервер, результатив, X-клиент, производительность, кластер, система управления базой данных, IBM, sql server, реализация языка, объединение, joining, стандарт языка, SQL-запрос, подзапрос, непротиворечивость, транзакция, shell-процедура, хранимая процедура, D-триггер, индексация, разграничение доступа, СУБД PostgreSQL, database server, org, программирование, очередь, адаптация, excel, Поисковый система, google, LDAP, доступ к данным, ADO, текстовый формат, CSV, separate, VALUES, text, RAM, MP3, композиция, разработка информационных систем, хранение данных

Базы данных

Давно прошли те времена, когда информация хранилась только в простых "плоских" файлах (flat files) в двоичном и текстовом виде. Эволюция систем обработки данных привела к появлению многочисленных баз данных (БД), хранящих информацию в собственных форматах. Основное отличие базы данных от обычного файла с данными заключается в том, что база данных, помимо пользовательской информации, также содержит метаданные, описывающие хранимые в ней сведения. Для работы с большими объемами информации были созданы системы управления базами данных (СУБД), которые теперь работают на серверах баз данных, в настольных и переносных компьютерах - от ноутбуков до карманных компьютеров. Сейчас в большинстве СУБД используются реляционные базы данных, состоящие из таблиц с фиксированным набором колонок (столбцов) и переменным числом строк (записей). Для манипулирования информацией в реляционных базах данных применяется структурированный язык запросов SQL (Structured Query Language). SQL является международным стандартом и поддерживается в большем или меньшем объеме всеми производителями СУБД. Но в последнее время с ними все больше конкурируют объектно-ориентированные и документальные базы данных (например, хранящие информацию в формате XML). Естественно, любая современная система программирования не может обойтись без средств доступа к базам данных. В Perl есть несколько способов работы с базами данных, и мы рассмотрим основные из них: ассоциативные массивы, таблицы-объекты и реляционные базы данных. Примеры работы с базами данных будут основаны на информации о моллюсках, производящих жемчужины (перлы). Каждая запись базы данных будет содержать такие сведения:

  • уникальный идентификатор экземпляра (ID) - пятизначное целое число;
  • название моллюска по-русски (NAME) - строка длиной до 35 символов;
  • латинское название моллюска (LATIN) - строка длиной до 30 символов;
  • основные районы обитания (AREA) - строка длиной до 40 символов.

Исходные данные для загрузки в базу данных, которые будут взяты из текстового файла mollusc.txt, имеют такую структуру:

65590;Перловица;Unio pictorum;реки севера России и Скандинавии
56331;Жемчужница речная;Margaritifera margaritifera;север Европы
10616;Морская жемчужница;Pinctada martensii;Японское море
36816;Королевский стромбус;Strombus gigas;Куба

Базы данных Berkeley DB

Компактные, простые и быстрые, базы данных в формате Berkeley DB часто используются в операционных системах семейства Unix для хранения системных данных. Существует несколько разновидностей этого формата, которые обобщенно называются файлами DBM (от английского Database Manager). Данные в DBM-файле хранятся в двоичном виде, а логически его можно рассматривать как ассоциативный массив, хранящийся на диске. Средства работы с базами данных этого формата для разных операционных систем можно бесплатно загрузить с сайта www.sleepycat.com. В таких операционных системах, как Linux, FreeBSD или Solaris, Perl часто устанавливается с поддержкой этого формата данных, которая реализована в модуле DB_File. В операционной системе MS Windows этот модуль потребуется установить дополнительно. (О том, как это делается, речь шла в "Библиотеки, пакеты и модули" . Если используется дистрибутив Active Perl, установка выполняется командой ppm install DB_File.) С помощью этого модуля легко пользоваться базой данных в формате Berkeley DB, потому что с файлом базы данных можно работать как с обычным хэшем. Для этого устанавливается связь между переменной-хэшем и файлом на диске с помощью функции tie(), которой указывается, что для доступа к файлу (например, 'file.db') нужно использовать модуль DB_File. Если указанный файл не существует, он создается. Когда работа с файлом базы данных через хэш-переменную закончена, связь между ними разрывается функцией untie(). Это делается так:

use DB_File; # подключить модуль для работы с Berkeley DB
my %hash;    # через этот хэш будет происходить работа с БД
tie %hash, 'DB_File', 'file.db' or die; # установить связь
$hash{'КЛЮЧ'} = 'ЗНАЧЕНИЕ'; # добавить элемент в хэш и БД
untie %hash ; # разорвать связь между хэшем и БД

Формат DBM имеет ограничение, присущее всем ассоциативным массивам: с каждым ключом файла базы данных может ассоциироваться только одно значение. Есть много способов (снова принцип TIMTOWTDI!) обойти это ограничение, и один из них заключается в использовании модуля Storable, который предназначен для организации хранения во внешней памяти массивов, хэшей и других программных объектов. Функция Storable::freeze() "замораживает" данные в двоичном виде, например, перед записью на диск, а функция thaw() "оттаивает" информацию, восстанавливая первоначальную структуру данных. Мы воспользуемся этими функциями для преобразования данных при создании DBM-файла таким образом:

use DB_File;                  # модули для работы с DBM 
use Storable qw(freeze thaw); # и сохранения данных
my %database;                 # хэш "привязывается"...
tie %database, "DB_File", "mollusc.db" or die; # ...к БД

open my $text, '<', 'mollusc.txt' or die; # файл, откуда
while (my $data = <$text>) {              # читаем данные,
   chomp($data);                          # удаляя \n
   # и разбивая строку на поля по разделителю ';':
   my ($id, $name, $latin, $area) = split(';', $data);
   my %record = (      # заполняем поля записи БД:
      ID => $id,       # идентификатор экземпляра
      NAME => $name,   # наименование моллюска
      LATIN => $latin, # латинское название
      AREA => $area);  # ареал обитания
   my $serialized = freeze \%record; # "замораживаем"
   $database{$id} = $serialized;     # и сохраняем запись
}
close $text;           # закрываем тестовый файл
untie %database;       # и базу данных

После того как база данных DBM создана, мы можем обрабатывать в ней данные, используя функции работы с хэшами, хорошо знакомые нам из "Хэши" . Например, так будет выглядеть поиск по ключу:

use DB_File;                  # модули для работы с DBM 
use Storable qw(freeze thaw); # и сохранения данных
my %database;                 # хэш "привязываем"...
tie %database, "DB_File", "mollusc.db" or die; # ...к БД

my $id = 65590;                      # ищем "Перловицу"
if (exists $database{$id}) {         # по идентификатору
   my $serialized = $database{$id};  # считываем и
   my %record = %{ thaw($serialized) }; # "размораживаем"
   printf "%5d %s %s %s\n",          # запись БД в хэш
      $id, $record{NAME}, $record{LATIN}, $record{AREA};
}
untie %database; # "отвязываем" БД от хэша
# будет выведено: 65590 Перловица Unio pictorum

Для перебора всех записей файла DBM можно пользоваться функциями keys() и each(), а для удаления записи - применить функцию delete().

< Лекция 14 || Лекция 15: 12345 || Лекция 16 >
Сергей Крупко
Сергей Крупко

Добрый день.

Я сейчас прохожу курс  повышения квалификации  - "Профессиональное веб-программирование". Мне нужно получить диплом по этому курсу. Я так полагаю нужно его оплатить чтобы получить диплом о повышении квалификации. Как мне оплатить этот курс?

 

Галина Башкирова
Галина Башкирова

Здравствуйте, недавно закончила курс по проф веб программиованию, мне прислали методические указания с примерами тем, однако темы там для специальности 

Системный администратор информационно-коммуникационных» систем.
Мне нужно самой найти тему? или делать по высланным темам

 

Мария Кравцова
Мария Кравцова
Россия, Сочи, РГПУ им. А.И.Герцена, 1997
Екатерина Архангельская
Екатерина Архангельская
Россия, СПбГУАП