ALTER TABLE tblOrder
ADD CONSTRAINT OrderForeignKey
FOREIGN KEY (CustomerID)
REFERENCES tblCustomer (ID)
Помните, что добавление ограничения не создает обычного индекса по полю, оно просто делает поле уникальным, назначает поле первичным ключом или создает отношение между двумя таблицами.
Резюме
Эта глава посвящена технологии создания запросов, которые могут использоваться в приложениях доступа к базам данных, созданных в среде Visual Basic .NET. Здесь рассматривались запросы, которые возвращают необходимые записи, а также запросы, которые создают и модифицируют структуру баз данных.
Большая часть материала этой главы приводится отнюдь не ради увеличения объема книги; начав программировать с использованием Visual Studio .NET и ADO.NET, вы почувствуете реальную пользу от прочитанного.
Вопросы и ответы
Почему имена таблиц и полей иногда заключены в квадратные скобки?
Квадратные скобки часто окружают имена объектов в среде Visual Studio.NET и административных инструментах SQL Server для исключения проблем при использовании имен с пробелами и другими зарезервированными символами и словами. Например в базе данных Northwind, которая инсталлируется вместе с SQL Server 2000, есть таблица с именем Order Details. Хотя в общем случае не рекомендуется включать пробелы в имена таблиц, ее все же можно использовать в SQL Server в виде [Order Details]. Однако инструменты с графическим интерфейсом, например в среде Visual Studio .NET, всегда добавляют квадратные скобки. Но в данной книге они не используются, чтобы исключить излишнюю работу по их вводу.
Почему перед именем таблицы иногда используется приставка dbo? Что это такое?
dbo — это вспомогательный квалификатор (или моникер), который используется в инструментах с графическим интерфейсом при работе с SQL Server. Он позволяет установить соединение заданного объекта базы данных с владельцем базы данных. Объекты базы данных могут иметь разных владельцев, a dbo представляет собой сокращенную форму записи следующего высказывания: "этот объект относится к владельцу используемой базы данных". Разные объекты одной базы данных вполне могут относиться к разным владельцам, хотя, конечно, следует признать, что такая ситуация встречается редко. В базах данных, в которых все объекты относятся к владельцу dbo, этот моникер можно опустить (однако инструменты с графическим интерфейсом все равно попытаются вставить его).
ГЛАВА 3
Знакомство с SQL Server 2000
В прошлом многие программисты начинали создание приложений баз данных, используя язык Visual Basic и базу данных Microsoft Access с ядром Jet. Как только база данных разрасталась до нескольких тысяч записей или к ее услугам обращались несколько пользователей, наступал "великий перелом". Конфликты при доступе к данным со стороны пользователей, уменьшение производительности и отсутствие удобных инструментов управления данными и сервером привели к тому, что разработчики стали искать способы решения этих проблем с помощью других архитектур баз данных. Одной из таких архитектур стала модель вычислений типа клиент/сервер (или модель распределенных вычислений).
Суть архитектуры клиент/сервер заключается не только в предоставлении многопользовательского режима работы с базой данных, к тому же с такой задачей вполне может справляться Jet. В многопользовательской архитектуре несколько пользователей используют одни и те же данные в сети, т.е. один или несколько файлов базы данных находятся на сервере, к которому могут осуществлять доступ клиентские компьютеры. Несмотря на то что Microsoft Access также поддерживает многопользовательский ре жим работы, эту программу нельзя отнести к системам клиент/сервер, поскольку все необходимые операции выполняются на отдельном компьютере клиента. Например, для извлечения с помощью команды SQL одной записи из таблицы, включающей 50 тыс. записей, нужно перенести на компьютер клиента все строки (или по крайней мере их индексы) таблицы. При этом на стороне сервера не предусмотрено никакой "интеллектуальной" части для специализированной обработки данных, например для выполнения запроса и возвращения только запрошенных данных.
В архитектуре клиент/сервер предусмотрена серверная часть (back end), т.е. специализированное программное обеспечение, которое способно извлекать и кэшировать данные, разрешать конфликты доступа к данным со стороны клиентов, а также обеспечивать безопасность. Например, СУБД SQL Server компании Microsoft получает запросы от клиентских компьютеров, выполняет их на серверном компьютере, а затем возвращает клиентскому компьютеру только запрошенные данные. Таким образом, для извлечения одной записи из таблицы, включающей 50 тыс. записей, серверу будет передана команда SELECT, серверное программное обеспечение выполнит эту команду и возвратит клиенту только искомую запись. Очевидно, что при этом сетевой трафик значительно сокращается, а общая производительность повышается еще и потому, что вычислительная мощность (т.е. быстрота работы процессора и объем оперативной памяти) компьютера-сервера гораздо выше, чем компьютера-клиента. Поэтому в такой архитектуре будут быстрее выполняться команды и извлекаться данные.
Если вы работаете с Visual Basic .NET, то очевидно, что в качестве серверной части (или сервера баз данных) можно использовать Microsoft SQL Server, поставляемый вместе с Visual Basic .NET и Visual Studio .NET. Перечень разных версий Microsoft SQL Server, которые поставляются вместе с Visual Basic .NET и Visual Studio .NET, приводится далее в главе.
СОВЕТ
Базы данных на основе ядра баз данных Jet (MDB) рекомендуется использовать только для простейших и ограниченных приложений. Благодаря появлению нового ядра SQL Server 2000 Desktop предназначенного специально для баз данных небольшого размера, отпадает необходимость использования ядра Jet. Теперь размер базы данных SQL Server может не требуя дополнительного кодирования или изменения ее структуры по мере роста системы.
В этой главе внимание фокусируется на основах использования SQL Server 2000. Сначала предлагается введение, посвященное его установке, а затем излагаются базовые сведения об использовании SQL Server 2000, необходимые для понимания материала и примеров в остальной части книги. Излагаемого здесь материала вполне достаточно даже для тех, у кого вообще нет никакого опыта работы с SQL Server. Более того, даже разработчики с большим опытом работы с этой СУБД найдут здесь для себя много полезного. Рассмотрим следующую типичную ситуацию.
Допустим, вы входите в команду разработчиков распределенного приложения с архитектурой клиент/сервер. Программисты, разрабатывающие серверную часть приложения, к моменту промежуточной сдачи проекта только на 95% подготовили функциональную версию сервера. Нужно приступать к работе, а серверная часть приложения не готова на все 100%.
Более того, в вашем распоряжении может быть только 1-2 программиста с опытом создания серверной части. Поскольку программисты серверной части обладают довольно редким набором навыков, такая ситуация возникает довольно часто при создании приложений с архитектурой клиент/сервер. Таких специалистов труднее всего найти и удержать, а потому они работают с гораздо большим напряжением, чем остальные программисты. Кроме того, их гораздо сложнее заменить в случае неудачного выполнения работы. Более того, программисты клиентской части часто не могут завершить свою работу до тех пор, пока не будут исправлены ошибки в серверной части.
Такую ситуацию называют трагедией одаренного программиста серверной части.
Если вы принимали участие в проекте по созданию распределенного приложения с архитектурой клиент/сервер с несколькими разработчиками, то вам наверняка знакома эта ситуация. Одним из решений этой проблемы является создание прототипа клиентского приложения с использованием временного источника данных на основе Jet с последующей заменой его по окончании работы над серверной частью. Для этого обычно используется источник данных ODBC или OLEDB. Предлагаемый уровень абстракции на основе ODBC или OLEDB позволяет создавать и использовать в приложении прототип баз данных с переключением на реальную базу данных по окончании работа над проектом.
Размещение одного или нескольких уровней абстракции между клиентом и сервером также делает работу программистов клиентской части независимой от деятельности программистов серверной части. Для программистов серверной части это означает, что они должны создать представления или хранимые процедуры, которые поставляют данные клиентам. В среде Visual Basic .NET эта цель достигается за счет создания компонентов. Более подробно способы создания представлений или хранимых процедур описываются в других разделах этой главы.