Что б такого сотворить
В качестве примера работы с этой системой управления базами данных создадим базу аудиодисков. Думаю, найдется немало любителей музыки, владеющих такой массой музыкальных дисков, что в ней можно запутаться. Кроме того, еще одна проблема возникает, когда даешь кому-то послушать диск. Диск слушают, а возвращать забывают (да и сам нередко забываешь, кому что дал). Вот и получается: что диск у тебя был, помнишь, а где он сейчас - без понятия.
Итак, мы поняли, что нужно сделать; приступим к исполнению.
Для начала создадим базу данных. Запускаем командный интерпретатор и набираем: Mysql> create database audio_cd;
Теперь самое время подумать, из чего же будет состоять наша база. Иначе говоря, какие таблицы она будет в себя включать.
Создадим таблицу дисков, которая будет включать в себя 3 поля:
- уникальный номер диска;
- название диска;
- год выпуска диска.
Следующая таблица - это таблица песен:
- уникальный номер песни
- название песни
- исполнитель
- описание, или жанр
Третья таблица, которую мы создадим, это таблица друзей:
- уникальный номер;
- имя;
- адрес;
- телефон;
- адрес электронной почты.
Естественно, что на диске может быть больше одной песни, и что одна песня может быть на разных компактах, поэтому это связь "многие ко многим". Но, вместе с тем, конкретный диск одновременно может находиться только у одного человека, и один человек может взять несколько дисков - поэтому это связь "многие к одному".
Для фиксации связей нам понадобятся две таблицы. В первой будет записано, какие песни на каких дисках находятся, во второй - у кого из друзей сейчас диск.
Теперь, когда мы разобрались с тем, какой должна быть структура нашей базы, можно набрать несколько команд, чтобы претворить задуманное в жизнь. Все команды будем выполнять в командном интерпретаторе mysql. Можно также набрать их в любом текстовом редакторе, записать в файл, а потом передать на командный вход интерпретатору - и он выполнит наши команды. Например, если мы сделаем текстовый файл db.txt, в котором запишем необходимые команды SQL, то выполнить этот файл можно с помощью команды: Shell>mysql <DB.TXT pre ><>
Вот как выглядит этот файл:
use audio_cd;
create table cd (
cd_id SMALLINT unsigned not null auto_increment PRIMARY KEY,
name VARCHAR(100) not null default "",
release_year YEAR
);
create table songs(
song_id SMALLINT unsigned not null auto_increment,
primary key (song_id),
song_name VARCHAR(200) not null default "",
autor_name VARCHAR(100) not null default "",
description VARCHAR(255) not null default ""
);
create table songs_on_cd(
cd_id SMALLINT unsigned not null REFERENCES cd,
song_id SMALLINT unsigned not null REFERENCES songs
);
create table people(
p_id SMALLINT unsigned not null auto_increment PRIMARY KEY,
name VARCHAR(100) not null default "",
addr VARCHAR(255) not null default "",
phonnum char(6) not null default "000000",
email varchar(50) not null default ""
);
create table take_disk(
cd_id SMALLINT unsigned not null REFERENCES cd,
p_id SMALLINT unsigned not null REFERENCES people
);
У нас есть база, нужно заполнить ее полезной информацией. Для начала добавим в нее несколько дисков с песнями. Для примера возьмем диски "Pink Floyd".
Итак, добавляем диск 1983 года - "The Final Cut":
Mysql>insert into cd values (NULL, 'The Final Cut', 1983);
Добавляем в этот альбом песни:
mysql> insert into songs values
(NULL, "The post war dream", "Pink Floyd", ""),
(NULL, "Your possible pasts", "Pink Floyd",""),
(NULL, "One of the few", "Pink Floyd",""),
(NULL, "The hero's return", "Pink Floyd",""),
(NULL, "The gunner's dream", "Pink Floyd",""),
(NULL, "Paranoyd eyes", "Pink Floyd",""),
(NULL, " Get your filthy hands off my desert", "Pink Floyd",""),
(NULL, "The fletcher memorial home", "Pink Floyd",""),
(NULL, "Southampton dock", "Pink Floyd",""),
(NULL, "The final cut", "Pink Floyd",""),
(NULL, "Hot now john", "Pink Floyd",""),
(NULL, "Two suns in the sunset", "Pink Floyd","");
Нужно присоединить эти песни к диску -для этого заполним таблицу songs_on_cd. Смотрим в соответствующих таблицах, под каким номером находятся песни, а под каким номером - диск. Это можно сделать с помощью команды select: Mysql>select * from cd; Mysql>select * from songs;
Или просмотрев таблицы с помощью графической оболочки.
Из рисунка видно, что нужно добавить песни с номерами 1-12 к диску номер 1: Mysql>insert into songs_on_cd values (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), (1,10), (1,11), (1,12);
Аналогично добавляем альбом 1999 года "Red Hot Chili Peppers" "Californication".
Если возникнет необходимость посмотреть, какие песни на каком диске находятся, можно воспользоваться sql-командой select. Например, чтобы посмотреть, что находится на диске Californication (см. рис. 3), набираем следующую команду:
mysql> select songs.song_name as song, songs.autor_name as autor
from songs, songs_on_cd, cd
where songs.song_id=songs_on_cd.song_id and
cd.cd_id=songs_on_cd.cd_id and cd.name="Californication";
Если мы хотим на время отдать диск кому-то из друзей, то для начала нужно будет ввести координаты этого человека в базу, а потом зафиксировать передачу диска. Вот как это выглядит на языке sql:
Mysql>insert into people values
(NULL, "Ivanov Ivan", "st. Lenina 53,34", "4523412", "ivan@mail.ru");
Передаем диск:
Mysql> insert into take_disk values (1,1);
И последний пример - посмотрим, у кого находится диск "The Final Cut" (см. рис. 4):
mysql> select people.name as "Name", people.addr as "Address",
people.phonnum as "Phone", people.email from people, cd, take_disk
where take_disk.cd_id=cd.cd_id and take_disk.p_id=people.p_id and
cd.name='The Final Cut';
Хотя команда и получилась громоздкой, но она прекрасно работает даже в случае, если бы в базе было несколько тысяч записей.