ЗНАЕТЕ ЛИ ВЫ?

Анализ критериев для нормализованных и ненормализованных моделей данных



Сравнение нормализованных и ненормализованных моделей

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

Критерий Отношения слабо нормализованы (1НФ, 2НФ) Отношения сильно нормализованы (3НФ)
Адекватность базы данных предметной области ХУЖЕ (-) ЛУЧШЕ (+)
Легкость разработки и сопровождения базы данных СЛОЖНЕЕ (-) ЛЕГЧЕ (+)
Скорость выполнения вставки, обновления, удаления МЕДЛЕННЕЕ (-) БЫСТРЕЕ (+)
Скорость выполнения выборки данных БЫСТРЕЕ (+) МЕДЛЕННЕЕ (-)

Как видно из таблицы, более сильно нормализованные отношения оказываются лучше спроектированы (три плюса, один минус). Они больше соответствуют предметной области, легче в разработке, для них быстрее выполняются операции модификации базы данных. Правда, это достигается ценой некоторого замедления выполнения операций выборки данных.

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

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

 


Структурированный язык запросов SQL. Общая характеристика. Методы использования.

Структурированный язык запросов SQL

Структурированный язык запросов SQL основан на реляционном исчислении с переменными кортежами. Язык имеет несколько стандартов, наиболее распространенными из которых являются SQL-89 и SQL-92.

Общая характеристика языка

Язык SQL предназначен для выполнения операций над таблицами (создание, удаление, изменение структуры) и над данными таблиц (выборка, изменение, добавление и удаление), а также некоторых сопутствующих операций. SQL является непроцедурным языком и не содержит операторов управления, организации подпрограмм, ввода- вывода и т.п. В связи с этим SQL автономно не используется, обычно он погружен в среду встроенного языка программирования СУБД (например, FoxPro СУБД Visual FoxPro, ObjectPAL СУБД Paradox, Visual Basic for Applications СУБД Access).

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

Язык SQL не обладает функциями полноценного языка разработки, а ориентирован на доступ к данным, поэтому его включают в состав средств разработки программ. В этом случае его называют встроенным SQL.

Стандарт языка SQL поддерживают современные реализации следующих языков программирования: PL/1, Ada, С, COBOL, Fortran, MUMPS и Pascal.

В специализированных системах разработки приложений типа клиент-сервер среда программирования, кроме того, обычно дополнена коммуникационными средствами (установление и разъединение соединений с серверами БД, обнаружение и обработка возникающих в сети ошибок и т.д.), средствами разработки пользовательских интерфейсов, средствами проектирования и отладки.

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

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

вызовов с помощью переменных языка программирования. При динамическом использовании языка (динамический SQL) предполагается динамическое построение вызовов SQL-функций и

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

Основным назначением языка SQL (как и других языков для работы с базами данных) является подготовка и выполнение запросов.


Состав языка SQL.

Язык SQL

SQL (обычно произносимый как "СИКВЭЛ" или "ЭСКЮЭЛЬ") символизирует собой Структурированный Язык Запросов. Это - язык, который дает Вам возможность создавать и работать в реляционных базах данных, являющихся наборами связанной информации, сохраняемой в таблицах.

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

Стандарт SQL определяется ANSI (Американским Национальным Институтом Стандартов) и в данное время также принимается ISO (Международной Организацией по Стандартизации). Однако, большинство коммерческих программ баз данных расширяют SQL без уведомления ANSI, добавляя различные особенности в этот язык, которые, как они считают, будут весьма полезны. Иногда они несколько нарушают стандарт языка, хотя хорошие идеи имеют тенденцию развиваться и вскоре становиться стандартами "рынка" сами по себе в силу полезности своих качеств.

Состав языка SQL

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

Поэтому, в язык SQL в качестве составных частей входят:

  • язык манипулирования данными (Data Manipulation Language, DML)
  • язык определения данных (Data Definition Language, DDL)
  • язык управления данными (Data Control Language, DCL).

Подчеркнем, что это не отдельные языки, а различные команды одного языка. Такое деление проведено только лишь с точки зрения различного функционального назначения этих команд.

Язык манипулирования данными используется, как это следует из его названия, для манипулирования данными в таблицах баз данных. Он состоит из 4 основных команд:

SELECT (выбрать)
INSERT (вставить)
UPDATE (обновить)
DELETE (удалить)

Язык определения данных используется для создания и изменения структуры базы данных и ее составных частей - таблиц, индексов, представлений (виртуальных таблиц), а также триггеров и сохраненных процедур. Основными его командами являются:

CREATE DATABASE (создать базу данных)
CREATE TABLE (создать таблицу)
CREATE VIEW (создать виртуальную таблицу)
CREATE INDEX (создать индекс)
CREATE TRIGGER (создать триггер)
CREATE PROCEDURE (создать сохраненную процедуру)
ALTER DATABASE (модифицировать базу данных)
ALTER TABLE (модифицировать таблицу)
ALTER VIEW (модифицировать виртуальную таблицу)
ALTER INDEX (модифицировать индекс)
ALTER TRIGGER (модифицировать триггер)
ALTER PROCEDURE (модифицировать сохраненную процедуру)
DROP DATABASE (удалить базу данных)
DROP TABLE (удалить таблицу)
DROP VIEW (удалить виртуальную таблицу)
DROP INDEX (удалить индекс)
DROP TRIGGER (удалить триггер)
DROP PROCEDURE (удалить сохраненную процедуру)

Язык управления данными используется для управления правами доступа к данным и выполнением процедур в многопользовательской среде. Более точно его можно назвать "язык управления доступом". Он состоит из двух основных команд:

GRANT (дать права)
REVOKE (забрать права)

С точки зрения прикладного интерфейса существуют две разновидности команд SQL:

  • интерактивный SQL
  • встроенный SQL.

Интерактивный SQL используется в специальных утилитах (типа WISQL или DBD), позволяющих в интерактивном режиме вводить запросы с использованием команд SQL, посылать их для выполнения на сервер и получать результаты в предназначенном для этого окне. Встроенный SQL используется в прикладных программах, позволяя им посылать запросы к серверу и обрабатывать полученные результаты, в том числе комбинируя set-ориентированный и record-ориентированный подходы.

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

Помимо предложения CONSTRAINT в SQL-инструкциях используются следующие предложения:

FROM... указывает таблицы или запросы, которые содержат поля, перечисленные в инструкции SELECT;

WHERE... — определяет, какие записи из таблиц, пе­речисленных в предложении FROM, следует включить в резуль­тат выполнения инструкции SELECT, UPDAТЕ или DELETE;

GROUP BY... — объединяет записи с одинаковыми зна­чениями в указанном списке полей в одну запись;

НАVING... — определяет, какие сгруппированные за­писи отображаются при использовании инструкции SELECTспредложением GROUPBY;

IN... — определяет таблицы в любой внешней базе данных, с которой ядро СУБД может установить связь;

ORDER BY... — сортирует записи, полученные в резуль­тате запроса, в порядке возрастания или убывания на основе значений указанного поля или полей.

В качестве источника данных по предложению FROM, помимо таблиц и запросов, могут использоваться также результаты операций соединения таблиц в трех разновидностях—INNER JOIN... ON..., LEFT JOIN. ..ON... и RIGHT JOIN...ON... (внутреннее соединение, левое и правое внешнее соединение, соответственно*).

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

ALL... — отбирает все записи, соответству­ющие условиям, заданным в инст­рукции SQL, используется по умол­чанию;

DISTINCT... — исключает записи, которые содер­жат повторяющиеся значения в выбранных полях;

DISTINCTROW... — опускает данные, основанные на целиком повторяющихся записях, а не на отдельных повторяющихся полях;

ТОРп... возвращает п записей, находящих­ся в начале или в конце диапазона, описанного с помощью предложе­ния ORDER BY;

 

AVG(выражение) — вычисляет среднее арифметическое на­бора чисел;

Min(выражение) — вычисляет минимальное значение из на­бора значений;

Мах(выражение) — вычисляет максимальное значение из набора значений;

StDev(выражение) — вычисляет среднеквадратичное от­клонение набора значений;

Count(выражение) — вычисляет количество записей, содер­жащихся в наборе;

Var(выражение) — вычисляет дисперсию по набору значе­ний.

 

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

Язык SQL

Язык SQL (эта аббревиатура должна произноситься как "сикуель", однако все чаще говорят "эс-ку-эль") в настоящее время является промышленным стандартом, который в большей или меньшей степени поддерживает любая СУБД, претендующая на звание "реляционной". В то же время SQL подвергается суровой критике как раз за недостаточное соответствие реляционным принципам.

Из истории SQL:

В начале 70-х годов в компании IBM была разработана экспериментальная СУБД System R на основе языка SЕQUЕL (Structured Еnglish Qeury Language - структурированный английский язык запросов), который можно считать непосредственным предшественником SQL. Целью разработки было создание простого непроцедурного языка, которым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. В 1981 году IBM объявила о своем первом, основанном на SQL программном продукте, SQL/DS. Чуть позже к ней присоединились Oracle и другие производители. Первый стандарт языка SQL был принят Американским национальным институтом стандартизации (АNSI) в 1987 (так называемый SQL level /уровень/ 1) и несколько уточнен в 1989 году (SQL level 2). Дальнейшее развитие языка поставщиками СУБД потребовало принятия в 1992 нового расширенного стандарта (АNSI SQL-92 или просто SQL-2). В настоящее время ведется работа по подготовке третьего стандарта SQL, который должен включать элементы объекто-ориентрованного доступа к данным.

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

В язык SQL в качестве составных частей входят:

· язык манипулирования данными (Data Manipulation Language, DML)

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

· язык управления данными (Data Control Language, DCL).

В SQL определены два подмножества языка:

· SQL-DDL (Data Definition Language) - язык определения структур и ограничений целостности баз данных. Сюда относятся команды создания и удаления баз данных; создания, изменения и удаления таблиц; управления пользователями и т.д.

· SQL-DML (Data Manipulation Language) - язык манипулирования данными: добавление, изменение, удаление и извлечение данных, управления транзакциями

Типы данных SQL.

· Символьные типы данных - содержат буквы, цифры и специальные символы.

o СHАR или СHАR(n) -символьные строки фиксированной длины. Длина строки определяется параметром n. СHАR без параметра соответствует СHАR(1). Для хранения таких данных всегда отводится n байт вне зависимости от реальной длины строки.

o VАRСHАR(n) - символьная строка переменной длины. Для хранения данных этого типа отводится число байт, соответствующее реальной длине строки.

· Целые типы данных - поддерживают только целые числа (дробные части и десятичные точки не допускаются). Над этими типами разрешается выполнять арифметические операции и применять к ним агрегирующие функции (определение максимального, минимального, среднего и суммарного значения столбца реляционной таблицы).

o INTЕGЕR или INT- целое, для хранения которого отводится, как правило, 4 байта. (Замечание: число байт, отводимое для хранения того или иного числового типа данных зависит от используемой СУБД и аппаратной платформы, здесь приводятся наиболее "типичные" значения) Интервал значений от - 2147483647 до + 2147483648

o SMАLLINT - короткое целое (2 байта), интервал значений от - 32767 до +32768

· Вещественные типы данных - описывают числа с дробной частью.

o FLOАT и SMАLLFLOАT - числа с плавающей точкой (для хранения отводится обычно 8 и 4 байта соответственно).

o DЕСIMАL(p) - тип данных аналогичный FLOАT с числом значащих цифр p.

o DЕСIMАL(p,n) - аналогично предыдущему, p - общее количество десятичных цифр, n - количество цифр после десятичной запятой.

· Денежные типы данных - описывают, естественно, денежные величины. Если ваша система такого типа данных не поддерживает, то используйте DЕСIMАL(p,n).

o MONЕY(p,n) - все аналогично типу DЕСIMАL(p,n). Вводится только потому, что некоторые СУБД предусматривают для него специальные методы форматирования.

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

o DАTЕ - тип данных для хранения даты.

o TIMЕ - тип данных для хранения времени.

o INTЕRVАL - тип данных для хранения временного интервала.

o DАTЕTIMЕ - тип данных для хранения моментов времени (год + месяц + день + часы + минуты + секунды + доли секунд).

· Двоичные типы данных - позволяют хранить данные любого объема в двоичном коде (оцифрованные изображения, исполняемые файлы и т.д.). Определения этих типов наиболее сильно различаются от системы к системе, часто используются ключевые слова:

o BINАRY

o BYTЕ

o BLOB

· Последовательные типы данных - используются для представления возрастающих числовых последовательностей.

o SЕRIАL - тип данных на основе INTЕGЕR, позволяющий сформировать уникальное значение (например, для первичного ключа). При добавлении записи СУБД автоматически присваивает полю данного типа значение, получаемое из возрастающей последовательности целых чисел.

В заключение следует сказать, что для всех типов данных имеется общее значение NULL - "не определено". Это значение имеет каждый элемент столбца до тех пор, пока в него не будут введены данные. При создании таблицы можно явно указать СУБД могут ли элементы того или иного столбца иметь значения NULL (это не допустимо, например, для столбца, являющего первичным ключом).


29. Язык определения данных (DDL).





Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.238.190.82 (0.015 с.)