Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Возможна многопользовательская работа с одной и той же БД

Читайте также:
  1. II. Контрольная работа « Дифференцирование функции ».
  2. II. Основные направления безотходной и малоотходной технологии
  3. II. Работа над созданием собственного текста.
  4. II. Работа по теме
  5. III. ВЛИЯНИЕ ФАКТОРОВ РАБОЧЕЙ СРЕДЫ НА СОСТОЯНИЕ ЗДОРОВЬЯ РАБОТАЮЩИХ.
  6. V2:Профилактика девиантного поведения в молодежной среде. Социально-педагогическая работа с неформальными молодежными группами и объединениями
  7. VII. Работа с текстом.
  8. VIII. Домашняя работа.
  9. VIII. Работа над задачей
  10. Youbionic работает над недорогостоящей печатной бионической рукой.

n систематическое обновление данных на компьютере пользователя из реальной БД

n блокирование записей, которые изменяются одним из пользователей

Достоинство архитектуры "файл-сервер"состоит в возможности одновременной многопользовательской обработки одной БД.

Недостатки архитектуры "файл-сервер" :

  1. передаются избыточные данные
  2. высокие нагрузки на сеть и, вследствие этого, резкое снижение производительности приложения при увеличении числа одновременно работающих клиентов
  3. возможность нарушения физической и логической целостности данных

Архит.Клиент-серверТрадиционно под термином "клиент-сервер" принято понимать приложение, которое обращается напрямую к серверу баз данных и содержит в себе бизнес-логику процессов работы. А "многозвенная архитектура" также в традиционном понимании подразумевает наличие тонкого клиента, который обращается к серверу приложений, а он, в свою очередь, обращается уже непосредственно к серверу баз данных. Бизнес-правила при этом расположены на промежуточном слое — то есть на сервере приложений.

Достоинства архитектуры "клиент-сервер":

n Снижается нагрузка на сеть за счет уменьшения объема данных в пакетах, посылаемых по сети.

n Понижает сложность приложений-клиентов (нет необходимости обеспечивать целостность и безопасность БД и следить за параметрами многопользовательской работы с БД);

n Повышается степень безопасности данных за счет жесткого контроля целостности.

n Снижаются требования к аппаратному обеспечению пользователя.

 

3.Клиент-сервер.

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

n Сервер БД представляет собой приложение, осуществляющее комплекс действий по управлению данными – выполнение запросов клиентов, хранение и резервное копирование данных, отслеживание целостности, проверку прав пользователей, ведение журнала транзакций.

n Клиенты – это различные приложения пользователей, выполняющие запросы к серверу, проверяющие допустимость данных и получающие ответы от него.

n Сеть и коммуникационное ПО осуществляют взаимодействие между клиентом и сервером с помощью сетевых протоколов.

Удаленная база данных размещена на компьютере - сервере сети, а приложение - на компьютере пользователя. Сервер отдельно от клиента - удаленный сервер.

4-5. Традиционно под термином "клиент-сервер" принято понимать приложение, которое обращается напрямую к серверу баз данных и содержит в себе бизнес-логику процессов работы. А "многозвенная архитектура" также в традиционном понимании подразумевает наличие тонкого клиента, который обращается к серверу приложений, а он, в свою очередь, обращается уже непосредственно к серверу баз данных. Бизнес-правила при этом расположены на промежуточном слое — то есть на сервере приложений.

6. Основной принцип такой технологии заключается в разделении функций стандартного

интерактивного приложения на 5 групп:

 

1. Логика представления, или презентационная логика – функции ввода/вывода.

2. Бизнес-логика - прикладные функции, определяющие основные алгоритмы

решения задач приложения.

3. Логика манипулирования данными, или логика обработки данных - функции

обработки данных внутри приложения.

4. Логика управления информационными ресурсами – функции СУБД, которые

обеспечивают хранение и управление БД.

4. Служебные функции, обеспечивающие связь между функциями первых 4-х групп.

7. Технология COM (component object model)

 

Стандарт COM был разработан в 1993 году корпорацией Microsoft

COM (ComponentObjectModel) – Технология Компонентных Объектов разра-

ботана корпорацией Microsoft и широко применяется при построении рас-

пределенных систем.

Эта технология описывает модель объекта и способы взаимодействия объ-

ектов и программ.

 

Технология COM (ComponentObjectModel) - предоставляет возможность

одной программе (клиенту) работать с объектом другой программы (серве-

ра).

 

Программы, построенные на стандарте COM, фактически не являются авто-

номными программами, а представляют собой набор взаимодействующих

между собой COM-компонентов.Сутью данной технологии является то,что

программы строятся из компонент, которые состоят из объектов. Само по се-

бе это обстоятельство не является последней новостью в области программо-

строения - модульная архитектура и объектно-ориентированный подход к

Загрузка...

построению программ давно являются признанными стандартами defacto.

Новостью является то, что является этими компонентами и объектами - ими

является непосредственно исполняемый двоичный код - их достаточно заре-

гистрировать в операционной системе и они будут доступны любой про-

грамме исполняющейся на данной машине.Вы просто объявляете COM-

объект, находящийся внутри вашего исполняемого модуля. Объявляете как

его вызвать - и всё.Кроме того, поскольку сопрягаются двоичные объекты, -

не все ли равно на каком языке эти объекты написаны?!

 

COM-объект напоминает компонент Delphi. Это законченный объект со

своими свойствами и методами, который может легко встраиваться в прило-

жения и распространяться как отдельный программный продукт. Службы

СОМ реализованы на платформах Windows и тесно интегрированы со служ-

бами самих этих операционных систем.

8. Технология CORBA- это стандарт написания распределенных приложений,

предложенный консорциумом OMG (Open Management Group).

Технология CORBA (Common Object Request Broker Architecture–общая ар-хитектура брокера объектных заявок), разрабатываемая OMG (Object

Managment Group) с 1990-го года, позволяет вызывать методы у объектов,

находящихся в сети гдеугодно, так, как если бы все они были локальными

объектами. CORBA позволяет организовать единую информационную среду,

элементы которой могут общаться друг с другом, вне зависимости от их кон-кретной реализации, "прописки" в распределенной системе, платформы и

языка их реализации

Это специальная технология, позволяющая создавать распределенные при-ложения, работающие на нескольких компьютерах в сети, которые, в отли-чие от Com-компонентов, могут выполняться под управлением разных ОС

одновременно (а не только Windows).

Брокер объектных запросов (ObjectRequestBroker, ORB) является ос-новным компонентом вCORBA. Брокер запросов должен быть в любой рас-пределенной системе, совместимой сCORBA.

Брокер объектных запросов–это специальная программа, которая отсле-живает и синхронизирует работу объектов CORBA, организует процесс

обмена сообщениями между ними, перезапускает их в случае сбоев компью-тера, оптимально распределяет загрузку и организует связь клиентских

программ с серверными объектами.

ORBпредставляет из себя своеобразную шину, через которую проис-ходит взаимодействие удаленных объектов. Любой CORBA-совместимый

объект должен иметь брокер объектных запросов между ним и всем кто к

нему обращается.

9. MIDAS-multi-tired distributed application service suite-это технология Borland

для создания многоуровневыхприложений баз данных. Применение данной

архитектуры позволяет быстро разрабатывать простые в сопровождении и

установке, надежные, распределенные БД.

Обеспечивает реализацию модели многоуровневых систем (чаще использу-ют трехуровневую модель). Отдельныекомпоненты "клиент-серверного"

приложения выполняются на разных компьютерах:

1. Клиентская программа реализует пользовательский интерфейс и по-сылает запросы на выполнение нужных действий.

2. Сервер приложений синхронизирует работу всех компонентов систе-мы и организует связь между ними.

3. Удаленный сервер баз данных–это СУБД, выполняющаяся на выде-ленном компьютере, обрабатывающая запросы от сервера приложе-ний и по этим запросам возвращающая наборы данных или вносящая

изменения в таблицу.

10. ADO(ActiveX Data Objects-объекты данных, построенные как объекты

ActiveX)-это часть архитектуры универсального доступа к данным от

Microsoft. ADOявляется частью более крупномасштабной технологии под

названиемMDAC (Microsoft Data Access Components). Термин MDACяв-ляется общим обозначением для всех разработанных компаниейMicrosoft

технологий, связанных с базами данных. К этому набору относятсяADO,

OLE DB, ODBCи др.

ТехнологияADOбазируется на возможностяхСОМ, а именно интерфей-сов OLE DB. В общем случае АDО можно рассматривать как язык про-граммирования с БД, позволяющий выбирать, модифицировать и удалять

записи.

ADOпредставляет собой высокоуровневый прикладной интерфейс для дос-тупа кOLE DB-интерфейсам.ADOсодержит набор объектов, используе-мых для соединения с источником данных, для чтения, добавления, удаления

имодификации данных.

Согласно терминологииADO, любой источник данных (база данных,

электронная таблица, файл) называется хранилищем данных, с которым

при помощи провайдера данных взаимодействует приложение. Провайдеры

ADOобеспечивают соединение приложения, использующего данные через

ADO, с источником данных (сервером SQL, локальной базой данных, файло-вой системой и т. д.).Для каждого типа хранилища данных должен сущест-вовать провайдерADO. Провайдер "знает" о местоположении хранилища

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

ТехнологияADOнетребовательная к системнымресурсам, создает

минимальную нагрузкунасетьиотличаетсяминимальнымчисломуров-неймеждуприложениемиисточникомданных.

ЧастьADO,носящая названиеслужбыудаленныхданных(Remote

DataService, RDS), отвечаетза передачуклиентамотсоединенных набо-ровзапи- сейпопротоколуHTTPилиDistributedCOM(DCOM), чтопо-зволяет разра- батывать полнофункциональные, ориентированные на

работу с даннымиWebприложения.

Объектная модель ADOпризвана обеспечить доступ к наиболее

частоприменяемымфункциямOLEDB. ADOсостоитизтрехосновных

компонентов: объекта Connection, объекта Command и объекта

Recordset.

11. Средства, предоставляющие доступ к источнику данных с использованием технологии

OLE DB, называются OLE DB провайдерами. Программы-клиенты, использующие для

доступа OLE DB провайдеры, называются потребителями данных.

В том случае, если существует только ODBC-драйвер для доступа к конкретному источ-нику данных, то для применения технологии OLE DB можно использовать OLE DB про-вайдер, предназначенный для доступа к ODBC-источнику данных.OLE DB-это откры-тая спецификация, которая обеспечивает открытый стандарт доступа ко всем видам

данных, позволяет получить доступ к информации, организованной произвольным спосо-бом, а не только реляционно(e-mail, мультимедийная информация, обычные файлы), а

также получить доступ кданным, которые не всегда доступны в сети.

12. В архитектуре ОDВС используется один ОDВС Driver Manager и несколько ОDВС-

драйверов, обеспечивающих доступ к конкретным СУБД Driver Manager связывает при-

ложение и интерфейсные объекты, которые выполняют обработку SQL-за-Мросов к кон-

кретной СУБД.Такой подход является достаточно универсальным, стандартизируемым,

что ипозволяет использовать ODBС-механизмы для работы практически с любой

системой.

Однако этот способ также не лишеннедостатков:

-увеличивается время обработки запросов (как следствие введения дополнительного про-

граммного слоя);

-необходимы предварительная инсталляция и настройка ODВС-драйвера (указание драй-

вера СУБД, сетевого пути ксерверу, базы данных и т. д.) на каждом рабочем месте. Па-

раметры этой настройки являются статическими, т. е. приложение их изменить самостоя-

тельно не может.

13. ВсекомпонентыMicrosoftSQLServer 2008запускаютсяизменю«Пуск\ Программы\

MicrosoftSQLServer2008. ВMicrosoftSQLServer2008входятследующиекомпоненты:

1. DeploymentWizard–мастерповыводуинформациихранимойнасервере;

2. SQL ServerInstallationCenter–сентрустановкиSQL Server2008;

3. Reporting Services Configuration Manager– менеджер службы настройки

отчётов;

4. SQL ServerConfigurationManager–менеджернастройкисервера;

5. SQLServerErrorand UsageReporting– службапротоколированияработы

сервераислужбаотчётовобошибках;

6. MicrosoftSamples Overview – ссылка на сайт корпорацииMicrosoft, где

можнопросмотретьпримерыработыссервером;

7. SQLServerBooksOnline- полная справочная система поMicrosoftSQL

Server2008. Онасодержит справки, как попрограммированию,так ипо

администрированиюсервера;

8. SQLServerTutorials–учебникипоработессервером;

9. DataProfileViewer–просмотрпрофилейпоработесданными;

10.ExecutePackageUtility–инструментыпо сжатиюданных;

11.DatabaseEngineTuningAdvisor–мастернастройкиядрабазыданных;

12. SQLServerProfiler–настройкапрофилейпоработесданными;

13. ImportandExportData–импорти экспортданных;

14. SQL Server Business Intelligence Development Studio – интегрированная

средаразработкиBusiness IntelligenceDevelopmentStudio;

15.SQL Server Management Studio – графическая оболочка для управления

серверомиразработкибазданных.

16. Все объекты Transact-SQL имеют имена, или идентификаторы. Для некоторых объектов

(например, таблиц, представлений) идентификаторы обязательны, для других (например,

ограничений)–необязательны.

Стандартныеидентификаторы должны начинаться с символов: _, @, #. Остальные

символы могут быть строчными и прописными буквами латинского алфавита, цифрами,

символами $,_, @, #. В некоторых реализациях допускается использование национального

алфавита. В качестве имени нельзя использовать зарезервированные слова. Длина

идентификатора–от 1 до 128 символов.

Полное имя объектавключает имя сервера (server), базы данных (database), владельца БД

(owner_name), объекта БД(object_name). Обязательно указывается только имя объекта, по

умолчанию используется имя локального сервера, текущей БД, текущего пользователя.

Ограниченные идентификаторыне подчиняются правилам именования объектов и для

них применяются ограничители: квадратные скобки или двойные кавычки. Тело

идентификатора может содержать любую комбинацию символов текущей кодовой

страницы.

Временные объекты предназначены для хранения промежуточных данных. Такими

объектами в Transact-SQL служат переменные и временные таблицы. Переменная

используется для хранения одиночных значений и создается с помощью команды

DECLARE{@<имя переменной><тип переменной>}[,...n]

Например:DECLARE@sum int, @trand char

Глобальные переменные начинаются с@@.

14. SQL (Structured Query Language) – Структурированный
Язык Запросов – стандартный язык запросов по работе с реляцион-
ными базами данных. Язык был предложен компанией IBM в нача-
ле 1970-х гг. для проверки возможностей реляционной модели.
SQL в чистом (базовом) виде является информационно-логи-
ческим языком, а не языком программирования. Однако стандарт
языка спецификацией SQL/PSM предусматривает возможность его
процедурных расширений, с учетом которых язык уже может рас-
сматриваться в качестве языка программирования.
Достоинства SQL:
1. Наличие международных стандартов.
2. Независимость от конкретной СУБД. Несмотря на наличие
диалектов и различий в синтаксисе, в большинстве своем тексты
SQL-запросов, содержащие DDL и DML, могут быть достаточно
легко перенесены из одной СУБД в другую.5
3. Поддержка архитектуры клиент-сервер.
4. Распространенность.
5. Быстрое обучение.
6. Декларативность. С помощью SQL программист описывает
только то, какие данные нужно извлечь или модифицировать. Ка-
ким образом это сделать, решает СУБД непосредственно при обра-
ботке SQL-запроса. Однако программисту полезно представлять,
как СУБД будет разбирать текст его запроса. Чем сложнее сконст-
руирован запрос, тем больше он допускает вариантов написания,
различных по скорости выполнения, но одинаковых по итоговому
набору данных.
Недостатки SQL:
1. Неполное соответствие реляционной модели данных (нали-
чие дубликатов, необязательность первичного ключа, возможность
упорядочения результатов).
2. Недостаточно продуманный механизм неопределенных зна-
чений.
3. Сложность формулировок и громоздкость.

15.Объекты Transact-SQL
Все объекты Transact-SQL имеют имена, или идентификаторы. Для некоторых объектов
(например, таблиц, представлений) идентификаторы обязательны, для других (например,
ограничений) – необязательны.
Стандартные идентификаторы должны начинаться с символов: _, @, #. Остальные
символы могут быть строчными и прописными буквами латинского алфавита, цифрами,
символами $,_, @, #. В некоторых реализациях допускается использование национального
алфавита. В качестве имени нельзя использовать зарезервированные слова. Длина
идентификатора – от 1 до 128 символов.
Полное имя объекта включает имя сервера (server), базы данных (database), владельца БД
(owner_name), объекта БД(object_name). Обязательно указывается только имя объекта, по
умолчанию используется имя локального сервера, текущей БД, текущего пользователя.
Ограниченные идентификаторы не подчиняются правилам именования объектов и для
них применяются ограничители: квадратные скобки или двойные кавычки. Тело
идентификатора может содержать любую комбинацию символов текущей кодовой
страницы.Временные объекты предназначены для хранения промежуточных данных. Такими
объектами в Transact-SQL служат переменные и временные таблицы. Переменная
используется для хранения одиночных значений и создается с помощью команды
DECLARE{@<имя переменной><тип переменной>}[,...n]
Например: DECLARE @sum int, @trand char
Глобальные переменные начинаются с@@.
Для временного хранения больших объемов информации используются временные
таблицы. Они бывают глобальные и локальные. Доступ к глобальной временной таблице
может быть получен из любого соединения, и такие таблицы могут использоваться для
обмена данными между различными приложениями. Имя таблицы должно быть
уникальным в пределах сервера и должно начинаться с ##. Глобальная временная таблица
уничтожается пользователем с помощью команды DROPTABLE или при закрытии
соединения, в котором она создавалась.
Локальные временные таблицы видны только из того соединения, в котором они были
созданы. При закрытии соединения таблица уничтожается. Если локальная таблица
создана в хранимой процедуре, то при закрытии процедуры она уничтожается. В разных
соединениях могут создаваться локальные таблицы с одинаковыми именами. Имя
таблицы должно начинаться с #.
ВыражениявTransact-SQL могут включать константы, идентификаторы объектов,
логические и арифметические операции, функции и т. д. выражения могут использоваться
в качестве параметров хранимых процедур, команд Transact-SQL или запросов.
Операндами в выражениях могут быть константы, переменные, функции, имена столбцов,
подзапросы.
Операторы:
1. унарные +, -
2. присваивания: SET @vartab = 13
3. арифметические:+,-, *, /, % - остаток от деления
4. конкатенация: +
5. сравнения: =, <, >, <=, >=, не равно != или <>, не более !>, не менее !<
6. битовые: AND (&), OR(|), XOR (^)
7. логические: ALL (TRUE, если условие выполняется для всего набора данных),
AND, ANY (TRUE, если условие выполняется хотя бы для одного элемента из
набора данных), BETWEEN(TRUE, если значение лежит в диапазоне),
EXIST(TRUE, если подзапрос возвращает хотя бы одно значение), IN(TRUE, если
значение входит в указанный список), LIKE, NOT, OR, SOME (TRUE, если
условие выполняется хотя бы для одного элемента из набора данных)

16. Операторы:
1. унарные +, -
2. присваивания: SET @vartab = 13
3. арифметические:+,-, *, /, % - остаток от деления
4. конкатенация: +
5. сравнения: =, <, >, <=, >=, не равно != или <>, не более !>, не менее !<
6. битовые: AND (&), OR(|), XOR (^)
7. логические: ALL (TRUE, если условие выполняется для всего набора данных),
AND, ANY (TRUE, если условие выполняется хотя бы для одного элемента из
набора данных), BETWEEN(TRUE, если значение лежит в диапазоне),
EXIST(TRUE, если подзапрос возвращает хотя бы одно значение), IN(TRUE, если
значение входит в указанный список), LIKE, NOT, OR, SOME (TRUE, если
условие выполняется хотя бы для одного элемента из набора данных)

17. Синтаксис оператора SELECT.В разделе SELECT могут быть вычисляемые поля, т. е. выражения Transact SQL. Для

задания имен таких полей применяется ключевое слово AS, после которого указывается

идентификатор: <выражение>AS<имя поля>.

В разделе FROM могут фигурировать таблицы, представления, объединения. В

объединения могут включаться как таблицы, так и представления.

В разделе GROUPBY могут использоваться ключевые слова ALL, WITHCUBE,

WITHROLLUP.

При использовании условия фильтрации в запросе может возникнуть ситуация, когда в

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

результат. Ключевое слово ALLозначает, что пустые группы будут включаться в

результат.

18. / * Символом * можно выбрать все поля, а вместо имени поля
применить выражение из нескольких имен
ALL Если SELECT не содержит ни одного предиката, то подразуме-
вается предикат ALL. Отбираются все записи, соответствующие
условиям, заданным в инструкции SELECT. Приведенные ниже
команды Transact SQL эквивалентны; они возвращают все записи
из таблицы Students:
SELECT ALL FROM Students
SELECT * FROM Students
DISTINCT Исключает записи, которые содержат повторяющиеся значения
в выбранных полях. Чтобы запись была включена в результат
выполнения запроса, значения в каждом поле, включенном в
команду SELECT, должны быть уникальными. Например, в
таблице Students есть однофамильцы. Если две записи содержат
значение Иванов в поле FIO, то следующая команда возвратит
только одну из них:
SELECT DISTINCT FIO FROM Students;
Если опустить предикат DISTINCT, этот запрос возвратит обе
записи для фамилии Иванов.
Результат выполнения команды SELECT, содержащей предикат
DISTINCT, является необновляемым и не отражает последую-
щие изменения, внесенные другими пользователями58
Окончание табл. 17
1 2
TOP n
[PERCENT]
Возвращает определенное число записей, находящихся в начале
или в конце диапазона, описанного с помощью предложения
ORDER BY.
Следующая команда позволяет получить список 5 студентов
с самой высокой стипендией
SELECT TOP 5 FIO, Stipendiya
FROM Students ORDER BY Stipendiya DESC;
Результат выполнения запроса приведен на рисунке.
Если предложение ORDER BY будет опущено, запрос возвратит
произвольный набор 5 записей из таблицы Students, удовлетво-
ряющих предложению WHERE.
Можно использовать зарезервированное слово PERCENT для
возврата определенного процента записей, находящихся в начале
или в конце диапазона, описанного с помощью предложения
ORDER BY. Например, вместо 5 студентов с самой высокой
стипендией следует отобрать студентов, попавших в последние
5 процентов:
SELECT TOP 5 PERCENT FIO, Stipendiya
FROM Students ORDER BY Stipendiya ASC;
Предикат ASC обеспечивает возврат последних значений.
Значение, следующее после предиката TOP, должно быть
числовым значением типа Integer без знака.
Предикат TOP не влияет на возможность обновления запроса

19 // Ключевое слово AS служит оператором для присваивания
псевдонимов (alias) таблицам или заголовкам столбцов

ORDER BY
ORDER BY сортирует данные выходного набора в заданной
последовательности. Сортировка может выполняться по нескольким
полям, в этом случае они перечисляются за ключевым словом
ORDER BY через запятую. По умолчанию реализуется сортировка
по возрастанию, она задается ключевым словом ASC. Для выполне-
ния сортировки в обратной последовательности необходимо указать65
ключевое слово DESC. Фраза ORDER BY позволяет упорядочить
выбранные записи в порядке возрастания или убывания значений
любого столбца или комбинации столбцов, независимо от того,
присутствуют эти столбцы в таблице результата или нет. Фраза
ORDER BY всегда должна быть последним элементом в опера-
торе SELECT.

23|| Предложение GROUP BY
Группирование данных – это размещение данных в столбцах с
повторяющимися значениями в определенном логическом порядке.
Например, в базе данных содержится информация о студентах.
Студенты учатся в разных группах. Вполне вероятно, что может по-
надобиться информация по каждой группе и обучающихся там сту-
дентах. Для этого следует сгруппировать информацию о студентах
по группам.
Предположим, что необходимо найти среднюю стипендию
студентов по каждой группе. Это можно сделать, применив к
столбцу Stipendiya итоговую функцию AVG, а затем использовать
GROUP BY для группирования выводимых данных по группам.
Запрос, в котором присутствует GROUP BY, называется груп-
пирующим запросом. В нем группируются данные, полученные в
результате выполнения команды SELECT, после чего для каждой
отдельной группы создается единственная суммарная строка.
Стандарт SQL требует, чтобы команда SELECT и фраза
GROUP BY были тесно связаны между собой. При наличии в
команде SELECT фразы GROUP BY каждый элемент списка дол-70
жен иметь единственное значение для всей группы. Более того,
команда SELECT может включать только следующие типы элементов:
мена полей;-и
тоговые функции;-и
нстанты;-ко
выражения, включающие комбинации перечисленных выше-
элементов.
Все имена полей, приведенные в списке предложения
SELECT, должны присутствовать и во фразе GROUP BY – за ис-
ключением случаев, когда имя столбца используется в итоговой
функции. Однако во фразе GROUP BY могут быть имена столбцов,
отсутствующие в списке предложения SELECT (но данные из этих
столбцов не выводятся!)
Если совместно с GROUP BY используется предложение
WHERE, то оно обрабатывается первым, а группированию подвер-
гаются только те строки, которые удовлетворяют условию поиска.
Стандартом SQL определено, что при проведении группиро-
вания все отсутствующие значения рассматриваются как равные.
Если две строки таблицы в одном и том же группируемом столбце
содержат значение NULL и идентичные значения во всех остальных
непустых группируемых столбцах, они помещаются в одну и ту же
группу. С помощью итоговых (агрегатных) функций в SQL-запросе
можно получить ряд обобщающих статистических сведений о мно-
жестве отобранных значений выходного набора.
Пользователю доступны следующие основные итоговые
функции:
Count (Выражение) – определяет количество записей в вы--
ходном наборе SQL-запроса;
Min/Max (Выражение) – определяют наименьшее и наи--
большее из множества значений в некотором поле запроса;
Avg (Выражение) – эта функция позволяет рассчитать-
среднее для множества значений, хранящихся в определенном по-
ле записей, отобранных запросом. Оно является арифметическим
средним значением, т.е. суммой значений, деленной на их коли-
чество.
Sum (Выражение) – вычисляет сумму множества значений,-
содержащихся в определенном поле записей, отобранных запросом.
Чаще всего в качестве выражения выступают имена столб-
цов. Выражение может вычисляться и по значениям нескольких
таблиц.67
Все эти функции оперируют со значениями в единственном
столбце таблицы или с арифметическим выражением и возвращают
единственное значение.
Функции COUNT, MIN и MAX применимы как к числовым,
так и к нечисловым полям.
Функции SUM и AVG могут использоваться только в случае
числовых полей.
При вычислении результатов любых функций сначала исклю-
чаются все пустые значения. После этого требуемая операция при-
меняется только к оставшимся конкретным значениям столбца.
Вариант COUNT(*) – особый случай использования функции
COUNT. Назначение – подсчет всех строк в результирующей таб-
лице, независимо от того, содержатся там пустые, дублирующиеся
или любые другие значения.
Если до применения обобщающей функции необходимо ис-
ключить дублирующиеся значения, следует перед именем столбца в
определении функции поместить ключевое слово DISTINCT. Оно
не имеет смысла для функций MIN и MAX, однако его использова-
ние может повлиять на результаты выполнения функций SUM и
AVG. Необходимо заранее обдумать, должно ли оно присутствовать
в каждом конкретном случае. Ключевое слово DISTINCT может
быть указано в любом запросе не более 1 раза.
Особые случаи применения итоговых функций:
SUM (DISTINCT <поле>) – суммирование различных значе-
ний поля;
AVG (DISTINCT <поле>) – среднее арифметическое разных
значений поля;
COUNT (DISTINCT <поле>) – подсчет количества разных
значений поля;
COUNT (<поле>) – подсчет количества ненулевых значений
поля;
COUNT (*) – подсчет количества строк в результате.
Итоговые функции могут использоваться только в списке
предложения SELECT и в составе предложения HAVING. Во всех
других случаях это недопустимо.

24// Подзапросы
Часто невозможно решить поставленную задачу путем одного
запроса. Это особенно актуально, когда при использовании условия
поиска в предложении WHERE значение, с которым надо сравни-
вать, заранее не определено и должно быть вычислено в момент
выполнения команды SELECT. В таком случае используют закон-
ченные команды SELECT, внедренные в тело другой команды
SELECT.
Подзапрос – это запрос, содержащийся в выражении ключево-
го слова WHERE другого запроса с целью дополнительных ограни-
чений на выводимые данные. Подзапросы называют также вложен-
ными запросами.
Базовый синтаксис команды с подзапросом:
SELECT имя_столбиа
FROM таблица
WHERE имя_столбца = (SELECT имя столбца
FROM таблица
WHERE условия);
Подзапрос можно использовать в выражении ключевых слов
WHERE или HAVING внешних операторов выбора SELECT, встав-
ки INSERT, обновления UPDATE или удаления DELETE. Можно
использовать логические операции и операции сравнения типа =, >,
<, IN, NOT IN, AND, OR и т.п.
10.1. Правила составления подзапросов
1. Во фразах WHERE и HAVING подзапрос записывается как
второй операнд условия отбора, т.е. после знака операции сравне-
ния (=, <, >, <=, >=, <>).
2. Текст подзапроса заключается в круглые скобки. Подзапрос
может ссылаться только на один столбец в выражении своего клю-
чевого слова SELECT. Исключение – это случаи, когда в главном
запросе используется сравнение с несколькими столбцами из подза-
проса.
3. Ключевое слово ORDER BY нельзя использовать в подза-
просе, а только во внешнем подзапросе. Вместо ORDER BY в под-
запросе можно использовать GROUP BY.76
4. Подзапрос, возвращающий несколько строк данных, можно
использовать только в операторах, допускающих множество значе-
ний, например в IN.
5. Подзапрос нельзя использовать как аргумент функции, до-
пускающей множество значений.
6. Подзапросы нельзя использовать в списках предложений
ORDER BY и GROUP BY.
7. Список выбора внутреннего подзапроса, которому предше-
ствует операция сравнения, может содержать только одно выраже-
ние или название столбца, и подзапрос должен возвращать единст-
венный результат. При этом тип данных столбца, указанного в кон-
струкции WHERE внешнего оператора, должен быть совместим c
типом данных в столбце, указанным в списке выбора подзапроса.
8. В подзапросах не допускаются текстовые (text) и графиче-
ские (image) данные.
9. Подзапросы не могут обрабатывать свои результаты внут-
ренним образом, т.е. подзапрос не может содержать конструкций
ORDER BY или ключевого слова INTO.
10. Количество вложенных уровней для подзапросов не долж-
но превышать 16.
11. Операцию BETWEEN нельзя использовать по отношению
к подзапросу, но ее можно использовать в самом подзапросе.
Пример правильного использования BETWEEN:
SELECT имя_столбца
FROM таблица
WHERE имя_столбца ОПЕРАЦИЯ (SELECT имя_столбца
FROM таблица
WHERE значение BETWEEN значение);
Пример неправильного использования BETWEEN:
SELECT имя_столбца FROM таблица
WHERE имя_столбца BETWEEN значение AND (SELECT
имя_столбца
FROM таблица);
12. В предложении SELECT подзапроса нельзя использовать
символ “*” и константы (кроме EXISTS-подзапросов).77
13. Имена столбцов в подзапросе относятся по умолчанию к
таблице, указанной во фразе FROM подзапроса. Если они относятся
к таблице внешнего запроса, необходимо задать полное (уточнен-
ное) имя столбца в виде “таблица.столбец”.
14. Список в предложении SELECT состоит из имен отдель-
ных столбцов или составленных из них выражений – за исключени-
ем случая, когда в подзапросе присутствует ключевое слово
EXISTS;
10.2. Типы подзапросов
Существуют два основных типа подзапросов:
подзапросы-выражения или скалярные подзапросы. Этим-
подзапросам предшествует немодифицированная операция сравне-
ния. Они возвращают единственное значение;

25///Соединение таблиц
Для соединения таблиц с одноименными столбцами или таб-
лицы с самой собой используются алиасы или псевдонимы. Они за-
даются во фразе FROM через пробел после имени таблицы. При
этом истинное имя таблицы в базе данных не меняется.
Например:
SELECT R.a1, R.a2, S.b1, S.b2
FROM R t1, S t2
WHERE R.a1= S.b2;
12.1. Внутреннее соединение (INNER JOIN)
При внутреннем естественном соединении группируются
только те строки, значения которых по соединяемым (одноимен-
ным) столбцам совпадают:
SELECT R.a1, R.a2, S.b1, S.b2
FROM R, S
WHERE R.a2=S.b1
или
SELECT R.a1, R.a2, S.b1, S.b2
FROM R INNER JOIN S ON R.a2=S.b1;
Пример 82. Объединить поля из таблиц Teachers и Groups
при условии, что преподаватель является куратором группы:
SELECT Familia, Imja, Surname, Groups.Kurator
FROM Teachers
INNER JOIN Groups ON Teachers.ID_Teacher Groups.Kurator;
Результат выполнения запроса приведен на рис. 42.
Рис. 42. Внутреннее соединение101
12.2. Внешнее соединение
При внешнем соединении в результирующую таблицу поме-
щаются не только парные строки, но и строки, не нашедшие себе
пару. По способу добавления непарных строк различают:
левое открытое соединение, когда непарные строки добав--
ляются из таблицы, расположенной слева по отношению к опции
JOIN ;
правое открытое соединение, когда непарные строки добав--
ляются из правой по отношению к JOIN таблицы;
полное открытое соединение, когда добавляются все непар--
ные строки обеих соединяемых таблиц.
12.2.1. Внешнее левое соединение LEFT JOIN
При внешнем левом соединении в результирующий набор бу-
дут выбраны все строки из левой таблицы (указываемой первой).
При совпадении значений по соединяемым (одноименным) столб-
цам значения второй таблицы заносятся в результирующий набор в
соответствующие строки. При отсутствии совпадений в качестве
значений второй таблицы проставляется значение NULL:
SELECT R.a1, R.a2, S.b1, S.b2
FROM R LEFT JOIN S ON R.a2=S.b1;
Пример 83. Соединить поле Familia из таблицы Teachers с
полем Name_Group из таблицы Groups:
SELECT Teachers.Familia, Groups.Name_Group FROM
Teachers
LEFT JOIN Groups ON Teachers.ID_Teacher=Groups.Kurator;
12.2.2. Внешнее правое соединение RIGHT JOIN
При внешнем правом соединении в результирующий набор
будут выбраны все строки из правой таблицы (указываемой вто-
рой). При совпадении значений по соединяемым (одноименным)
столбцам значения первой таблицы заносятся в результирующий
набор в соответствующие строки. При отсутствии совпадений в ка-
честве значений первой таблицы проставляется значение NULL:
SELECT R.a1, R.a2, S.b1, S.b2
FROM R RIGHT JOIN S ON R.a2=S.b1;102
Пример 84. Объединить таблицы Lessons и Progress, исполь-
зуя правое соединение по предметам:
SELECT Nazvanie, Examen
FROM Lessons
RIGHT JOIN Progress ON Lessons.ID_Lesson=Progress.ID_
Lesson;
Результат выполнения запроса приведен на рис. 43.
Рис. 43. Внешнее правое соединение
12.2.3. Полное внешнее соединение FULL JOIN
При полном внешнем соединении в результирующий набор
будут выбраны все строки, как из правой, так и из левой таблицы.
При совпадении значений по соединяемым (одноименным) столб-
цам строка содержит значения как из левой, так и из правой табли-
цы. В противном случае, вместо отсутствующих значений в столб-
цы таблицы (левой или правой) заносится значение NULL.
Пример 85. Объединить таблицы Teacher и Groups, используя
полное соединение по преподавателям:
SELECT Teachers.ID_Teacher, Familia, Imja, Surname,
Groups.Kurator
FROM Teachers FULL JOIN Groups ON Teachers.ID_Teacher=Groups.Kurator;

26Оператор INSERT INTO применяется для добавления записей
в таблицу. Формат команды:
< команда добавления >::=
INSERT INTO <имя_таблицы> [ (имя_столбца [,...n] ) ]
VALUES (значение[,...n]);
где имя_таблицы представляет собой либо имя таблицы базы
данных, либо имя обновляемого представления.
Эта форма команды INSERT с параметром VALUES предна-
значена для вставки единственной строки в указанную таблицу.
Список столбцов указывает столбцы, которым будут присвое-
ны значения в добавляемых записях.
Список может быть опущен. Тогда подразумеваются все
столбцы таблицы (кроме объявленных как счетчик), причем в по-
рядке, установленном при создании таблицы.
Если в команде INSERT указывается конкретный список имен
полей, то любые пропущенные в нем столбцы должны быть объяв-
лены при создании таблицы как допускающие значение NULL, за
исключением тех случаев, когда при описании столбца использо-
вался параметр DEFAULT.
Список значений должен соответствовать списку столб-
цов следующим образом:
1) количество элементов в обоих списках должно быть одина-
ковым;
2) должно существовать прямое соответствие между позицией
одного и то же элемента в обоих списках. Поэтому I элемент списка
значений должен относиться к I столбцу в списке столбцов, II – ко
II столбцу и т.д.
3) типы данных элементов в списке значений должны быть
совместимы с типами данных соответствующих столбцов таблицы.51
Пример 23. Добавить в таблицу Teachers новую запись:
INSERT INTO Teachers (Familia, Imja, Surname, Data_Rozhd,
Adres, Stazh, ID_Kaf)
VALUES ('Гурьянов', 'Лев', 'Вячеславович ',’1952-
07-07,' ул. Комсомольская, д.24 кв. 26, 30,1);
Если столбцы таблицы Teachers указаны в полном составе и в
том порядке, в котором они перечислены при создании таблицы
Teachers, команду можно упростить.
Пример 24. Добавить в таблицу Teachers новую запись:
INSERT INTO Teachers VALUES

27Команда удаления
Команда DELETE FROM удаляет данные из таблицы:
DELETE FROM <имя_таблицы>
[WHERE <условие_отбора>];
имя_таблицы представляет собой либо имя таблицы базы
данных, либо имя обновляемого представления.
условие_отбора – здесь задается условие, в соответствии с
которым будут удаляться записи (подробнее см. подразд. 9.2).
Если предложение WHERE присутствует, удаляются записи
из таблицы, удовлетворяющие условию отбора. Если опустить
предложение WHERE, из таблицы будут удалены все записи без
предупреждения и без запроса на подтверждения, однако сама таб-
лица сохранится.
Пример 25. Удалить все предметы, на которые отводится
85 часов: DELETE
FROM Lessons
WHERE Kol_chas=68;
После выполнения этого оператора таблица Lessons будет
иметь вид, представленный на рис. 7.53
Рис. 7. Вид таблицы Lessons после удаления строк
При удалении строк с помощью DELETE эти строки сохраня-
ются в системных сегментах отката на случай восстановления. Это
может потребовать значительного времени. Поэтому лучше исполь-
зовать TRUNCATE для удаления всех данных.
8.3. Команда обновления
<оператор_изменения> ::=
UPDATE имя_таблицы SET имя_столбца= <выраже-
ние>[,...n]
[WHERE <условие_отбора>]
имя_таблицы – это либо имя таблицы базы данных, либо имя
обновляемого представления.
В предложении SET указываются имена одного и более
столбцов, данные в которых необходимо изменить.
Выражение представляет собой новое значение соответст-
вующего столбца и должно быть совместимо с ним по типу данных.
Оператор UPDATE без предложения WHERE следует ис-
пользовать с осторожностью, так как в этом случае будут затронуты
все строки таблицы.
Пример 26. Увеличить стипендию, равную 1200 рублям, на 25 %:
UPDATE Students SET Stipend = Stipend*1.25
WHERE Stipend =1200;
После выполнения этого оператора таблица Students будет
иметь вид, представленный на рис. 8.54
Рис. 8. Вид таблицы Students после выполнения оператора UPDATE
Пример 27. Для студента Иванкова С.В. установить стипен-
дию в размере 2000 рублей:
UPDATE Students SET Stipend=2000 WHERE FIO LIKE '
Иванкова С.В.;'
После выполнения этого оператора таблица Students будет
иметь вид, представленный на рис. 9.
Рис. 9. Результат выполнения запроса
Пример 28. Увеличить максимальную стипендию в 2 раза:
UPDATE Students SET Stipend = Stipend*2
WHERE Stipend = (SELECT MAX(Stipend) FROM Students);
Краткие итоги
Существуют следующие операторы модификации данных:
INSERT INTO – оператор добавления; применяется для до-
бавления записей в таблицу:
INSERT INTO <имя_таблицы> [ (имя_столбца [,...n] ) ]
VALUES (значение[,...n]);
DELETE FROM – оператор удаления; применяется для уда-
ления записей из таблицы.55
DELETE FROM <имя_таблицы> [WHERE <усло-
вие_отбора>]
При удалении строк с помощью DELETE эти строки сохра-
няются в системных сегментах отката на случай восстановления.
Это может потребовать значительного времени. Поэтому лучше ис-
пользовать TRUNCATE для удаления всех данных.
UPDATE – оператор обновления,
UPDATE имя_таблицы SET имя_столбца= <выраже-
ние>[,...n]
[WHERE <условие_отбора>]

29|| Создание базы данных
В стандарте ANSI нет команды CREATE DATABASE. Но поч-
ти все платформы СУБД поддерживают какой-либо вариант этой
команды.
Процедура создания базы данных обычно закрепляется только
за администратором базы данных.
Этапы создания БД
1) создание базы данных (файл с расширением *.mdf для ос-
новных файлов и файл с расширением *.ndf для вторичных файлов).
В файле базы данных записываются сведения об основных объектах
(таблицах, индексах, просмотрах и т.д.);
2) создание журнала транзакций, принадлежащего базе дан-
ных (файл с расширением *.ldf). Здесь записываются сведения о
процессе работы с транзакциями (контроль целостности данных, со-
стояния базы данных до и после выполнения транзакций):
<определение_базы_данных> ::=
CREATE DATABASE имя_базы_данных
[ON [PRIMARY]
[ <определение_файла> [,...n] ]
[,<определение_группы> [,...n] ] ]
[ LOG ON {<определение_файла>[,...n] } ]
имя_базы_данных – стандартный идентификатор, допусти-
мый в SQL. Если имя базы данных содержит пробелы или любые
другие недопустимые символы, оно заключается в ограничители
(двойные кавычки или квадратные скобки). Имя базы данных долж-
но быть уникальным в пределах сервера и не может превышать
128 символов.
Если в процессе использования базы данных планируется ее
размещение на нескольких дисках, то можно создать так называе-
мые вторичные файлы базы данных с расширением *.ndf. В этом
случае основная информация о базе данных располагается в пер-
вичном (PRIMARY) файле, а при нехватке для него свободного
места добавляемая информация будет размещаться во вторичном31
файле. Подход, используемый в SQL-сервере, позволяет распреде-
лять содержимое базы данных по нескольким дисковым томам.
ON – определяет список файлов на диске для размещения ин-
формации, хранящейся в базе данных.
PRIMARY – определяет первичный (основной) файл. В базе
данных такой файл может быть только один. Если он опущен, то
основным является первый файл в списке. Основной файл содержит
логическое начало базы данных.
При создании базы данных можно определить набор файлов,
из которых она будет состоять. Файл определяется с помощью сле-
дующей конструкции:
<определение_файла>::=
([ NAME=логическое_имя_файла,]
FILENAME='физическое_имя_файла'
[,SIZE=размер_файла ]
[,MAXSIZE={max_размер_файла |UNLIMITED } ]
[, FILEGROWTH=величина_прироста ] )[,...n]
NAME=логическое_имя_файла – это имя файла, под которым
он будет распознаваться при выполнении различных SQL-команд.
FILENAME='физическое_имя_файла' – это имя файла, кото-
рый будет создан на жестком диске. Это имя останется за файлом на
уровне операционной системы.
SIZE=размер_файла определяет первоначальный размер фай-
ла; минимальный размер параметра – 512 Кб; если он не указан, то
по умолчанию принимается 1 Мб.
MAXSIZE={max_размер_файла} определяет максимальный
размер файла базы данных. При значении параметра UNLIMITED
максимальный размер базы данных ограничивается свободным ме-
стом на диске.
FILEGROWTH=величина_прироста – величина автоматиче-
ского прироста размера базы данных. Приращение – это либо абсо-
лютная величина в мегабайтах либо процентное соотношение. Если
FILEGROWTH не задан, то файл за одно увеличение будет увели-
чиваться на 10 % (но не менее, чем на 64 Кб.)
Дополнительные файлы могут быть включены в группу:32
<определение_группы>::=FILEGROUP имя_группы_файлов
<определение_файла>[,...n]
LOG ON {<определение_файла>[,...n] } – здесь описываются
файл или файлы, в которых хранится журнал транзакций.
Пример 8. Создать базу данных, причем для данных опреде-
лить три файла на дисках D, E, F, для журнала транзакций – два
файла на дисках H и M:
CREATE DATABASE Institute
ON PRIMARY
(NAME=Archiv1,
FILENAME=”d:\user\data\archdat1.mdf”,
SIZE=100MB, MAXSIZE=200, FILEGROWTH=20),
(NAME=Archiv2,
FILENAME=”е:\

29Удаление базы данных
Удаление базы данных осуществляется командой
DROP DATABASE имя_базы_данных [,...n];
Удаляются все содержащиеся в базе данных объекты, а также
файлы, в которых она размещается. Для исполнения операции уда-
ления базы данных пользователь должен обладать соответствую-
щими правами.
Пример 11. Удалить базу данных Institutе
DROP DATABASE Institute;
Краткие итоги
Процедура создания базы данных обычно закрепляется только
за администратором базы данных.
Этапы создания базы данных:
1) создание базы данных;
2) создание журнала транзакций.
Создание базы данных выполняется с помощью команды
CREATE DATABASE (с параметрами).
Краткая форма оператора создания базы данных –
CREATE DATABASE имя_базы_данных;
В этом случае все значения параметров задаются по умолчанию.
Изменение базы данных выполняется с помощью команды
ALTER DATABASE имя_базы_данных;
Удаление базы данных осуществляется командой
DROP DATABASE имя_базы_данных [,...n];

30||Создание таблицы
Таблица – основной объект для хранения информации в реля-
ционной базе данных.
В SQL Server 2005 в одной базе данных может быть до 2 мил-
лиардов таблиц. В таблице – 1024 столбца, в 1 строке – 8060 байтов.
После создания общей структуры базы данных можно присту-
пить к созданию таблиц, которые представляют собой отношения,
входящие в состав проекта базы данных.
Таблицы базы данных создаются с помощью команды
CREATE TABLE. Эта команда создает пустую таблицу, т.е. табли-
цу, не имеющую строк. Значения в эту таблицу вводятся с помощью
команды INSERT. Команда CREATE TABLE определяет имя таб-
лицы и множество поименованных столбцов в указанном порядке.
Для каждого столбца должен быть определен тип и размер.
Тип данных, для которого обязательно должен быть указан
размер, – это CHAR. Реальное количество символов, которое может
находиться в поле, изменяется от нуля (если в поле содержится
NULL–значение) до заданного в CREATE TABLE максимального
значения.
Упрощенный синтаксис этой команды (табл. 16):
CREATE TABLE <имя таблицы>
( {<имя поля> <тип данных> [(<размер>)]
[<ограничения целостности поля>…]} .,..
[, <ограничения целостности таблицы>.,..] );
Описание команды CREATE TABLE
Таблица 16
Элемент Описание
<имя таблицы> [database.[owner].]table_name
<имя столбца > Имя столбца таблицы, обычный идентификатор
<тип данных> Тип данных поля
<размер> Размер поля в символах (для текста и чисел)36
Базовый синтаксис команды создания таблицы имеет следую-
щий вид:
<определение_таблицы> ::=
CREATE TABLE имя_таблицы
(
{
имя_столбца тип_данных [ NOT NULL ] [ [PRIMARY KEY |
UNIQUE]
[DEFAULT <значение>]
[IDENTITY [(стартовое_значение, инкремент)]]
[FOREIGN KEY
REFERENCES имя_род_таблицы
[ (имя_столбца_род_таблицы ) ]
[ CHECK (<условие_выбора> ) ] [,...n]
[ON UPDATE {CASCADE | NO ACTION } ]
[ON DELETE {CASCADE | NO ACTION } ]
}
);
[IDENTITY [(стартовое_значение, инкремент)] – для ко-
лонки с таким свойством сервером автоматически генерируется
возрастающая последовательность. Отсчет начинается со стартово-
го значения, которое увеличивается на величину инкремента. Если
какой-либо параметр опущен, то по умолчанию принимается еди-
ница. Сервер не гарантирует непрерывность значений – в реальных
данных в таблице могут появляться разрывы.
Далее в данном пособии будет рассматриваться база данных
Institute, имеющая структуру, приведенную на рис. 5.
База данных состоит из 6 таблиц:
Таблица Teachers содержит сведения о преподавателях;
Таблица Lessons содержит сведения о предметах;
Таблица Groups содержит сведения об учебных группах;
Таблица Students содержит сведения о преподавателях;
Таблица Kafedra содержит сведения о кафедрах;
Таблица Progress содержит сведения об успеваемости студентов.37
Рис. 5. Структура базы данных Institute
Перед созданием таблиц нужно указать базу данных, в кото-
рой будут создаваться требуемые таблицы, с помощью команды
USE имя_базы_данных;
В нашем случае это будет команда
USE Institute;

30||Изменение таблицы
Структура существующей таблицы может быть модифициро-
вана с помощью команды ALTER TABLE, упрощенный синтаксис
которой представлен ниже:
ALTER TABLE имя_таблицы
{
[ALTER COLUMN имя_столбца {новый_тип_данных [
NULL | NOT NULL ]}]
|
ADD { [имя_столбца тип_данных] | имя_столбца AS вы-
ражение } [,...n]
|
DROP {COLUMN имя_столбца}[,...n]
};
Команда позволяет добавлять и удалять столбцы, изменять их
определения.
Одно из основных правил при добавлении столбцов в сущест-
вующую таблицу гласит: если в таблице уже содержатся данные,
добавляемый столбец не может быть определен с атрибутом NOT
NULL. Этот атрибут означает, что для каждой строки данных соот-
ветствующий столбец должен содержать некоторое значение, по-
этому добавление столбца с атрибутом NOT NULL приводит к по-
явлению противоречия – уже существующие строки данных табли-
цы не будут иметь в новом столбце ненулевых значений.
Способ добавления обязательных полей в существующую
таблицу:
добавить в таблицу новый столбец, определив его с атрибу--
том NULL (т.е. столбец не обязан содержать каких-либо значений);
ввести в новый столбец какие-либо значения для каждой-
строки данных таблицы;
убедившись, что новый столбец содержит ненулевые значе--
ния для каждой строки данных, изменить структуру таблицы, заме-
нив атрибут этого столбца на NOT NULL.
Правила изменения определений столбцов:
размер столбца может быть увеличен до максимального-
значения, допускаемого соответствующим типом данных;47
размер столбца может быть уменьшен только в том случае,-
если содержащееся в нем наибольшее значение не будет превосхо-
дить его нового размера;
количество разрядов числового типа данных всегда может-
быть увеличено;
количество разрядов числового типа данных может быть-
уменьшено только в том случае, если количество разрядов наи-
большего значения в соответствующем столбце не будет превосхо-
дить нового числа разрядов, определенного для этого столбца;
количество десятичных знаков числового типа данных мо--
жет быть уменьшено или увеличено;
ип данных столбца, как правило, может быть изменен.-т
Пример 19. Добавить в таблицу Students поле Stipendiya:
ALTER TABLE Students ADD Stipendiya INT;
Некоторые реализации фактически могут ограничить разра-
ботчика в использовании некоторых опций команды ALTER
TABLE. Например, может оказаться недопустимым удаление
столбцов из существующей таблицы. Чтобы добиться этого, сначала
потребуется удалить саму таблицу и только потом заново ее по-
строить с нужными столбцами. Причем уже внесенные в таблицу
данные будут потеряны.
Возможны трудности, связанные с удалением из таблицы
столбца, который зависит от некоторого столбца другой таблицы.
В таком случае сначала придется удалить ограничение столбца, а
затем сам столбец.
Пример 20. Удаление ограничения внешнего ключа:
ALTER TABLE Students DROP CONSTRAINT to_group
ALTER TABLE Students DROP COLUMN ID_Group;
7.4. Удаление таблицы
С течением времени структура базы данных меняется: созда-
ются новые таблицы, а прежние становятся ненужными и удаляют-
ся из базы данных с помощью команды
DROP TABLE имя_таблицы [RESTRICT | CASCADE;
Пример 21. Удалить таблицу Студенты:
DROP TABLE Students;48
Команда DROP TABLE дополнительно позволяет указывать,
следует ли операцию удаления выполнять каскадно.
Если указано ключевое слово RESTRICT, то при наличии в
базе данных хотя бы одного объекта, существование которого зави-
сит от удаляемой таблицы, выполнение команды DROP TABLE бу-
дет отменено.
Если указано ключевое слово CASCADE, автоматически уда-
ляются и все прочие объекты базы данных, чье существование зави-
сит от удаляемой таблицы, а также другие объекты, зависящие от
удаляемых объектов. Общий эффект от выполнения команды DROP
TABLE с ключевым словом CASCADE может оказаться весьма

 

31Общие ограничения целостности
<ограничения целостности таблицы> – то же, что и для поля.
Общие ограничения целостности указываются через запятую
после последнего поля.46
7.3. Изменение таблицы
Структура существующей таблицы может быть модифициро-
вана с помощью команды ALTER TABLE, упрощенный синтаксис
которой представлен ниже:
ALTER TABLE имя_таблицы
{
[ALTER COLUMN имя_столбца {новый_тип_данных [
NULL | NOT NULL ]}]
|
ADD { [имя_столбца тип_данных] | имя_столбца AS вы-
ражение } [,...n]
|
DROP {COLUMN имя_столбца}[,...n]
};
Команда позволяет добавлять и удалять столбцы, изменять их
определения.
Одно из основных правил при добавлении столбцов в сущест-
вующую таблицу гласит: если в таблице уже содержатся данные,
добавляемый столбец не может быть определен с атрибутом NOT
NULL. Этот атрибут означает, что для каждой строки данных соот-
ветствующий столбец должен содержать некоторое значение, по-
этому добавление столбца с атрибутом NOT NULL приводит к по-
явлению противоречия – уже существующие строки данных табли-
цы не будут иметь в новом столбце ненулевых значений.
Способ добавления обязательных полей в существующую
таблицу:
добавить в таблицу новый столбец, определив его с атрибу--
том NULL (т.е. столбец не обязан содержать каких-либо значений);
ввести в новый столбец какие-либо значения для каждой-
строки данных таблицы;
убедившись, что новый столбец содержит ненулевые значе--
ния для каждой строки данных, изменить структуру таблицы, заме-
нив атрибут этого столбца на NOT NULL.
Правила изменения определений столбцов:
размер столбца может быть увеличен до максимального-
значения, допускаемого соответствующим типом данных;47
размер столбца может быть уменьшен только в том случае,-
если содержащееся в нем наибольшее значение не будет превосхо-
дить его нового размера;
количество разрядов числового типа данных всегда может-
быть увеличено;
количество разрядов числового типа данных может быть-
уменьшено только в том случае, если количество разрядов наи-
большего значения в соответствующем столбце не будет превосхо-
дить нового числа разрядов, определенного для этого столбца;
количество десятичных знаков числового типа данных мо--
жет быть уменьшено или увеличено;
ип данных столбца, как правило, может быть изменен.-т
Пример 19. Добавить в таблицу Students поле Stipendiya:
ALTER TABLE Students ADD Stipendiya INT;
Некоторые реализации фактически могут ограничить разра-
ботчика в использовании некоторых опций команды ALTER
TABLE. Например, может оказаться недопустимым удаление
столбцов из существующей таблицы. Чтобы добиться этого, сначала
потребуется удалить саму таблицу и только потом заново ее по-
строить с нужными столбцами. Причем уже внесенные в таблицу
данные будут потеряны.
Возможны трудности, связанные с удалением из таблицы
столбца, который зависит от некоторого столбца другой таблицы.
В таком случае сначала придется удалить ограничение столбца, а
затем сам столбец.
Пример 20. Удаление ограничения внешнего ключа:
ALTER TABLE Students DROP CONSTRAINT to_group
ALTER TABLE Students DROP COLUMN ID_Group;

№48 Хранимые процедуры

Хранимая процедура (Stored procedure) – программа, которая

выполняется внутри базы данных и может предпринимать сложные

действия на основе информации, задаваемой пользователем. По-

скольку хранимые процедуры выполняются непосредственно на

сервере базы данных, обеспечивается более высокое быстродейст-

вие, чем при выполнении тех же операций средствами клиента базы

данных.

Хранимая процедура объединяет запросы и процедурную ло-

гику (операторы присваивания, логического ветвления и т.п.) и хра-

нится в базе данных.

Одна процедура может быть использована в любом количестве

клиентских приложений, что позволяет существенно сэкономить

трудозатраты на создание прикладного программного обеспечения

и эффективно применять стратегию повторного использования ко-

да. Так же, как и любые процедуры в стандартных языках програм-

мирования, хранимые процедуры могут иметь входные и выходные

параметры или не иметь их.

Преимущества выполнения в базе данных хранимых процедур

вместо отдельных команд Transact SQL:

необходимые команды уже содержатся в базе данных;

все они прошли этап синтаксического анализа и находятся в

исполняемом формате;

хранимые процедуры поддерживают модульное программи-

рование, так как позволяют разбивать большие задачи на самостоя-

тельные, более мелкие и удобные в управлении части;

хранимые процедуры могут вызывать другие хранимые про-

цедуры и функции;

хранимые процедуры могут быть вызваны из прикладных

программ других типов;

как правило, хранимые процедуры выполняются быстрее,

чем последовательность отдельных команд;

хранимые процедуры проще использовать: они могут состо-

ять из десятков и сотен команд, но для их запуска достаточно ука-

зать всего лишь имя нужной хранимой процедуры. Это позволяет

уменьшить размер запроса, посылаемого от клиента на сервер, а

значит, и нагрузку на сеть.

 

Хранимые процедуры вызываются клиентской программой,

другой хранимой процедурой или триггером. Разработчик может

управлять правами доступа к хранимой процедуре, разрешая или

запрещая ее выполнение. Изменять код хранимой процедуры раз-

решается только ее владельцу или члену фиксированной роли базы

данных. При необходимости можно передать права владения ею от

одного пользователя к другому.

 

№39 Транзакция представляет собой группу команд, которые обрабатываются как единое

целое. Транзакция завершается либо фиксированием, т. е. выполняются все входящие в

нее команды, и БД переводится в новое устойчивое состояние, либо откатом, т. е. в

случае какого-либо сбоя для незавершенной транзакции отменяются все уже

выполненные действия и БД приводится в состояние, предшествовавшее началу

транзакции.Транзакция должна обладать следующими свойствами:

1. Атомарность. Все изменения данных, выполняемые в транзакции,

рассматриваются как единый минимальный блок.

2. Согласованность. После успешного завершения транзакции данные должны

удовлетворять всем определенным ограничениям целостности. Однако по ходу

выполнения транзакции целостность может временно нарушаться.

3. Изолированность. Операции изменения данных, производимые одной транзакцией,

не должны зависеть от изменений, вносимых другой транзакцией. Просмотр

данных в промежуточном состоянии не разрешен. Если транзакция выбирает

строки по определенному логическому условию, то другая транзакция не должна

добавлять, удалять или изменять такие строки.

4. Устойчивость или долговечность. После фиксирования транзакции система не

может быть возвращена в состояние, в котором была до начала транзакции.

Способы определения транзакций

Автоматическое определение транзакции. В этом режиме транзакций считается каждая

отдельная команда, начало и конец транзакции явно не указываются. Режим

устанавливается по умолчанию.

Явноеопределение транзакции. В этом режиме начало и конец транзакции явно

указываются с помощью специальных команд:

• BEGINTRANSACTION обозначает начало транзакции. В журнале транзакций

фиксируется факт начала транзакции и выполняются все необходимые операции.

• SAVETRANSACTION предназначена для создания точки сохранения, которая

фиксирует внутри транзакции промежуточное состояние данных, к которому

можно вернуться. Точек сохранения может быть несколько.


Дата добавления: 2015-04-22; просмотров: 8 | Нарушение авторских прав

<== 1 ==> |


lektsii.net - Лекции.Нет - 2014-2019 год. (0.105 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав