Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТЧЁТ.docx
Скачиваний:
26
Добавлен:
22.02.2016
Размер:
2.58 Mб
Скачать

2.4 Технология клиент-сервер

Клиент-сервер (англ. Client-server) — вычислительная или сетевая архитектура, в которой задания или сетевая нагрузка распределены между поставщиками услуг (сервисов), называемыми серверами, и заказчиками услуг, называемыми клиентами. Нередко клиенты и серверы взаимодействуют через компьютерную сеть и могут быть как различными физическими устройствами, так и программным обеспечением.

Преимущества

  • Отсутствие дублирования кода программы-сервера программами-клиентами.

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

  • Все данные хранятся на сервере, который, как правило, защищён гораздо лучше большинства клиентов. На сервере проще обеспечить контроль полномочий, чтобы разрешать доступ к данным только клиентам с соответствующими правами доступа.

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

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

Недостатки

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

  • Поддержка работы данной системы требует отдельного специалиста — системного администратора.

  • Высокая стоимость оборудования.

Многоуровневая архитектура клиент-сервер

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

Сеть с выделенным сервером

Сеть с выделенным сервером (англ.Client/Server network) — этолокальная вычислительная сеть (LAN), в которой сетевые устройства централизованы и управляются одним или несколькими серверами. Индивидуальные рабочие станции или клиенты (такие, как ПК) должны обращаться к ресурсам сети через сервер(ы).

2.5 Язык запросов sql

SQL (англ. Structured Query Language — «язык структурированных запросов») — универсальный компьютерный язык, применяемый для создания, модификации и управления данными в реляционных базах данных.

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

Изначально, SQL был основным способом работы пользователя с базой данныхи позволял выполнять следующий набор операций:

  • создание в базе данных новой таблицы;

  • добавление в таблицу новых записей;

  • изменение записей;

  • удаление записей;

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

  • изменение структур таблиц.

Со временем, SQL усложнился — обогатился новыми конструкциями, обеспечил возможность описания и управления новыми хранимыми объектами (например, индексы, представления, триггеры и хранимые процедуры) — и стал приобретать черты, свойственные языкам программирования.

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

Каждое предложение SQL — это либо запрос данных из базы, либо обращение к базе данных, которое приводит к изменению данных в базе. В соответствии с тем, какие изменения происходят в базе данных, различают следующие типы запросов:

  • запросы на создание или изменение в базе данных новых или существующих объектов (при этом в запросе описывается тип и структура создаваемого или изменяемого объекта);

  • запросы на получение данных;

  • запросы на добавление новых данных (записей)

  • запросы на удаление данных;

  • обращения к СУБД.

Основным объектом хранения реляционной базы данных является таблица, поэтому все SQL-запросы — это операции над таблицами. В соответствии с этим, запросы делятся на

  • запросы, оперирующие самими таблицами (создание и изменение таблиц);

  • запросы, оперирующие с отдельными записями (или строками таблиц) или наборами записей.

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

  • типа хранимых в каждом поле значений;

  • связей между таблицами (задание первичных и вторичных ключей);

  • информации, необходимой для построения индексов.

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

  • вставка новой строки;

  • изменение значений полей строки или набора строк;

  • удаление строки или набора строк.

Самый главный вид запроса — это запрос, возвращающий (пользователю) некоторый набор строк, с которым можно осуществить одну из трёх операций:

  • просмотреть полученный набор;

  • изменить все записи набора;

  • удалить все записи набора.

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

Язык SQL представляет собой совокупность

  • операторов;

  • инструкций;

  • и вычисляемых функций.

Согласно общепринятому стилю программирования, операторы (и другие зарезервированные слова) в SQL всегда следует писатьпрописными буквами

Операторы SQL делятся на:

операторы определения данных (Data Definition Language, DDL)

  • CREATE создает объект БД (саму базу, таблицу, представление, пользователя и т. д.)

CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition

  • ALTERизменяет объект

ALTER TABLE table_name ADD column_name datatype

  • DROPудаляет объект

DROP TABLE table_name

операторы манипуляции данными (Data Manipulation Language, DML)

  • SELECTсчитывает данные, удовлетворяющие заданным условиям

SELECT column_name(s) FROM table_name

  • INSERTдобавляет новые данные

INSERT INTO table_name VALUES (value1, value2, value3,...)

  • UPDATEизменяет существующие данные

UPDATE table_name SET column1=value, column2=value2,... WHERE some_column=some_value

  • DELETEудаляет данные

DELETE FROM table_name WHERE some_column=some_value

операторы определения доступа к данным (Data Control Language, DCL)

  • GRANTпредоставляет пользователю (группе) разрешения на определенные операции с объектом

GRANT{

{ALL [PRIVILEGES] | SELECT | DELETE | INSERT

| UPDATE [(col [, col ...])]}

ON [TABLE] {tablename | viewname}

TO {<object> | <userlist>}

| EXECUTE ON PROCEDURE procname

TO {<object> | <userlist>}

};

<object> = PROCEDURE procname | TRIGGER trigname | VIEW viewname

| [USER] username | PUBLIC [, <object>]

<userlist> = [USER] username [, [USER] username ...]

[WITH GRANT OPTION]

  • REVOKEотзывает ранее выданные разрешения

REVOKE [GRANT OPTION FOR]{

{ALL [PRIVILEGES] | SELECT | DELETE | INSERT

| UPDATE [(col [, col ...])]}

ON [TABLE] {tablename | viewname}

FROM {<object> | <userlist>}

| EXECUTE ON PROCEDURE procname

FROM {<object> | <userlist>}

};

<object> = PROCEDURE procname | TRIGGER trigname | VIEW viewname

| [USER] username | PUBLIC [, <object>]

<userlist> = [USER] username [, [USER] username ...]

  • DENYзадает запрет, имеющий приоритет над разрешением

DENY { ALL [ PRIVILEGES ] }

| permission [ ( column [ ,...n ] ) ] [ ,...n ]

[ ON [ class :: ] securable ] TO principal [ ,...n ]

[ CASCADE] [ AS principal ]

операторы управления транзакциями (Transaction Control Language, TCL)

  • COMMITприменяет транзакцию.

COMMIT { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] ]

[ ; ]

  • ROLLBACKоткатывает все изменения, сделанные в контексте текущей

транзакции.

ROLLBACK { TRAN | TRANSACTION }

     [ transaction_name | @tran_name_variable

     | savepoint_name | @savepoint_variable ]

[ ; ]

  • SAVEPOINTделит транзакцию на более мелкие участки.

SAVE { TRAN | TRANSACTION } { savepoint_name | @savepoint_variable }

[ ; ]

Преимущества

  • Независимость от конкретной СУБД

Несмотря на наличие диалектов и различий в синтаксисе, в большинстве своём тексты SQL-запросов, содержащие DDL и DML, могут быть достаточно легко перенесены из одной СУБД в другую. Существуют системы, разработчики которых изначально ориентировались на применение по меньшей мере нескольких СУБД (например: система электронного документооборотаDocumentumможет работать как сOracle, так и сMicrosoft SQL ServerиIBM DB2). Естественно, что при применении некоторых специфичных для реализации возможностей такой переносимости добиться уже очень трудно.

  • Наличие стандартов

Наличие стандартов и набора тестов для выявления совместимости и соответствия конкретной реализации SQL общепринятому стандарту только способствует «стабилизации» языка. Правда, стоит обратить внимание, что сам по себе стандарт местами чересчур формализован и раздут в размерах (например, Core-часть стандарта SQL:2003 представляет собой более 1300 страниц текста).

  • Декларативность

С помощью SQL программист описывает только то, какие данные нужно извлечь или модифицировать. То, каким образом это сделать, решает СУБД непосредственно при обработке SQL-запроса. Однако не стоит думать, что это полностью универсальный принцип — программист описывает набор данных для выборки или модификации, однако ему при этом полезно представлять, как СУБД будет разбирать текст его запроса. Чем сложнее сконструирован запрос, тем больше он допускает вариантов написания, различных по скорости выполнения, но одинаковых по итоговому набору данных.

Недостатки

  • Несоответствие реляционной модели данных

Создатели реляционной модели данных Эдгар Кодд,Кристофер Дейти их сторонники указывают на то, что SQL не является истинно реляционным языком. В частности, они указывают на следующие проблемы SQL:

  • Повторяющиеся строки

  • Неопределённые значения (nulls)

  • Явное указание порядка колонок слева направо

  • Колонки без имени и дублирующиеся имена колонок

  • Отсутствие поддержки свойства «=»

  • Использование указателей

  • Высокая избыточность

В опубликованном Кристофером Дейтом и Хью ДарвеномТретьем Манифестеони излагают принципы СУБД следующего поколения и предлагают языкTutorial D, который является подлинно реляционным.

  • Сложность

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

  • Отступления от стандартов

Несмотря на наличие международного стандарта ANSI SQL-92, многие компании, занимающиеся разработкой СУБД (например, Oracle,Sybase,Microsoft,MySQL AB), вносят изменения в язык SQL, применяемый в разрабатываемой СУБД, тем самым отступая от стандарта. Таким образом, появляются специфичные для каждой конкретной СУБД диалекты языка SQL.

  • Сложность работы с иерархическими структурами

Ранее диалекты SQL большинства СУБД не предлагали способа манипуляции древовидными структурами. Некоторые поставщики СУБД предлагали свои решения (например, Oracle использует выражение CONNECT BY). В настоящее время в ANSI стандартизована рекурсивная конструкцияWITHиз диалекта SQLDB2. ВMS SQL Serverрекурсивные запросы появились лишь в версии MS SQL Server 2005.