71183

Создание базы данных для хранения информации о файловой системе

Лабораторная работа

Информатика, кибернетика и программирование

Запустив это приложение без параметров, мы имеем только права на чтение. Т.е. никаких изменений в базе данных мы сделать не можем. Это связано с тем, что при запуске этой сессии мы не передавали никаких учетных данных.

Русский

2014-11-03

430.04 KB

0 чел.

Лабораторные работы по дисциплине «Управление данными»

Лабораторной работе №3

Создание базы данных для хранения информации о файловой системе.

База данных будет создаваться с помощью СУБД MySQL. На данных компьютерах СУБД MySQL установлена как часть пакета Denwer.

1. Для того чтобы начать работу с MySQL  выполним следующую программу C:\Z\denwer\ Run.exe

Наш сервер запущен.

2.Для того чтобы нам с ним пообщаться с  MySQL  необходимо запустить следующую программу.

Z:\usr\local\mysql-5.5\bin\mysql.exe

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

Запустив это приложение без параметров, мы имеем только права на чтение. Т.е. никаких изменений в базе данных мы сделать не можем. Это связано с тем, что при запуске этой сессии мы не передавали никаких учетных данных. В нашей базе по умолчанию есть только одна учетная запись: root и пароля для нее не установлено.

3.Выполним команду показать базы данных:

show databases;

Стоит отметить, что концом команды служит знак точка с запятой, это сделано, потому что запросы обычно содержат несколько строчек.  

В ответе мы видим только служебную базу данных

  Рассмотренная нами команда не относиться к языку SQL,. т.е. в нем нет таких команд, которые бы перечислили имеющиеся базы данных или же команды, показывающие, какие таблицы находятся в базе данных. Но у MySQL такие команды есть.

4.Завершим сеанс работы командой exit;

5. Зайдем в снова в папку Z:\usr\local\mysql-5.5\bin\ но уже через командную строку или Far. Теперь пишем:

mysql.exeu root

6.Теперь мы зашли с правами администратора выполним. Заново предыдущий запрос.

Произошли некоторые изменения. Теперь нам доступны имеющиеся базы данных.

Как вы видите, нам в ответ MySql пытается нарисовать что-то вроде таблицы, но не всегда у него это получается достаточно хорошо, т.к. колонок может быть много.

7. Попробуем запрос:

select * from mysql.user;

для сложных случаев можно пользоваться специальным ключом, который ставиться вместо « ; »  а именно \G. Попробуем:

select * from mysql.user\G

8. Еще разберем случай, когда ваш запрос состоит из нескольких строчек, и вы уже стали вводить новую строчку, и заметили, что на предыдущей строке у вас есть ошибка. Отменить буфер команд можно ключом \с

9.Разберем возможность вести протокол сеанса, т.е. сохранять все ваши запросы, а также ответы сервера в файл.

Пишем \T путь_к_файлу

Например;

 \T  Z:\usr\local\mysql-5.5\log.txt

Для прекращения записи выполните команду \t

10. Теперь создадим собственную базу данных:

CREATE database Lab3;

Но если мы повторно введем такую команду, то система на нас немного поругается. Чтобы этого не происходило модно написать:

CREATE database IF NOT EXISTS Lab3;

11.Ну а теперь удалим нашу базу данных.

DROP database Lab3;

Стоит отметить, что у сервера никаких корзин нет, поэтому это безвозвратная операция. Поэтому все администраторы делятся на два типа:

  1.  те, кто делает backup
  2.  те, кто уже начал делать  backup

12. Теперь создайте еще раз базу данных Lab3 и приступим к созданию таблиц. Стоит отметить, что таблица обязательно должна принадлежать какой-то базе данных, и не может висеть в воздухе, а следовательно, и обращаться к таблице нужно через имя базы данных в которой она находится как в приведенном выше примере:

select * from mysql.user;

Но чтобы как –то сократить запись можно указать какую базу данных я буду использовать по умолчанию.

USE Lab3;

13.Чтобы отобразить имеющиеся таблицы в базе данных есть команда (напоминаю, что она не относится к SQL языку) Она отображает объекты в текущей базе данных.

Show tables;

14. Создадим таблицу в этой базе данных.

Create table filenames (

Id int,

filenames varchar(255),

ParentFolder varchar(255)

);

15. Теперь проверьте, есть ли у вас таблица?

Show tables;

16.А как узнать какие колонки в ней есть

DESC filenames;

17. Вставим первую запись в таблицу:

INSERT INTO filenames VALUES (1, ‘Вездесущее число «пи»’,1);

INSERT INTO filenames VALUES (1, ‘Зодчие XXI века (Патури Ф.)’,1);

18. Проверьте наличие этой строки в вашей таблице:

SELECT * FROM filenames;

19. Все работает. Но мы с вами в поле ID, которое хотели использовать в качестве ключа, только что записали два одинаковых значения и программа нам ничего не сказала. Мы с вами просо не указали, что хотели бы использовать этот атрибут в качестве ключа. Что же делать? Может удалить таблицу и создать заново. Выполним весь код:

DROP table filenames;

Create table filenames (

Id int PRIMARY KEY,

filenames varchar(255),

ParentFolder varchar(255)

);

20.Попробуем вставить заново

INSERT INTO filenames VALUES (1, ‘Вездесущее число «пи»’,1);

INSERT INTO filenames VALUES (1, ‘Зодчие XXI века (Патури Ф.)’,1);

Теперь при обработке последней строки мы получим ошибку. Замечательно! MySQL следит за тем, чтобы данные в атрибуте ID не повторялись.

21. Попробуем ввести в таблицу следующее значение

INSERT INTO filenames(filenames)

VALUES (‘Интриги, мошенничество, трюки.’);

А теперь еще одну 

INSERT INTO filenames(filenames)

VALUES (‘Краткий словарь парадоксальных определений’);

Но что же произошло. Разве мы ввели два одинаковых значения. Почему MySQL сказал, что мы ввели дубликат в атрибут PRIMARY KEY. Мы вообще не заполняли это поле.

22. Посмотрим, что содержит табличка:

SELECT * FROM filenames;

23. Выходит необходимо всегда передавать значение ключевого атрибута и следить за его уникальность. А можно ли это поручить самой MySQL. Конечно можно. Но для этого нужно было при создании таблицы указать для атрибута ID ключевое слово AUTO_INCREMENT. Неужели опять пересоздавать таблицу и вводить заново в нее все значения?

Помниться было у нас ключевое слово для изменения уже существующей таблицы.

ALTER TABLE filenames

DROP Id;

ALTER TABLE filenames

ADD Id int AUTO_INCREMENT PRIMARY KEY;

Ход работы

1. Создать таблицу ListCatalog в базе данных lab3 для хранения имени каталога и номера его родительской папки, описанной в этой же таблице. Ключевым атрибутом должен быть номер каталога(Catalog_ID),  он должен быть автоматически увеличивающимся при добавлении  новых записей в таблицу. Итого три поля:

Catalog_ID, Catalog_name, Catalog_parent.

Create table FolderNames (

Catalog_ID int PRIMARY KEY AUTO_INCREMENT,

Catalog_name varchar(255),

Catalog_parent int

);

Выберите для них подходящие типы данных.

2.Создайте таблицу my_files для хранения данных о файлах.

ID, f_dateModif,  f_size,  f_name,  Catalog_parent.

Внимание!!! Используйте для поля Catalog_parent тип smallint UNSIGNED

3. Найдите  две ошибки (синтаксическую и логическую) в запросе на добавление описания внешнего ключа:

ALTER TABLE my_files

  ADD CONSTRAINT fkParent

  FOREIGN KEY Catalog_parent

  REFERENCES ListCatalog(Catalog_ID);

4. Проверьте работоспособность созданного ограничения:

INSERT INTO ListCatalog(Catalog_name, Catalog_parent)

VALUES ('Книги',0);

INSERT INTO ListCatalog(Catalog_name, Catalog_parent)

VALUES ('Бизнес',1);

INSERT INTO my_files(f_dateModif, f_size, f_name, Catalog_parent)

VALUES ('2006-03-13 18:53:00 ',2307284,'Вездесущее число <пи>.djvu',1);

INSERT INTO my_files(f_dateModif, f_size, f_name, Catalog_parent)

VALUES ('2013-01-07 02:17:00 ',125400681,'CD.zip',4);

5. Если вы наблюдаете ошибку при добавлении последний записи, то все работает.

Выведите с помощью запроса на экран все, что находиться в таблице ListCatalog, а затем в таблице  my_files

6. Теперь из таблицы my_files удалите внешний ключ и все имеющиеся записи.

Удаление ключа производим так:

ALTER TABLE  my_files  

 DROP FOREIGN KEY fkParent;

Удаление всех записей из таблицы можно сделать так:

DELETE  FROM my_files  ;

Проверьте теперь правильность выполнения запроса, т.е выведите все записи которые есть в таблице my_files .

7.Таблицу ListCatalog удалите и создайте заново (примечание: не забудьте про AUTO_INCREMENT   PRIMARY KEY).

8.Вставьте данные из файлов list_SQL_folder.txt  и list_SQL_file.txt.

9. Проверьте корректность данных.

9.1.У вас должно быть 307 папок и  4680 файлов. (проверьте запросом выводящим количество записей)

9.2. В поле my_files.Catalog_parent не должно ссылаться на несуществующий каталог. Т.е. как минимум иметь число больше, чем максимальное  ListCatalog. Catalog_ID

Максимальное число  в ListCatalog. Catalog_ID я могу найти следующим запросом:

SELECT MAX(Catalog_ID) FROM ListCatalog;

Напишите аналогичный запрос для поиска максимального значения в поле my_files.Catalog_parent.

Сравните два полученных числа.

10. Таким образом, мы выявили несоответствие. Узнайте, сколько записей не соответствует этому правилу.

SELECT COUNT(*)

  FROM my_files a

   WHERE a.Catalog_parent> 279;

11. А теперь давайте представим, что у вас таких 20 пар таких таблиц и вам каждый месяц приходится проверять, сколько записей о фалах в них не корректно.

Можно ли написать запрос более универсальным способом? –Да.

  SELECT COUNT(*)

  FROM my_files a,

             (SELECT MAX(Catalog_ID) c

                FROM ListCatalog   ) b

   WHERE a.Catalog_parent> b.c;

Объясните, как работает этот запрос.

12. Преобразуйте этот запрос так, чтобы он выдавал названия только 5 книг (для этого используйте оператор - LIMIT 5; поставьте его самым последним за блоком WHERE ). Для улучшения читаемости ответа попробуйте выводить из названия книги только 70 символов (для этого воспользуйтесь функцией substring (строка, позиция,  длина) описать её необходимо в операторе SELECT).

13. Теперь наша задача приписать файлы с недействительными каталогами в папку с названием Err.Folder. При этом сначала необходимо проверить наличие описания этой папки в таблице ListCatalog, при этом её родителем должен служить каталог с Catalog_ID=0 (т.е. Catalog_name=’Err.Folder’, Catalog_parent=0), и если её нет, то тогда создаем запись об этой папке.

13.1.  Напишите запрос, выдающий Catalog_ID  папки Err.Folder, если она есть.

 select Catalog_ID

  from ListCatalog

  WHERE Catalog_name='Err.Folder';

13.2.  Напишите запрос для вставки в таблицу ListCatalog запись о папке 'Err.Folder'

select if ((select count(*) From ListCatalog where Catalog_name=’Err.Folder’ )=0 ,

             (select 'No exists'), 15) ;

  INSERT INTO ListCatalog(Catalog_name, Catalog_parent)

   VALUES (’Err.Folder’,0);

13.3.  Модифицируем записи в таблице my_files.

UPDATE имя_таблицы

SET имя_столбца1=выражение1

WHERE определение_where

UPDATE my_files a,

             (SELECT MAX(Catalog_ID) c

                FROM ListCatalog   ) b

SET Catalog_parent= 280   

   WHERE a.Catalog_parent> b.c;

Переделайте запрос из п.11. для модификации записей.

14. Сколько файлов и папок в папке Гуманитарные

15. Выведите название всех папок, которые содержат 5 или более  вложенных в себя папок.

select Catalog_name

  from ListCatalog a, (select Catalog_parent, count(Catalog_parent) c

                       from ListCatalog

      group by Catalog_parent) b

  where b.c>5 and a.Catalog_ID=b.Catalog_parent;

16.Сколько файлов в папке Информатика.   select count(*)

  from  my_files a 

  where  a.Catalog_parent=  (select Catalog_ID

                         from ListCatalog 

                           Where Catalog_name='Гуманитарные')\G

17.Выведите имена папок находящихся в папке ‘Химия’

 ( select Catalog_name

  from  ListCatalog a

  where  a.Catalog_parent=  (select Catalog_ID

                         from ListCatalog

                           Where Catalog_name=’Химия’)

18. Выведите имена папок находящихся во втором уровне вложенности в папке ‘Химия’

Create table ListCatalog(

Catalog_ID smallint UNSIGNED  AUTO_INCREMENT PRIMARY KEY,

Catalog_name varchar(255),

Catalog_parent smallint UNSIGNED

);

Create table my_files (

 Id int  AUTO_INCREMENT PRIMARY KEY,

 f_dateModif DATETIME,

 f_size  int UNSIGNED,

 f_name varchar(255),

 Catalog_parent  smallint UNSIGNED

);

 select Catalog_name

  from ListCatalog a, (select Catalog_parent, count(Catalog_parent) c

                       from ListCatalog 

      group by Catalog_parent) b

  where b.c>5 and a.Catalog_ID=b.Catalog_parent;


 

А также другие работы, которые могут Вас заинтересовать

8974. Развитие форм научного мышления в средние века 33.17 KB
  Развитие форм научного мышления в средние века. Эпоху Средневековья относят к началу II в. н.э., а ее завершение к XIV—XV вв. В истории Европы этот период называют не иначе как мрачный, имея при этом в виду общий упадок цивилизации, крушение ...
8975. Становление развитой научной теории 39 KB
  Становление развитой научной теории. Роль теории в научном познании огромна. Теория как форма научного знания направлена на обнаружение закономерностей того или иного фрагмента действительности. В процессе построения научной теории задействованы сет...
8976. Историческая изменчивость механизмов порождения научного знания. 35 KB
  Историческая изменчивость механизмов порождения научного знания. Важнейшей характеристикой знания является его динамика, т. е. его рост, изменение, развитие и т. п. Эта идея, не такая уж новая, была высказана уже в античной философии, а Гегель сформ...
8977. Структура эмпирического знания 38.5 KB
  Структура эмпирического знания Само эмпирическое знание имеет довольно сложную структуру, в которой можно выделить четыре уровня: а) единичные эмпирические высказывания (протокольные предложения), которые фиксируют результаты единичных наблюдений....
8978. Структура теоретического знания 34 KB
  Структура теоретического знания Для выяснения специфики теоретического познания важно подчеркнуть, что теория строится с явной направленностью на объяснение объективной реальности, но описывает непосредственно она не окружающую действительность...
8979. Научная картина мира: ее функции и исторические формы 29 KB
  Научная картина мира: ее функции и исторические формы. НКМ (Степин) – целостная система представлений о мире, его структурных характеристиках и закономерностях, вырабатываемая в результате систематизации и синтеза в фундаментальных достижениях...
8980. Основания науки 34 KB
  Основания науки Наука, выступая как целостная, развивающаяся система, имеет собственные основания, обладает идеалами и нормами исследования. Эти характеристики пронизывают науку и как специфическую форму деятельности, и как совокупность дисциплинарн...
8981. Формирование первичных теоретических моделей и законов 35.5 KB
  Формирование первичных теоретических моделей и законов. Модели играют большую роль в научно-теоретическом познании. Они позволяют представить в наглядной форме объекты и процессы, недоступные для непосредственного восприятия: например, модель атома,...
8982. Научная революция. Появление аномалий и кризис 38.5 KB
  Научная революция Появление аномалий. Как мы отмечали выше, факты, с которыми имеет дело научная теория, можно разделить на три группы: факты, которые она успешно объясняет факты, которых она пока не объясняет, но есть надежда, что со временем ей э...