База данных
Вообще под определением “база данных”, если говорить простым школьным языком, может скрываться все что угодно. Это может быть и картотека посетителей бассейна, и каталог фильмов у вас на DVD, и список телефонов в вашем мобильном телефоне. Как видно мы использовали 3 разных слова – картотека, каталог и список, и утверждали, что все это может служить базой данных. Так и есть – одно из определений баз данных является совокупность хранимых данных. Причем данными может выступать все что угодно.
Вообще, сложно представить программу, у которой нет необходимости хранить данные. Даже у простейшего калькулятора присутствуют кнопки запоминания предыдущего результата. Хранить данные можно в каком угодно виде: можно просто записывать данные в строчку в файле, можно выдумать свой шифр и записывать данные определенным удобным вам языком, а можно воспользоваться устоявшими стандартами, такими, например, как рекомендуемый язык разметки XML (eXtensible Markup Language). XML нам так же предоставляет возможность хранить структурированные данные и в современных платформах разработки программного обеспечения (ПО) присутствует достаточный набор средств для работы с XML файлами.
В случае, когда у вас в программе будет содержаться большое количество данных и вам необходимо средство для работы с этими данными – обработка результатов, выведение статистической информации или простое хранение картотек пользователей – вам необходимо использовать более приспособленное для этого средство – система управления базами данных. В случае хранения все в одном файле (или даже нескольких) у вас в какой то момент времени начнутся проблемы с производительностью, более того, если вы пишите многопользовательское программное обеспечение, когда несколько человек одновременно должны получать доступ к одной и той же базой данных – простым набором файлов вам не обойтись, ведь в данном случае необходимо подумать и о том, что пользователи могут захотеть внести изменения в данных.
Реляционные базы данных
Прежде чем знакомиться с базами данных – необходимо уяснить, что помимо распространенных реляционных баз данных существуют и другие типы БД, такие как объектно-ориентированные, объектно-реалиционные и т.п. Но в настоящий момент большую популярность имеют именно реляционные базы данных из-за их более простой и понятной структуры, а так же более простым сопровождением.
Итак, что же такое реляционная база данных? Первое,на что нужно обратить внимание – это основные аспекты, которые характеризуют данный тип базы данных. Первый аспект – структурный, он характеризует то, что данные в БД находятся в отношениях (таблицах). Второй – аспект целостности – все данные в таблицах подвержены ограничениям целостности. Третий – аспект манипулирования – над данными можно производить операции реляционной алгебры (операции над множествами, такие как, например, объединение и пересечение). Принципы реляционной модели были сформулированы в 1969—1970 годах Э. Ф. Коддом.
Давайте рассмотрим на примере. Предположим нам необходимо хранить информацию о студентах в нашем вузе. Первое что мы делаем – это заводим таблицу с определенными колонками, для примера и для начала это будут колонки Фамилия, Имя, Отчество и Студенческий билет:
| Фамилия |
Имя |
Отчество |
Студенческий билет |
| Иванов |
Иван |
Иванович |
20001 |
| Петров |
Петр |
Петрович |
20002 |
В нашем случае каждая строка таблицы уникальна, все данные находятся в определенной заданной структуре. Более того, мы можем накладывать условия целостности на типы данных, например, мы можем создать правило, что в колонке Студенческий билет должно быть записано 5-значное число и проверять данное условие. В данном примере каждая строка представляет собой уникальный набор данных, так как эту уникальность обеспечивает колонка Студенческий билет (люди могут иметь и одинаковые ФИО). Предположим, что кроме студентов в этой таблице мы хотим хранить и абитуриентов, у которых поле студенческий билет не может быть заполнено, в таком случае нам будет невозможно определить уникальных людей в случае одинаковых сочетаниях ФИО. Для того, чтобы не нарушить структурный аспект (целостность отношений) мы введем дополнительную колонку Идентификатор, которая будет являться простым перечислением данных:
| Идентификатор |
Фамилия |
Имя |
Отчество |
Студенческий билет |
| 1 |
Иванов |
Иван |
Иванович |
20001 |
| 2 |
Петров |
Петр |
Петрович |
20002 |
| 3 |
Иванов |
Иван |
Иванович |
|
В этом случае каждая строка таблицы будет уникальна благодаря колонке Идентификатор, который мы будем присваивать при заведении новой строки в данной таблице. Более того, назовем колонку Идентификатор первичным ключем - то при помощи чего мы можем точно определить строку нашего отношения (заметим, что первичным ключем может выступать и набор колонок). Рассмотрим вторую таблицу, которая будет состоять из двух столбцов Группа и Идентификатор Студента:
| Группа |
Идентификатор Студента |
| Математика - 1 |
1 |
| Математика - 1 |
2 |
В нашем случае для данного представления первичным ключем будут обе колонки (студент может учиться в нескольких группах, получать сразу два высших образования). В данном отношении Идентификатор Студента будет являться внешним ключем, он будет ссылаться на таблицу студентов и их идентификаторы (а мы уже определили, что каждый идентификатор может быть представлен только одной строкой таблицы). И более того, на этот внешний ключ мы будем накладывать условие целостности данных на уровне базы данных – в таблице соответствия студентам группам не может быть записи о несуществующем студенте (по идентификатору которого невозможно найти запись в таблице студентов), и в случае удаления записи о студенте – должны удаляться записи о нем в таблице соответствия групп.
Не сложно заметить, что в последнем примере есть небольшой минус, если мы захотим переименовать какую то группу, то нам придется это делать сразу в нескольких местах. Для того, чтобы избежать этого мы можем создать отдельную таблицу групп студентов, в которой будут две колонки: Название группы и Идентификатор Группы (первичный ключ), а в таблице соответствия групп и студентов будут две колонки Идентификатор Группы и Идентификатор Студента, каждая из колонок будет внешним ключем, а вместе они будут первичным ключем таблицы. Таким способом мы произвели нормализацию нашей базы данных (устранение недостатков). Следует сказать, что существуют несколько типов нормальной формы базы данных, с каждой из которых рекомендуется познакомиться.
Для проектирования базы данных (а в нашем случае мы этим и занимались) удобно рисовать диаграммы базы данных, так можно использовать Visio из Microsoft Office для того, чтобы описать структуру нашей базы данных.
В данном случае на сером фоне написаны названия таблиц, жирным шрифтом выделены первичные ключи таблиц (а так же помечены PK), а внешние ключи обозначаются стрелками (направлена туда, на кого ссылается), а колонки помечены FK.
Кроме Visio для проектирования баз данных можно использовать и встроенные средства в современные системы управления базами данных (СУБД), которые помимо представления баз данных, сразу же генерируют сами таблицы и отношения между ними.
Системы управления базами данных
Для того чтобы хранить информацию и затем обрабатывать ее существуют системы управления базами данных, обычно под ними сразу же подразумеваются реляционные СУБД, то есть системы управления реляционными базами данных. Один из примеров такой СУБД является Microsoft SQL Server (на данный момент последней является 2008 версия, а 2008 R2 находится в стадии разработки). В целом все СУБД имеют одинаковый базовый набор функциональности, о которых мы и расскажем ниже.
Первое из чего состоит СУБД – это сервис (instance), позволяющий нам содержать несколько баз данных. У данного сервиса СУБД есть имя, по которому можно к нему обратиться, так, например, если поставить Express редакцию MS SQL Server то по умолчанию он предложит имя (local)\SQLEXPRESS. На каждом отдельном сервисе может работать несколько баз данных (для нескольких приложений, например).
SQL Server предлагает два разных типа аутентификации: Windows Authentification (встроенная аутентификация, пользователи являются пользователями системы Windows или домена) и SQL Server Authentification (пользователи создаются и хранятся в SQL Server). При установке по умолчанию ставится только Windows Authentification, для включения обоих режимов нужно настроить Security в настройках вашего instance. При включении SQL Server Authentification необходимо указать пароль главного администратора баз данных sa.
Для того, чтобы начать работу с базой данных в вашем приложении необходимо настроить строку подключения к БД. Самый простой пример, наш сервер баз данных находится на локальной машине (откуда и запускаем приложение), база данных называется Test, а так же аутентифицируемся на сервере БД текущим Windows пользователем. Так же мы пишем приложение под .NET и тогда по умолчанию используется .NET Framework Data Provider for SQL Server:
Data Source=(local);Initial Catalog=Test;Integrated Security=SSPI;
Для примера еще напишем такую строку подключения: сервер баз данных находится на удаленной машине под названием dbserver, установлен SQL Server Express редакции и по умолчанию по пути \SQLEXPRESS, пользователь DBUSER с паролем DBUSER:
Data Source=dbserver\sqlexpress;Initial Catalog=Test;User Id=DBUSER;Password=DBUSER;
Больше примеров строк подключения к базам данным (и не только к MS SQL Server) можно посмотреть на сайте http://www.connectionstrings.com/.
Инструменты для работы с базами данных
В случае Microsoft SQL Server, даже в версии SQL Express один из инструментов для работы с базами данных это приложение sqlcmd.exe, которое позволяет нам управлять БД, выполнять запросы к БД, производить CRUD (create, update, delete) операции.
Более продвинутым средством для работы с базой данных Microsoft SQL Server является Managment Studio (начиная с версии 2005). В случае SQL Server Express необходимо установить дополнительно Managment Studio Express Edititon. Managment Studio предоставляет нам удобный интерфейс для просмотра содержимого сервера баз данных: информацию о базах данных, их таблицах, содержимом таблиц, о пользователях системы, о системных сообщениях. Так же предоставляется удобный редактор для создания, редактирования и выполнения файлов transact sql (*.sql).
С помощью Managment Studio удобно осуществлять резервное копирование баз данных (создавать бекап базы данных) и восстанавливать из бекапа. В версии SQL Server 2008 появился удобный intellisense для написания sql запросов. Так же присутствую интерфейсы для настройки сервера баз данных, отдельно самих баз данных и их администрировании.
С SQL Server так же устанавливается SQL Agent – служба, которая может выполнять задания по расписанию: например, создание резервной копии базы данных каждую ночь, или выполнение какого либо sql скрипта на базе данных. Так как в Express редакции нет службы SQL Agent, то возможно использовать стандартный Windows Scheduler и утилиту sqlcmd, как показано в статье Создание бэкапов по расписанию в MS SQL Express.
Так же важной частью SQL Server является SQL Server Profiler – средство, при помощи которого можно просматривать и отслеживать текущие запросы к базе данных (для этого нужно подключиться к БД с административными привилегиями). Приложение позволяет собирать и сохранять данные о каждом событии в файле или в таблице для последующего анализа. Например, с помощью приложения можно следить за производственной средой, чтобы определить, какие хранимые процедуры снижают производительность из-за того, что выполняются слишком медленно.
Полезные ссылки