https://technet.microsoft.com/en-us/library/ms143221(v=sql.105).aspx |
Работа с базами данных
"Сведения, которыми не располагали древние, были очень обширны."
Марк Твен
Для того чтобы создавать интересные web-страницы, необходимо наполнить их динамичным, обновляемым содержанием. Особенно необходимо это в бизнес-приложениях — банковских, интернет-магазинах и аукционах. Важная часть работы, которую выполняет разработчик ASP .NET — это связывание своих страниц с источниками данных, отображение данных на странице, создание удобных средств взаимодействия с ними.
Для хранения данных чаще всего используются СУБД (системы управления базами данных). Как уже говорилось, в ASP .NET 2.0 работа с данными происходит через ADO .NET 2.0— часть .NET, разработанная специально для доступа к базам данных или XML-файлам.
СУБД прошли долгий путь развития. В начале все данные хранили в простых (плоских) файлах. По мере увеличения объемов данных встал вопрос о том, как получить быстрый доступ к нужной информации. Для этого данные стали индексироваться. Другой вопрос — как избежать дублирования, когда одни и те же данные хранятся в разных местах. Чтобы его решить, была разработана теория нормализации баз данных. Сегодня мощная промышленная СУБД немыслима без систем защиты информации, журналирования, транзакций и хранимых процедур.
Данные в СУБД хранятся в таблицах. Таблица состоит из полей и записей. Запись — единица хранения данных, строка таблицы. Например, в одной записи хранятся сведения об одном человеке. Поля — это столбцы таблицы для хранения конкретного вида информации. Базы данных называются реляционными, потому что таблицы в них связаны определенным образом.
Представления (View) создаются на основе одной или нескольких таблиц с помощью фильтрации, объединения, сортировки и группирования.
Для наглядности рассмотрим эти понятия на примере. В свое время я работала с базой данных кадров одного предприятия. Как создать такую базу? Прежде всего нам нужна таблица для хранения данных о сотрудниках.
ID | Имя | Фамилия | Отчество | Дата рождения | Дата приема | Должность |
---|---|---|---|---|---|---|
1 | Петр | Васечкин | Иванович | 1965 | 2001 | Завхоз |
2 | Василий | Петров | Сидорович | 1977 | 2003 | Программист |
и т.д. Таблица может иметь тысячи записей.
Отделу кадров нужна информация о перемещениях сотрудников. Для этого заведена отдельная таблица. Например, Петров получил должность старшего программиста. Прежде всего надо заметить, что названий должностей — ограниченное количество. Чтобы избежать дублирования, лучше их хранить в отдельной таблице.
Должности | ||
---|---|---|
ID | Название должности | Минимальный оклад |
1 | Директор | 1 |
2 | Завхоз | 10 |
3 | Программист | 20 |
4 | Уборщица | 100 |
Числа в левой колонке — это ключи. Они нужны, чтобы связать таблицы друг с другом. В таблице "Сотрудники" теперь будет храниться не название должности, а его ключ в таблице должностей. Для таблицы "Сотрудники" он называется внешним ключом, а для таблицы "Должности" — первичным ключом. Ключ также необходимо ввести в таблице сотрудников. Перемещение сотрудника на другую должность будет храниться в таблице перемещений так:
Таблица "Должности" связана как с таблицей сотрудников, так и с таблицей перемещений по своему уникальному ключу. База данных может генерировать первичные ключи сама, автоматически добавляя значения к предыдущему значению ключа. Это называется автоинкрементированием. Для полной уверенности в уникальности данных в таблицах могут держать точное время создания записи (Timestamp) и GUI (глобальный уникальный идентификатор).
Этот процесс называется нормализацией. Чтобы для отчета восстановить информацию о перемещении, в запросе нужно связать данные из разных таблиц.
В результате этого запроса будет создано представление, которое покажет данные из взаимосвязанных таблиц в удобной для чтения форме:
SELECT Employees.LastName, Employees.FirstName, Titles.Title, Titles_1.Title, Promotions.PromotionDate FROM Titles AS Titles_1 INNER JOIN ((Promotions INNER JOIN Titles ON Promotions.TitleBefore = Titles.id) INNER JOIN Employees ON Promotions.EmployeeID = Employees.EmployeeID) ON Titles_1.id = Promotions.TitleAfter;
Множество таблиц данных, связанных отношениями, составляют базу данных. На сервере СУБД может храниться множество баз данных.
Подробнее о теории баз данных можно прочитать в других курсах. Перейдем к конкретным примерам связывания с базами данных на web-страницах.
У каждого пользователя Windows наверняка имеется программа Access. Это однопользовательская СУБД, в которой модель безопасности не так сильна. В одном файле Access хранятся как данные, так и интерфейс в виде форм и отчетов. Можно создавать модули на VBA (Visual Basic for Application). Профессиональные разработчики пользуются более мощными программами. По "серьезности" СУБД от Microsoft идут в порядке возрастания: Access — FoxPro — MS SQL. MS SQL не позволяет создавать формы, а занимается хранением и защитой данных на профессиональном уровне. Visual Studio 2005 (и VWD) при инсталляции устанавливает MS SQL Express. Он будет запускаться автоматически в виде сервиса Windows.
Для работы с базами данных используется язык структурированных запросов — SQL (Structured Query Language). Команды этого языка называются запросами. Запросы служат для получения данных, для создания и изменения структуры таблиц, добавления, удаления и обновления записей и многого другого. Последовательность команд может храниться прямо на сервере СУБД в виде хранимой процедуры. Нужно стараться всегда пользоваться хранимыми процедурами, а не писать команды самим. Главное их преимущество — скорость работы и инкапсуляция бизнес-логики. Хранятся они на сервере в уже откомпилированном виде, в то время как простой переданный набор команд SQL проходит через стадию компиляции.
Для обращения к базам данных из внешних программ существуют специальные механизмы. В Windows это ODBC — открытый интерфейс взаимодействия с базами данных. Он позволяет приложениям, работающим под Windows или другими ОС, общаться с различными серверами реляционных баз данных.
Для конфигурирования источников данных на вашем компьютере зайдите в Control Panel, Administrative Tools, Data Sources (ODBC).
Мы видим, что ODBC при наличии нужного драйвера позволяет связываться с различными базами данных — Access, FoxPro, Oracle, Microsoft SQL, MySQL, SAP, DB2. Если в файле Excel создать именованную таблицу, ODBC способен ее распознать и работать как с таблицей базы данных.
Веб-проект в Visual Studio 2005 содержит предопределенную папку App_Data. В ней могут храниться файлы с данными, которые используются в приложении. Это могут быть файлы .mdf (MS SQL ), .mdb (Microsoft Access), .xml и другие.