Вы находитесь на странице: 1из 5

Базы данных

и LINQ
1. Введение

База данных представляет собой упорядоченный набор данных.


Система управления базами данных (СУБД) предоставляет средства для хранения,
упорядочения, выборки и изменения данных.
Большинство современных СУБД работает с реляционными базами данных, в которых
данные упорядочиваются в таблицы, состоящие из строк и столбцов.
Некоторые популярные коммерческие СУБД - Microsoft SQL Server, Oracle, Sybase и IВМ
DB2. СУБД с открытым кодом PostgreSQL и MySQL могут загружаться и свободно использоваться
всеми желающими. В этой главе используется бесплатная СУБД Microsoft SQL Server Express,
устанавливаемая в составе Visual Studio. Ее также можно отдельно загрузить с сайта Microsoft (
www.microsoft.com/express/sql ).

SQL Server Express


SQL Server Express предоставляет многие возможности полного (коммерческого) продукта
Microsoft SQL Server, но обладает рядом ограничений - например, максимальный размер базы данных
составляет 10 Гбайт. Файл базы данных SQL Server Express легко переносится в полную версию SQL
Server
Версия SQL Server Express, входящая в поставку Visual Studio Express 2012 for Windows
Desktop, называется SQL Server Express 2012 LocalDB. Она предназначена для разработки и
тестирования приложений на вашем компьютере.

ЯзыкSQL
Язык SQL (Structured Query Language) является международным стандартом выполнения
запросов к реляционным базам данных (то есть запросов на получение информации, удовлетворяющей
заданному критерию) и обработки данных.
Программы, обращавшиеся к реляционным данным, традиционно передавали СУБД запросы
SQL в виде строк, после чего обрабатывали результаты.

LINQ to Entities и ADO.NET Entity Framework


Логическим расширением запроса и обработки данных в базах данных является выполнение
тех же операций с произвольными источниками данных - массивами, коллекциями (например,
коллекцией Items элемента управления ListBox) и файлами.
LINQ to Entities позволяет работать с данными, хранящимися в реляционных базах данных, -
в нашем случае базах данных SQL Server Express.
Среда ADO.NET Entity Framework (часто обозначаемая сокращением EF) позволяет
приложениям взаимодействовать с данными в разных формах, включая данные, хранимые в
реляционных базах данных. Разработчик использует ADO.NET Entity Framework и Visual Studio для
создания так называемой модели данных сущностей, представляющей базу данных, после чего при
помощи LINQ to Entities работает с объектами модели сущностей. И хотя мы будем работать с базами
данных SQL Server Express, ADO.NET Entity Framework поддерживает большинство популярных
систем управления базами данных. ADO.NET Entity Framework незаметно для разработчика генерирует
команды SQL для взаимодействия с базой данных.

LINQ to SQL и LINQ to Entities


В 2008 году компания Microsoft прекратила дальнейшую разработку LINQ to SQL в пользу
новых и более мощных технологий LINQ to Entities и ADO.NET Entity Framework.
2. Реляционные базы данных

В реляционной базе данных информация упорядочивается в таблицы. На рис. 1 приведен


пример таблицы Employees, которая может использоваться в системе учета кадров. В таблице хранятся
атрибуты работников. Таблица состоит из строк (также называемых записями) и столбцов (также
называемых полями), в которых хранятся значения. В нашем примере таблица состоит из шести строк
(по одной на работника) и пяти столбцов (по одному на атрибут). В атрибутах хранятся идентификатор
работника, имя, отдел, зарплата и местонахождение работника.
Столбец ID каждой записи содержит первичный ключ таблицы - столбец (или группу
столбцов) с уникальным значением, которое не может повторяться в других столбцах. Уникальность
гарантирует, что каждое значение первичного ключа может использоваться для однозначной
идентификации одной строки. Первичный ключ, состоящий из двух и более столбцов, называется
составным ключом. LINQ to Entities требует, чтобы каждая таблица содержала первичный ключ для
поддержки обновления данных в таблицах. Строки на рис. .1 выводятся по возрастанию первичного
ключа, однако они также могут выводиться в порядке убывания или вообще без какого-либо
определенного порядка.

Каждый столбец представляет атрибут данных. Значения некоторых столбцов могут


повторяться в разных записях. Например, в трех разных строках столбец Department таблицы
Employees содержит число 413, которое показывает, что все эти работники принадлежат одному
отделу.

Выбор подмножеств данных


Технология LINQ to Entities может использоваться для определения запросов, выбирающих
подмножество данных из таблицы. Например, программа может выбрать из таблицы Employees данные
для получения результатов запроса с информацией о местонахождении каждого отдела,
упорядоченных по возрастанию кодов отделов рис. 2.
3. База данных Books
Теперь рассмотрим простую базу данных Books, в которой хранится информация о
некоторых книгах Deitel. Начнем с обзора таблиц базы данных. Совокупность таблиц базы данных,
их полей и отношений между ними называется схемой базы данных. ADO.NET Entity Framework
использует схему базы данных для определения классов, обеспечивающих взаимодействие с базой
данных. Файлы баз данных SQL Server имеют расширение .mdf.

Таблица Authors базы данных Books


База данных состоит из трех таблиц: Authors, Titles и AuthorISBN. Таблица Authors рис. 3
состоит из трех столбцов с уникальным идентификатором автора, именем и фамилией. На рис. 4
представлены данные из таблицы Authors.

Таблица Titles базы данных Books


Таблица Titles рис. 5 состоит из четырех столбцов с информацией о каждой книге в базе
данных: в них хранится номер ISBN, название, номер издания и год регистрации авторских прав. На
рис. 6 представлены данные из таблицы Titles.
Таблица AuthorISBN базы данных Books
Таблица AuthorISBN рис. 7 состоит из двух столбцов, в которых хранится номер ISBN и
идентификатор автора. Эта таблица связывает информацию об авторах с книгами. Столбец AuthorID
является внешним ключом, то есть значения столбца этой таблицы совпадают со столбцом первичного
ключа в другой таблице (AuthorID в таблице Authors ). Столбец ISBN тоже является внешним ключом -
он соответствует столбцу первичного ключа (ISBN) из таблицы Titles. База данных может состоять из
нескольких таблиц. Проектировщик базы данных стремится сократить количество данных,
дублируемых между таблицами. Внешние ключи, задаваемые в момент создания таблицы в базе
данных, связывают данные нескольких таблиц.
Комбинация столбцов AuthorID и ISBN этой таблицы образует составной первичный ключ.
Таким образом, каждая строка таблицы однозначно связывает одного автора с номером ISBN одной
книги.

На рис. 8 приведены данные из таблицы AuthorISBN базы данных Books.


Каждое значение внешнего ключа должно присутствовать как значение первичного ключа
другой таблицы, чтобы СУБД могла проверить действительность его значения.
Например, чтобы убедиться в том, что значение AuthorID в конкретной строке таблицы
AuthorISBN действительно см. рис.8, СУБД проверяет, что в таблице Authors имеется строка, у которой
это значение AuthorID является первичным ключом.
Внешние ключи также позволяют выполнять выборку взаимосвязанных данных из
нескольких таблиц - это называется объединением данных. Между первичным ключом и
соответствующим внешним ключом существуют отношения <<один ко многим» (например, один
автор может написать несколько книг и одна книга может быть написана несколькими авторами). Это
означает, что внешний ключ может многократно встречаться в своей таблице, но только один раз ( как
первичный ключ) в другой таблице. Например, номер ISBN 0132151006 может встречаться в
нескольких строках таблицы AuthorISBN (потому что у этой книги несколько авторов), но только один
раз в таблице Ti tles, где ISBN является первичным ключом.