Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Введение в технологию клиент-сервер
В связи с расширением рынка информационных услуг производители программного обеспечения стали выпускать все более интеллектуальные, а значит, и объемные программные комплексы. Многие организации и отдельные пользователи часто не могли разместить приобретенные продукты на собственных ЭВМ. Для обмена информацией и ее распространения были созданы сети ЭВМ, а обобщающие программы и данные стали устанавливать на специальных файловых серверах. Благодаря работающим с файловыми серверами СУБД, множество пользователей получают доступ к одним и тем же базам данных. Упрощается разработка различных автоматизированных систем управления организациями. Однако, при таком подходе вся обработка запросов из программ или с терминалов пользовательских ЭВМ на них и выполняется, поэтому для реализации даже простого запроса необходимо считывать с файлового сервера или записывать на него целые файлы, а это ведет к конфликтным ситуациям и перегрузке сети. Для исключения указанных недостатков была предложена технология клиент-сервер, но при этом понадобился единый язык общения с сервером – выбор пал на SQL. Технология клиент-сервер означает такой способ взаимодействия программных компонентов, при котором они образуют единую систему. Как видно из самого названия, существует некий клиентский процесс, требующий определенных ресурсов, а также серверный процесс, эти ресурсы предоставляющий. Совсем необязательно, чтобы они находились на одном компьютере. Обычно принято размещать сервер на одном узле локальной сети, а клиентов – на других узлах. В контексте базы данных клиент управляет пользовательским интерфейсом и логикой приложения, действуя как рабочая станция, на которой выполняются приложения баз данных. Клиент принимает от пользователя запрос, проверяет синтаксис и генерирует запрос к базе данных на языке SQL или другом языке базы данных, соответствующем логике приложения. Затем передает сообщение серверу, ожидает поступления ответа и форматирует полученные данные для представления их пользователю. Сервер принимает и обрабатывает запросы к базе данных, после чего отправляет полученные результаты обратно клиенту. Такая обработка включает проверку полномочий клиента, обеспечение требований целостности, а также выполнение запроса и обновление данных. Помимо этого поддерживается управление параллельностью и восстановлением. Архитектура клиент-сервер обладает рядом преимуществ: - обеспечивается более широкий доступ к существующим базам данных; - повышается общая производительность системы: поскольку клиенты и сервер находятся на разных компьютерах, их процессоры способны выполнять приложения параллельно. Настройка производительности компьютера с сервером упрощается, если на нем выполняется только работа с базой данных; - снижается стоимость аппаратного обеспечения; достаточно мощный компьютер с большим устройством хранения нужен только серверу – для хранения и управления базой данных; - сокращаются коммуникационные расходы. Приложения выполняют часть операций на клиентских компьютерах и посылают через сеть только запросы к базам данных, что позволяет значительно сократить объем пересылаемых по сети данных; - повышается уровень непротиворечивости данных. Сервер может самостоятельно управлять проверкой целостности данных, поскольку лишь на нем определяются и проверяются все ограничения. При этом каждому приложению не придется выполнять собственную проверку; - архитектура клиент-сервер естественно отображается на архитектуру - открытых систем. Дальнейшее расширение двухуровневой архитектуры клиент-сервер предполагает разделение функциональной части прежнего, «толстого» (интеллектуального) клиента на две части. В трехуровневой архитектуре клиент-сервер «тонкий» (неинтеллектуальный) клиент на рабочей станции управляет только пользовательским интерфейсом, тогда как средний уровень обработки данных управляет всей остальной логикой приложения. Третий уровень — сервер базы данных. Эта трехуровневая архитектура оказалась более подходящей для некоторых сред – например, для сетей Internet и intranet, где в качестве клиента может выступать обычный Web- браузер.
Типы команд SQL
Реализация в SQL концепции операций, ориентированных на табличное представление данных, позволила создать компактный язык с небольшим набором предложений. Язык SQL может использоваться как для выполнения запросов к данным, так и для построения прикладных программ. Основные категории команд языка SQL предназначены для выполнения различных функций, включая построение объектов базы данных и манипулирование ими, начальную загрузку данных в таблицы, обновление и удаление существующей информации, выполнение запросов к базе данных, управление доступом к ней и ее общее администрирование. Основные категории команд языка SQL: - DDL – язык определения данных; - DML – язык манипулирования данными; - DQL – язык запросов; - DCL – язык управления данными; - команды администрирования данных; - команды управления транзакциями Определение структур базы данных (DDL) Язык определения данных (Data Definition Language, DDL) позволяет создавать и изменять структуру объектов базы данных, например, создавать и удалять таблицы. Основными командами языка DDL являются следующие: CREATE TABLE, ALTER TABLE, DROP TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX. Манипулирование данными (DML) Язык манипулирования данными (Data Manipulation Language DML) используется для манипулирования информацией внутри объектов реляционной базы данных посредством трех основных команд: INSERT, UPDATE, DELETE. Выборка данных (DQL) Язык запросов DQL наиболее известен пользователям реляционной базы данных, несмотря на то, что он включает одну команду: SELECT. Эта команда вместе со своими многочисленными опциями и предложениями используется для формирования запросов к реляционной базе данных. Язык управления данными (DCL) Команды управления данными позволяют управлять доступом к информации, находящейся внутри базы данных. Как правило, они используются для создания объектов, связанных с доступом к данным, а также служат для контроля над распределением привилегий между пользователями. Команды управления данными следующие: GRANT, REVOKE. Команды администрирования данных С помощью команд администрирования данных пользователь осуществляет контроль за выполняемыми действиями и анализирует операции базы данных; они также могут оказаться полезными при анализе производительности системы. Не следует путать администрирование данных с администрированием базы данных, которое представляет собой общее управление базой данных и подразумевает использование команд всех уровней. Команды управления транзакциями Существуют следующие команды, позволяющие управлять транзакциями базы данных: COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION.
Преимущества языка SQL
Язык SQL является основой многих СУБД, т.к. отвечает за физическое структурирование и запись данных на диск, а также за чтение данных с диска, позволяет принимать SQL-запросы от других компонентов СУБД и пользовательских приложений. Таким образом, SQL — мощный инструмент, который обеспечивает пользователям, программам и вычислительным системам доступ к информации, содержащейся в реляционных базах данных. Основные достоинства языка SQL заключаются в следующем: - стандартность — как уже было сказано, использование языка SQL в программах стандартизировано международными организациями; - независимость от конкретных СУБД — все распространенные СУБД используют SQL, т.к. реляционную базу данных можно перенести с одной СУБД на другую с минимальными доработками; - возможность переноса с одной вычислительной системы на другую — СУБД может быть ориентирована на различные вычислительные системы, однако приложения, созданные с помощью SQL, допускают использование как для локальных БД, так и для крупных многопользовательских систем; - реляционная основа языка — SQL является языком реляционных БД, поэтому он стал популярным тогда, когда получила широкое распространение реляционная модель представления данных. Табличная структура реляционной БД хорошо понятна, а потому язык SQL прост для изучения; - возможность создания интерактивных запросов — SQL обеспечивает пользователям немедленный доступ к данным, при этом в интерактивном режиме можно получить результат запроса за очень короткое время без написания сложной программы; - возможность программного доступа к БД — язык SQL легко использовать в приложениях, которым необходимо обращаться к базам данных. Одни и те же операторы SQL употребляются как для интерактивного, так и программного доступа, поэтому части программ, содержащие обращение к БД, можно вначале проверить в интерактивном режиме, а затем встраивать в программу; - обеспечение различного представления данных — с помощью SQL можно представить такую структуру данных, что тот или иной пользователь будет видеть различные их представления. Кроме того, данные из разных частей БД могут быть скомбинированы и представлены в виде одной простой таблицы, а значит, представления пригодны для усиления защиты БД и ее настройки под конкретные требования отдельных пользователей; - озможность динамического изменения и расширения структуры БД — язык SQL позволяет манипулировать структурой БД, тем самым обеспечивая гибкость с точки зрения приспособленности БД к изменяющимся требованиям предметной области; - поддержка архитектуры клиент-сервер — SQL одно из лучших средств для реализации приложений на платформе клиент-сервер. SQL служит связующим звеном между взаимодействующей с пользователем клиентской системой и серверной системой, управляющей БД, позволяя каждой из них сосредоточиться на выполнении своих функций. Любой язык работы с базами данных должен предоставлять пользователю следующие возможности: - создавать базы данных и таблицы с полным описанием их структуры; - выполнять основные операции манипулирования данными, в частности, вставку, модификацию и удаление данных из таблиц; - выполнять простые и сложные запросы, осуществляющие преобразование данных. Кроме того, язык работы с базами данных должен решать все указанные выше задачи при минимальных усилиях со стороны пользователя, а структура и синтаксис его команд — достаточно просты и доступны для изучения. И наконец, он должен быть универсальным, т.е. отвечать некоторому признанному стандарту, что позволит использовать один и тот же синтаксис и структуру команд при переходе от одной СУБД к другой. Язык SQL удовлетворяет практически всем этим требованиям. Язык SQL является примером языка с трансформирующейся ориентацией, или же языка, предназначенного для работы с таблицами с целью преобразования входных данных к требуемому выходному виду. Он включает только команды определения и манипулирования данными и не содержит каких-либо команд управления ходом вычислений. Подобные задачи должны решаться либо с помощью языков программирования или управления заданиями, либо интерактивно, в результате действий, выполняемых самим пользователем. По причине подобной незавершенности в плане организации вычислительного процесса язык SQL может использоваться двумя способами. Первый предусматривает интерактивную работу, заключающуюся во вводе пользователем с терминала отдельных SQL-операторов. Второй состоит во внедрении SQL-операторов в программы на процедурных языках. Язык SQL относительно прост в изучении. Поскольку это не процедурный язык, в нем необходимо указывать, какая информация должна быть получена, а не как ее можно получить. Иначе говоря, SQL не требует указания методов доступа к данным. Как и большинство современных языков, он поддерживает свободный формат записи операторов. Это означает, что при вводе отдельные элементы операторов не связаны с фиксированными позициями экрана. Язык SQL может использоваться широким кругом специалистов, включая администраторов баз данных, прикладных программистов и множество других конечных пользователей. Язык SQL – первый и пока единственный стандартный язык для работы с базами данных, который получил достаточно широкое распространение. Практически все крупнейшие разработчики СУБД в настоящее время создают свои продукты с использованием языка SQL либо с SQL-интерфейсом. В него сделаны огромные инвестиции, как со стороны разработчиков, так и со стороны пользователей. Он стал частью архитектуры приложений, является стратегическим выбором многих крупных и влиятельных организаций. Язык SQL используется в других стандартах и даже оказывает влияние на разработку иных стандартов как инструмент определения (например, стандарт Remote Data Access, RDA). Создание языка способствовало не только выработке необходимых теоретических основ, но и подготовке успешно реализованных технических решений. Это особенно справедливо в отношении оптимизации запросов, методов распределения данных и реализации средств защиты. Начали появляться специализированные реализации языка, предназначенные для новых рынков: системы управления обработкой транзакций (OnLine Transaction Processing, OLTP) и системы оперативной аналитической обработки или системы поддержки принятия решений (OnLine Analytical Processing, OLAP). Уже известны планы дальнейших расширений стандарта, включающих поддержку распределенной обработки, объектноориентированного программирования, расширений пользователей и мультимедиа.
Лекция 2 «Типы данных SQL»
План
1 Классификация типов данных 2 Строки 3 Числа 4 Логические данные 5 Дата и время 6 Интервалы
Классификация типов данных
Во всех языках программирования, а также в SQL важное место занимают поддерживаемые типы данных. Данные, которые хранятся в памяти компьютера и подвергаются обработке, можно отнести к различным типам. Понятие типа данных возникает естественным образом, когда необходимо применить к ним операции обработки. В спецификации SQL: 2003 признаны пять предопределенных общих типов, внутри которых могут быть подтипы: – строковый (символьный): а) CHARACTER (или CHAR); б) CHARACTER VARYING (или VARCHAR); в) CHARACTER LARGE OBJECT (или CLOB); – числовой: – точные числовые типы: а) integer; б) smallint; в) bigint; г) numeric; д) decimal; – приблизительные числовые типы: а) real; б) double precision; в) float; – логический (булевский) – boolean; – даты-времени: а) date; б) time without time zone*, в) time with time zone; г) timestamp without time zone; д) timestamp with time zone; – интервальный. Кроме того, существуют особые типы: row (запись), array (массив) и multiset (мультимножество).
Строки
Строковые данные (последовательности символов) имеют три главных строковых типа. Для столбца таблицы можно указать тип character (n) или char (n) (строка фиксированной длины), где n — максимальное количество символов, содержащихся в строке. Если (n) не указано, то предполагается, что строка состоит из одного символа. Если в столбец типа character (n) вводится m < n символов, то оставшиеся позиции заполняются пробелами. Тип данных CHARACTER VARYING (n) или VARCHAR (n) (строка переменной длины) применяется тогда, когда вводимые данные имеют различную длину и нежелательно дополнять их пробелами. При этом сохраняется только то количество символов, которое ввел пользователь. В данном случае указание максимального количества символов обязательно (в отличие от character). Данные типов character и character varying могут участвовать в одних и тех же строковых операциях. Тип данных CHARACTER LARGE OBJECT (CLOB – большой символьный объект) используется для представления очень больших символьных строк (например, статей, книг и т. п.). В некоторых СУБД данный тип называется memo, а в других – text. С данными этого типа можно выполнять не все операции, предусмотренные для типов CHARACTER и CHARACTER VARYING. Так, их нельзя использовать в операциях сравнения, за исключением равенства и неравенства. Кроме того, столбцы этого типа не могут быть первичными и внешними ключами, а также быть объявлены как имеющие уникальные значения. Иначе говоря, при создании таблиц с помощью оператора create и объявлении столбцов типа clob нельзя использовать ключевые слова primary key, FOREIGN KEY и UNIQUE. В следующем примере создается таблица с обычным символьным столбцом и столбцом типа clob, значения которого могут содержать 100 000 символов: CREATE TABLE myTable ( FIELD1 CHARACTER (60), FIELD2 CLOB (100000));
Числа
Числовой тип данных может быть двух видов точный и приблизительный. Точные числовые типы позволяют точно выразить значение числа. Некоторые величины имеют очень большой диапазон значений, и в таких случаях достаточно ограничиться некоторым приближенным их представлением с учетом технических возможностей компьютера (размеров регистра). К точным числовым относятся следующие пять типов: – integer – целое (без дробной части) число. Количество разрядов (точность) зависит от реализации SQL. В некоторых реализациях числа этого типа лежат в диапазоне от -2 147 483 648 до 2 147 483 647 (четырехбайтное целое число); – smallint – малое целое число. Количество разрядов зависит от реализации SQL, но не больше количества разрядов integer в этой же реализации. В некоторых реализациях числа этого типа лежат в диапазоне от -32 768 до 32 767 (двухбайтное целое число); – bigint – большое целое число. Количество разрядов зависит от реализации SQL и превышает количество разрядов числа типа integer; – numeric (x, у) – число, в котором всего х разрядов (точность), из которых у разрядов (масштаб) отводится для дробной части. Если у не указано (numeric (х)), то для дробной части отводится количество разрядов, установленное в системе по умолчанию. Если не указаны ни х, ни у (numeric), тo принимаются обе эти величины, установленные по умолчанию. Например, если указан тип numerc (6, 2), то максимальное значение числа равно 9999.99; – decimal (x, у) – десятичное число, в котором всего х разрядов, из которых у разрядов отводятся для дробной части. Если х или/и у не указаны, то принимаются значения по умолчанию. Этот тип очень похож на numeric. Отличие состоит в том, что если в decimal (х, у) указанные х и у меньше, чем допустимые реализацией SQL, то будут использоваться последние. Если х и у не указаны, то применяется система умолчаний. Например, вы задали для столбца тип decimal (6, 2). Если реализация SQL позволяет, то в этот столбец можно ввести числа, превышающие 9999.99. В отличие от decimal (х, у), тип numeric (x, у) жестко задает диапазон возможных значений числовой величины. К приблизительным числовым типам относятся следующие три типа: – real – вещественное число одинарной точности с плавающей разделительной точкой (эта точка «плавает», появляясь в различных местах числа). Например, 5.25, 5.257, 5.2573. Точность представления числа зависит от реализации SQL и оборудования. Например, 32-битовый компьютер дает большую точность, чем 16-битовый; – double precision – вещественное число двойной точности с плавающей разделительной точкой. Точность представления числа зависит от реализации SQL и оборудования. Применяется для представления научных данных (например, результатов измерений) в широком диапазоне значений, т. е. как очень малых (близких к 0), так и очень больших; – float (x) – вещественное число с плавающей разделительной точкой и минимальной точностью х, занимающее не более 8 байтов. Если компьютер может поддержать указанную точность, используя аппаратную одинарную точность, то система будет использовать арифметику одинарной точности. Если указанная точность требует арифметики с двойной точностью, то система будет использовать ее. Данный тип следует применять, если предполагается возможность переноса базы данных на другую аппаратную платформу, отличающуюся размерами регистров. Пример значения типа float: 5.318E-24 (т.е. 5.318, умноженное на 10 в степени -24). Такую же форму представления имеют и числа типа real и double precision. При создании таблиц целочисленные типы применяются для столбцов, содержащих разного рода идентификаторы, например, номера (коды) клиентов, товаров, заказов и т. п. Разумеется, если содержимое столбца должно быть целым числом (например, количество ящиков, бутылок, штук и т. п.), то тип этого столбца естественно определить как integer, smallint или bigint. Допустим, в таблице клиенты имеется столбец ID_клиента, содержащий уникальные идентификаторы клиентов. Если количество клиентов не превышает 32 000, то тип столбца можно определить как smallint. Если в вашей таблице будут храниться сведения о сотнях тысяч клиентов, то тип столбца id_клиента следует определить как integer. Если столбец в проектируемой таблице должен содержать числа с дробной частью, то для него можно задать какой-нибудь нецелочисленный тип. Если вы не уверены, что применить: точные числовые типы или приблизительные, выбирайте точные (numeric, decimal). Они требуют меньше ресурсов и дают точные результаты. Если в столбце предполагается хранить данные из очень широкого диапазона (и очень малые, и очень большие числа), то используйте приблизительные типы данных (float, real).
Логические данные
В SQL тип данных boolean (булевский) имеет три значения – true, false и unknown. Значение unknown (неизвестное) было введено для обозначения результата, получающегося при сравнении со значением null (неопределенное). Если пользователь еще не ввел в ячейку таблицы никакого значения, то эта «пустая» ячейка содержит значение null, интерпретируемое как неизвестное или неопределенное значение. Результатом любой операции сравнения true или false с null или с unknown всегда является unknown. В SQL-выражениях логические значения заключаются в кавычки, например, 'true' или 'true'
Дата и время
Тип data (дата) предназначен для хранения значений даты, элементы которых расположены в следующем порядке: год (4 цифры), дефис (-), месяц (2 цифры), дефис, день (2 цифры). Таким образом, значения даты занимают 10 позиций, например, 2005-10-02. Данные этого типа могут содержать любую дату с 0001 года по 9999 год. Для представления времени предусмотрены два типа: – time without time zone (время без часового пояса) предназначен для хранения значений времени, элементы которых расположены в следующем порядке: часы, двоеточие, минуты, двоеточие, секунды. Часы и минуты представляются двумя цифрами, а секунды могут быть представлены двумя и более цифрами (если требуется дробная часть), например 18: 35: 19.547. Длина дробной части секунд зависит от реализации, но внутреннее представление времени должно иметь не менее 6 цифр. По умолчанию время данного типа представляют без дробной части секунд. Чтобы указать, что время должно быть представлено с л цифрами после разделительной точки, достаточно использовать такой синтаксис: time without time zone (л). Например, чтобы кроме секунд указывались еще и миллисекунды, следует определить тип как time without time zone (3). Длина данных рассматриваемого типа без дробной части равна 8 символам, а с дробной частью – 9 плюс количество цифр после разделительной точки. Для задания времени без указания часового пояса с использованием установок по умолчанию можно использовать короткий синтаксис – time; – time with time zone (время с часовым поясом) – такой же тип данных, как и time without time zone. Отличие заключается лишь в том, что к значению времени добавляется еще и информация о разности между местным и всемирным временем. Всемирное время (Universal Time Coordinated, UTC) – это время по Гринвичу, т. е. время нулевого меридиана, проходящего через г. Гринвич в Великобритании (Greenwich Mean Time, GMT). Значение разности между локальным и всемирным временем находится в диапазоне от -12: 59 до 13: 00. Длина данных рассматриваемого типа равна длине данных типа time without time zone плюс 6, поскольку дополнительная информация о разности времен занимает 6 позиций (дефис, знак (+) или (-), 2 цифры для часов, двоеточие, 2 цифры для минут). Для одновременного представления даты и времени служат следующие два типа: – timestamp without time zone (дата и время без часового пояса). Элементы данных этого типа имеют такие же характеристики, как и для данных типа date и time without time zone, за исключением одного: данные типа timestamp without time zone пo умолчанию имеют 6 цифр в дробной части секунд, а не 0, как в типе time without time zone. Для указания количества цифр в дробной части используется синтаксис timestamp without time zone (л). Если дробной части нет, то данные занимают 19 позиций: 10 позиций для даты, один пробел и 8 позиций для времени. Если определена дробная часть, то длина данных равна 20 плюс количествоцифр в дробной части секунд; – timestamp with time zone (дата и время с часовым поясом) – такой же тип данных, как и timestamp with time zone. Отличие состоит в том, что к значению времени добавляется еще и информация о разности между местным и всемирным временем. Дополнительная информация занимает 6 позиций. Данные типа timestamp with time zone без дробной части занимают 25 позиций, с дробной частью – 26 плюс количество цифр в дробной части секунд. Чтобы представить в SQL-выражении дату, время или дату-время, необходимо использовать функцию cast о приведения к заданному типу. Допустим, в таблице продажи имеется столбец дата типа data. Чтобы получить сведения из этой таблицы за период после 2005-09-30, следует выполнить такой запрос: SELECT * FROM Продажи WHERE Дата > CAST ('2005-09-30' AS DATE); Здесь строка, содержащая дату, приводится к типу data, и полученный результат участвует в операции сравнения с данными столбца Дата. В языке SQL имеются три функции, которые возвращают текущие дату и время: – current_date – возвращает текущую дату (тип date). Например, 2005-06-18; – current_time (число) – возвращает текущее время (тип time). Целочисленный параметр число указывает точность представления секунд. Например, при число = 2 секунды будут представлены с точностью до сотых (две цифры в дробной части): 12: 39: 45.27; – current_timestamp (число) – возвращает дату и время (тип TIMESTAMP), Например 2005-06-18 12: 39: 45.27. Целочисленный параметр число указывает точность представления секунд.
Интервалы
Интервал представляет собой разность между двумя значениями типа дата-время. SQL поддерживает два типа интервалов: год-месяц и день-время. Интервал типа год-месяц – это количество лет и месяцев между двумя датами, а интервал день-время – количество дней, часов, минут и секунд между двумя моментами в пределах одного месяца. Нельзя смешивать вычисления, использующие интервал год-день, с вычислениями, в которых используется интервал день-время. Интервал времени можно задать двумя способами: в виде начального и конечного моментов или в виде начального момента и длительности, например: – (TIME '12: 25: 30', TIME '14: 30: 00' ) – Интервал, заданный начальным и конечным моментами; – (TIME '12: 45: 00', INTERVAL '5' HOUR) – Интервал, заданный начальным моментом и длительностью в часах. Чтобы задать значение типа интервал, используется такой синтаксис: INTERVAL 'длина' YEAR | MONTH | DAY | HOUR | MINUTE | SECOND Здесь длина – длина интервала, после которой указывается единица измерения (возможные значения указаны через вертикальную черту): – YEAR – ГОД; – month – месяц; – day – день; – hour – час; – minute – минута; – second – секунда. Например, для задания интервала длиной 15 дней следует использовать выражение interval '15' day. Лекция 3 «Проектирование таблиц базы данных»
План
1 Создание таблицы 2 Изменение таблицы 3 Удаление таблицы 4 Индексы
Создание таблицы
После создания общей структуры базы данных можно приступить к созданию таблиц, которые представляет собой отношения, входящие в состав проекта базы данных. Базовый синтаксис оператора создания таблицы имеет следующий вид:
CREATE TABLE имя_таблицы (имя_столбца тип_данных [NULL | NOT NULL ] [,...n])
Главное в команде создания таблицы – определение имени таблицы и описание набора имен полей, которые указываются в соответствующем порядке. Кроме того, этой командой оговариваются типы данных и размеры полей таблицы. Ключевое слово NULL используется для указания того, что в данном столбце могут содержаться значения NULL. Значение NULL отличается от пробела или нуля – к нему прибегают, когда необходимо указать, что данные недоступны, опущены или недопустимы. Если указано ключевое слово NOT NULL, то будут отклонены любые попытки поместить значение NULL в данный столбец. Если указан параметр NULL, помещение значений NULL в столбец разрешено. По умолчанию стандарт SQL предполагает наличие ключевого слова NULL. Мы использовали упрощенную версию оператора CREATE TABLE стандарта SQL. Его полная версия приводится при обсуждении вопросов обеспечения целостности данных.
Пример 3.1. Создать таблицу для хранения данных о товарах, поступающих в продажу в некоторой торговой фирме. Необходимо учесть такие сведения, как название и тип товара, его цена, сорт и город, где товар производится.
CREATE TABLE Товар (Название VARCHAR(50) NOT NULL, Цена MONEY NOT NULL, Тип VARCHAR(50) NOT NULL, Сорт VARCHAR(50), ГородТовара VARCHAR(50))
Пример 3.2. Создать таблицу для сохранения сведений о постоянных клиентах с указанием названий города и фирмы, фамилии, имени и отчества клиента, номера его телефона.
CREATE TABLE Клиент (Фирма VARCHAR(50) NOT NULL, Фамилия VARCHAR(50) NOT NULL, Имя VARCHAR(50) NOT NULL, Отчество VARCHAR(50) ГородКлиента VARCHAR(50) Телефон CHAR(10) NOT NULL)
Изменение таблицы
Структура существующей таблицы может быть модифицирована с помощью команды ALTER TABLE, упрощенный синтаксис которой представлен ниже: ALTER TABLE имя_таблицы {[ADD [COLUMN] имя_столбца тип_данных [ NULL | NOT NULL ]] | [DROP [COLUMN] имя_столбца]}
Команда позволяет добавлять и удалять столбцы, изменять их определения. Одно из основных правил при добавлении столбцов в существующую таблицу гласит: когда в таблице уже содержатся данные, добавляемый столбец не может быть определен с атрибутом NOT NULL. Этот атрибут означает, что для каждой строки данных соответствующий столбец должен содержать некоторое значение, поэтому добавление столбца с атрибутом NOT NULL приводит к появлению противоречия — уже существующие строки данных таблицы не будут иметь в новом столбце ненулевых значений. Тем не менее, существует способ добавления обязательных полей в существующую таблицу. Для этого необходимо: - добавить в таблицу новый столбец, определив его с атрибутом NULL (т.е. столбец не обязан содержать каких-либо значений); - ввести в новый столбец какие-либо значения для каждой строки данных таблицы; - убедившись, что новый столбец содержит ненулевые значения для каждой строки данных, изменить структуру таблицы, заменив атрибут этого столбца на NOT NULL. При изменении определений столбцов следует принимать во внимание некоторые общепринятые правила: - размер столбца может быть увеличен до максимального значения, допускаемого соответствующим типом данных; - размер столбца может быть уменьшен только в том случае, если содержащееся в нем наибольшее значение не будет превосходить его нового размера; - количество разрядов числового типа данных всегда может быть увеличено; - количество раз рядов числового типа данных может быть уменьшено только в том случае, если количество разрядов наибольшего значения в соответствующем столбце не будет превосходить нового числа разрядов, определенного для этого столбца; - количество десятичных знаков числового типа данных может быть уменьшено или увеличено; - тип данных столбца, как правило, может быть изменен. Некоторые реализации фактически могут ограничить разработчика - в использовании некоторых опций команды ALTER TABLE. Например, может оказаться недопустимым удаление столбцов из существующей таблицы. Чтобы добиться этого, сначала потребуется удалить саму таблицу и только потом заново ее построить с нужными столбцами. Причем уже внесенные в таблицу данные будут потеряны. Возможны трудности, связанные с удалением из таблицы столбца, который зависит от некоторого столбца другой таблицы. В таком случае сначала придется удалить ограничение столбца, а затем сам столбец.
Пример 3.3. Добавить в таблицу Клиент поле для номера расчетного счета.
ALTER TABLE Клиент ADD Рас_счет CHAR(2 0) Удаление таблицы
С течением времени структура базы данных меняется: создаются новые таблицы, а прежние становятся ненужными и удаляются из базы данных с помощью оператора:
DROP TABLE имя_таблицы [RESTRICT | CASCADE]
Следует отметить, что эта команда удалит не только указанную таблицу, но и все входящие в нее строки данных. Если требуется удалить из таблицы лишь данные, сохранив структуру таблицы, следует воспользоваться командой DELETE. Оператор DROP TABLE дополнительно позволяет указывать, следует ли операцию удаления выполнять каскадно. Если в операторе указано ключевое слово RESTRICT, то при наличии в базе данных хотя бы одного объекта, существование которого зависит от удаляемой таблицы, выполнение оператора DROP TABLE будет отменено. Если указано ключевое слово CASCADE, автоматически удаляются и все прочие объекты базы данных, чье существование зависит от удаляемой таблицы, а также другие объекты, зависящие от удаляемых объектов. Общий эффект от выполнения оператора DROP TABLE с ключевым словом CASCADE может оказаться весьма ощутимым, поэтому подобные операторы следует использовать с максимальной осторожностью. Чаще всего оператор DROP TABLE используется для исправления ошибок, допущенных при создании таблицы. Если таблица была создана с некорректной структурой, можно воспользоваться оператором DROP TABLE для ее удаления, после чего создать таблицу заново.
Индексы
Индексы представляют собой структуру, позволяющую выполнять ускоренный доступ к строкам таблицы на основе значений одного или более ее столбцов. Наличие индекса может существенно повысить скорость выполнения некоторых запросов и сократить время поиска необходимых данных за счет физического или логического их упорядочивания. Индекс – это набор ссылок, упорядоченных по определенному столбцу таблицы, который в данном случае будет называться индексированным столбцом. Хотя индекс и связан с конкретным столбцом (или столбцами) таблицы, все же он является самостоятельным объектом базы данных. Физически индекс всего лишь упорядоченный набор значений из индексированного столбца с указателями на места физического размещения исходных строк в структуре базы данных. Когда пользователь выполняет обращающийся к индексированному столбцу запрос, СУБД автоматически анализирует индекс для поиска требуемых значений. Однако, поскольку индексы должны обновляться системой при каждом внесении изменений в их базовую таблицу, они создают дополнительную нагрузку на систему. Индексы обычно создаются с целью удовлетворения определенных критериев поиска после того, как таблица уже находилась некоторое время в работе и увеличилась в размерах. Создание индексов не предусмотрено стандартом SQL, однако большинство диалектов поддерживают как минимум следующий оператор:
CREATE [ UNIQUE ] INDEX имя_индекса ON имя_таблицы(имя_столбца[ASC|DESC][,...n])
Популярное: |
Последнее изменение этой страницы: 2016-07-13; Просмотров: 1099; Нарушение авторского права страницы