Основы программирования в Linux - Нейл Мэтью
Шрифт:
Интервал:
Закладка:
Разные функции
Есть несколько приведенных в табл. 8.13 дополнительных функций API, которые мы рекомендуем изучить. В основном того, что обсуждалось до сих пор, достаточно для создания функциональной программы, но этот частичный перечень нам кажется полезным.
Таблица 8.13
Пример API-вызова Описание char *mysql_get_client_info(void); Возвращает данные о версии библиотеки, используемой клиентской программой char *mysql_get_host_info(MYSQL *connection); Возвращает информацию о подключении к серверу char *mysql_get_server_info(MYSQL *connection); Возвращает информацию о сервере, к которому вы в данный момент подключены char *mysql_info(MYSQL* connection); Возвращает информацию о самом последнем выполненном запросе, но работает только с запросами нескольких типов — обычно с операторами INSERT и UPDATE. В противном случае возвращает NULL int mysql_select_db(MYSQL *connection, const char *dbname); Заменяет базу данных, применяемую по умолчанию, на заданную в качестве параметра, при условии, что у пользователя есть соответствующие права доступа. В случае успеха возвращает ноль int mysql_shutdown(MYSQL* connection, enum mysql_enum_shutdown level); Если у вас есть соответствующие права, завершает работу сервера базы данных, к которому вы подключены. В этот момент уровень останова следует задать равным SHUTDOWN_DEFAULT. В случае успеха возвращает нольПриложение для работы с базой данных компакт-дисков
Сейчас мы покажем, как вы можете создать простую базу данных для хранения информации о ваших компакт-дисках и затем разработать программу для доступа к этим данным. Для простоты вы ограничитесь тремя таблицами в базе данных с очень простыми связями между ними.
Начните с создания новой базы данных и затем сделайте ее текущей базой данных.
mysql> create database blpcd;
Query OK, 1 row affected (0.00 sec)
mysql> use blpcd
Connection id: 10
Current database: blpcd
mysql>
Теперь вы готовы к проектированию и созданию необходимых вам таблиц.
Эта версия немного сложнее предыдущей, потому что вы выделите три отдельных элемента компакт-диска: исполнителя (или группу), элемент главного каталога и дорожки. Если вы подумаете о коллекции компакт-дисков и компонентах, ее составляющих, то поймете, что каждый компакт-диск состоит из ряда разных дорожек, но различные компакт-диски связаны друг с другом многими параметрами: исполнителем или группой, компанией, производящей их, представленным музыкальным стилем и т.д.
Вы могли бы сделать базу данных очень сложной, попытавшись сохранить все эти разные параметры, но в данном примере ограничьте себя только двумя самыми важными связями.
Во-первых, каждый компакт-диск состоит из переменного количества дорожек, поэтому вы будете хранить данные о дорожке в таблице, отделенной от остальных данных компакт-диска. Во-вторых, у каждого исполнителя (или группы) часто несколько альбомов, поэтому было бы удобно сохранять сведения об исполнителе один раз, а затем отдельно извлекать все компакт-диски, записанные этим исполнителем. Вы не будете пытаться разбить группы на разных исполнителей, которые, возможно, выпустили сольные альбомы, или работать со сборными компакт-дисками — вы будете стараться сохранять структуру вашей коллекции простой!
Связи тоже сохраняйте очень простыми — каждый исполнитель (им может быть название группы) выпустил один или несколько компакт-дисков и каждый компакт-диск состоит из одной или нескольких дорожек. Связи или отношения в вашей базе данных представлены на рис. 8.8.
Рис. 8.8
Создание таблиц
Сейчас вы должны определить реальную структуру таблиц. Начните с основной таблицы — таблицы компакт-дисков (cd), в которой хранится большая часть информации. Вам нужно сохранять идентификационный номер (id) компакт-диска, номер каталога, название и, возможно, ваши собственные заметки. Вам также понадобится ID-номер из таблицы исполнителей, чтобы знать, какой исполнитель выпустил альбом.
Таблица исполнителей (artist) очень проста; сохраните в ней только имя исполнителя и уникальный идентификационный номер (id) исполнителя. Таблица дорожек (track) также чрезвычайно проста; вам нужен только ID компакт-диска, чтобы знать, к какому CD относится дорожка, номер дорожки и название дорожки.
Сначала таблица компакт-диска:
CREATE TABLE cd (
id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(70) NOT NULL,
artist_id INTEGER NOT NULL,
catalogue VARCHAR(30) NOT NULL,
notes VARCHAR(100)
);
Приведенный программный код создает таблицу с именем cd со следующими столбцами:
□ столбец id, содержащий целое число, которое автоматически увеличивается и представляет собой первичный ключ таблицы;
□ столбец title длиной до 70 символов;
□ столбец artist_id — целое число, которое будет использоваться в таблице artist;
□ столбец catalogue — номер длиной до 30 символов;
□ столбец notes до 100 символов.
Учтите, что только столбец notes может быть NULL; у всех остальных должны быть значения.
Теперь таблица artist:
CREATE TABLE artist (
id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
И снова у вас столбец id и еще один для имени исполнителя.
И наконец, таблица track:
CREATE TABLE track (
cd_id INTEGER NOT NULL,
track_id INTEGER NOT NULL,
title VARCHAR(70),
PRIMARY KEY(cd_id, track_id)
);
Обратите внимание на то, что на этот раз вы объявили первичный ключ несколько иначе. Таблица track необычна тем, что ID каждого компакт-диска будет появляться несколько раз, ID любой заданной дорожки, скажем, дорожки 1, также будет появляться несколько раз в разных компакт-дисках. Но их комбинация всегда будет уникальной, поэтому объявите ваш первичный ключ как комбинацию двух столбцов. Такой ключ называют составным, поскольку он состоит из нескольких столбцов, участвующих в комбинации.
Сохраните эти SQL-операторы в текущем каталоге, в файле, названном create_tables.sql, и затем двигайтесь дальше и создайте базу данных и таблицы в ней. Готовый пример сценария содержит дополнительные строки, по умолчанию помеченные как комментарий, в них удаляются эти таблицы, если они уже существуют.
$ mysql -u rick -р
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
mysql> use blpcd;
Database changed
mysql> . create_tables.sql
Query OK, 0 rows affected (6.04 sec)
Query OK, 0 rows affected (0.10 sec)
Query OK, 0 rows affected (0.00. sec)
mysql>
Обратите внимание на применение команды . для получения ввода из файла create_tables.sql.
Вы могли бы создать таблицы, выполнив операторы SQL или просто набирая данные с помощью обозревателя запросов MySQL Query Browser.
После того как таблицы созданы, их можно просмотреть, используя MySQL Administrator (рис. 8.9), в котором вы проверяете таблицу индексов базы данных blpcd (или схему, если вы предпочитаете этот термин).
Выбрав редактирование таблицы (щелчок правой кнопкой мыши или двойной щелчок мышью имени таблицы на вкладке Tables (Таблицы)) позволит увидеть дополнительные сведения о столбцах (рис. 8.10).
Рис. 8.9
Рис. 8.10
Вы заметили два значка ключа рядом со столбцами cd_id и track_id на рис. 8.10? Это означает, что они оба участвуют в формировании составного первичного ключа. Разрешив названию дорожки быть равным NULL (условие NOT NULL не проверяется), вы допускаете наличие нетипичной, но иногда встречающейся дорожки компакт-диска, не имеющей названия.
Вставка данных
Теперь вам нужно вставить какие-нибудь данные. Лучший способ проверки любого проекта базы данных — вставка контрольных данных и проверка работоспособности проекта.
Далее мы продемонстрируем пример импорта тестовых данных, что не важно для понимания происходящего, т. к. все операции импорта в основном похожи — они загружают разные таблицы. Есть два важных аспекта, на которые здесь следует обратить внимание.
□ Сценарий удаляет любые имеющиеся данные, чтобы начать с "чистого листа".