Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
146
Добавлен:
11.04.2015
Размер:
380.93 Кб
Скачать

Физическое проектирование реляционной бд

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

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

Теперь, приступая к физическому проектированию БД, необходимо, прежде всего, выбрать конкретную целевую СУБД (targetDBMS). Здесь важно понимать, что многие этапы физического проектирования БД в значительной степени зависят от выбранной целевой СУБД. Следовательно, может существовать несколько различных способов реализации одной и той же схемы БД. Поэтому разработчик физической БД должен разбираться в функциональных возможностях существующих СУБД, понимать достоинства и недостатки каждого возможного варианта реализации. Разработчик физической БД должен уметь выбрать наилучшую стратегию хранения данных с учетом всех существующих особенностей их использования.

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

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

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

В настоящее время превосходным источником информации для выбора потенциальных кандидатов на роль целевой СУБД является Интернет. Например, исчерпывающий список программных продуктов, относящихся к классу СУБД, можно найти на Web-сайте специализированного журнала по адресу www.intelligententerprise.com. Ценная информация о характеристиках различных СУБД содержится также на Web-сайтах их производителей.

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

Кроме того, для сравнения разных СУБД можно воспользоваться имеющимися результатами тестирования их производительности. В частности, отчеты по оценке характеристик СУБД публикуются независимой организацией TransactionProcessingCouncilна сайтеwww.tpc.org.

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

п/п

Характеристики СУБД

Вес

Рейтинг

ВесРейтинг

СУБД1

СУБД2

СУБД1

СУБД2

1

Простота реорганизации

0,15

8

6

1,2

0,9

2

Средства индексирования

0,2

6

5

1,2

1,0

3

Сжатие данных

0,05

4

9

0,2

0,45

4

Возможности шифрования

0,15

6

5

0,9

0,75

5

Наличие CASE-средств

0,15

6

5

0,9

0,75

6

Стоимость

0,25

7

6

1,75

1,5

7

Масштабируемость

0,05

4

9

0,2

0,45

Итого

1

41

45

6,35

5,8

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

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

Создание таблиц БД с помощью языка SQL.Язык SQL включает в себя набор различных операторов (инструкций, команд), при выполнении которых СУБД производит определенные действия: создает новые таблицы в составе БД или изменяет их структуру, добавляет новые данные в существующие таблицы, осуществляет выборку данных и т.п.

Каждая инструкция SQLначинается со стандартных ключевых слов, которые описывают характер выполняемых действий: CREATE (создать), INSERT (добавить), SELECT (выбрать), DELETE (удалить) и т.п. Затем указывается одно или несколькопредложений, которые конкретизируют требуемые действия. Эти предложения могут содержать имена таблиц и их столбцов, константы, выражения и дополнительные ключевые слова.

В дальнейшем для описания формата операторов языка SQL применяются следующие обозначения расширенной формы BNF (BackusNaurForm— форма Бэкуса–Наура):

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

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

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

  • фигурные скобки определяют обязательный элемент;

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

  • многоточие (…) используется для указания необязательной возможности повторения конструкции от нуля до нескольких раз.

Описание типов данных.Современные СУБД позволяют обрабатывать данные разнообразных типов, среди которых основными являются следующие:

  • INT, SMALLINT — целые числа;

  • NUMERIC,DECIMAL— числа с фиксированной точкой;

  • REAL,FLOAT— числа с плавающей точкой;

  • CHAR, VARCHAR — строки символов постоянной и переменной длины;

  • MONEY, SMALLMONEY — денежные величины;

  • DATETIME, SMALLDATETIME — дата и время;

  • BIT — логические величины.

Создание таблиц БД.В простейшем виде команда CREATE TABLE имеет следующий синтаксис:

CREATE TABLE table_name ({column_def  table_constraint} [, …])

Определение отдельной колонки, обозначенное как column_def, имеет следующий формат:

{column_name data_type} [DEFAULT constant_expression] [column_constraint} [, …]

Прежде всего, следует определить имя колонки (column_name), а также тип хранимых в ней данных (data_type). Ключевое словоDEFAULTопределяет значение по умолчанию (constant_expression), которое будет использовано, если при вводе записи явно не указано другое значение.

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

1. Обязательные данные.Для некоторых столбцов требуется наличие в каждой строке таблицы конкретного и допустимого значения. Чтобы задать ограничение подобного типа, предусмотрено использование спецификатора NOT NULL. Если для некоторого столбца задан такой спецификатор, то система будет препятствовать появлению в этом столбце пустых значений (NULL). В соответствии со стандартом ISO спецификатор NULL должен применяться по умолчанию.

Например, каждый сотрудник обязательно занимает ту или иную должность. Следовательно, столбец Positionв таблицеStaffдолжен определяться следующим образом:

Position VARCHAR(10) NOT NULL

2. Первичный ключ.Для определения простого первичного ключа используется спецификатор PRIMARYKEY, который приписывается соответствующему столбцу. При этом для столбца гарантируется уникальность значений, а также становятся запрещенными неопределенные значения (NULL). В таблице можно определить только один первичный ключ.

3. Уникальность значений столбца.Если в дополнение к первичному ключу необходимо иметь альтернативные ключи, то следует применять спецификатор UNIQUE. Например, в таблицеSubject(Дисциплина) первичный ключ строится по целочисленному кодуSubjectID, что сокращает время поиска. Однако и название дисциплины (символьное полеSubName) должно быть уникальным, что обеспечивается с помощью спецификатора UNIQUE:

CREATE TABLE Subject (SubjectID INTEGER PRIMARY KEY,

SubName VARCHAR(20) NOT NULL UNIQUE);

4. Проверочные ограничения.С помощью спецификатораCHECK(logical_expression) можно задать диапазон возможных значений для некоторого столбца. Это ограничение, которое основано на проверке логического выраженияlogical_expression, позволяет объединить несколько условий контроля при вводе данных.

Например, правильность ввода значений для столбца Семестр в некоторой таблице можно обеспечить следующим образом:

Семестр INTEGER NOT NULL CHECK((Семестр >= 1) OR (Семестр <= 10))

5. Внешний ключ.Конструкция [FOREIGNKEY]REFERENCESref_table[(ref_column)] определяет внешний ключ, который предусматривается в дочерней (зависимой) таблице для связи с родительской (главной) таблицейref_table. Параметрref_columnне является обязательным, т.к. в родительской таблице ссылка осуществляется на первичный ключ. При ссылке на альтернативный ключ (столбец с атрибутомUNIQUE) этот параметр требуется указать в явном виде.

Ограничения для значений в колонках таблицы могут устанавливаться и другим способом — через определение ограничений table_constraintна уровне таблицы. Такой вариант обычно применяется в случае составных ключей. При этом используются те же самые ключевые слова, однако синтаксис немного изменяется:

{PRIMARY KEYUNIQUE} {(column [, …])}

FOREIGN KEY (column [, …]) REFERENCES ref_table [(ref_column [, …])]

Например, для создания таблицы Subjectможно использовать следующую команду:

CREATE TABLE Subject (SubjectID INTEGER,

SubName VARCHAR(20) NOT NULL,

PRIMARY KEY (SubjectID), UNIQUE (SubName));

Манипулирование данными с помощью языка SQL.Основным инструментом выборки данных в языке SQL является команда SELECT. Эта команда позволяет получить доступ к данным, которые представлены как совокупность таблиц произвольной сложности.

В упрощенном варианте команда SELECT имеет следующий синтаксис:

SELECT <Список_выбора>

[INTO<Новая_таблица>]

FROM<Набор_источников_данных>

[WHERE<Условие_отбора>]

[GROUPBY<Ключи_группировки>]

[ORDERBY<Ключи_сортировки> [ASCDESC]]

Конструкция рассматриваемой команды включает в себя отдельные разделы, каждый из которых имеет свое назначение. При этом обязательными являются только два раздела — SELECT и FROM.

Рассмотрим наиболее распространенные варианты применения оператора SELECT.

  1. Чтобы целиком отобразить содержимое некоторой таблицы, достаточно ввести следующий оператор:

SELECT * FROM <имя_исх_табл>

Здесь символ * означает «все столбцы».

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

SELECT<список_столбцов>

FROM <имя_исх_табл>

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

  1. Чтобы отобрать только те строки (записи), которые удовлетворяют определенному условию, необходимо добавить конструкцию WHERE:

SELECT <список_столбцов>

FROM <имя_исх_табл>

WHERE <условие_отбора>

При построении условия отбора могут использоваться простые операции сравнения (=, <>, <, >, <=, >=). Более сложные выражения строятся с помощью логических операций AND,ORилиNOT. Кроме того, можно указать шаблон поиска (LIKE), а также проверить попадание в диапазон (BETWEEN) или принадлежность к множеству (IN).

  1. Чтобы требуемым образом отсортировать результаты запроса, в оператор SELECTпомещается конструкцияORDERBY:

SELECT<список_столбцов>

FROM <имя_исх_табл>

ORDER BY<ключи_сортировки>

Каждый ключ сортировки обязательно включает в себя название столбца, а также указатель порядка сортировки: DESC(по убыванию) илиASC(по возрастанию). По умолчанию действует режимASC.

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

  • количество значений — функция COUNT();

  • сумма значений — функция SUM();

  • усредненное значение — функция AVG();

  • минимальное или максимальное значение — функция MIN() или MAX().

Особым случаем является вариант COUNT(*), когда происходит подсчет общего числа записей. Например, оператор

SELECT COUNT(*)

FROM <имя_исх_табл>

WHERE <условие_отбора>

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

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

SELECT COUNT(DISTINCT имя_столбца)

FROM<имя_исх_табл>

[WHERE <условие_отбора>]

  1. Рассмотренные примеры иллюстрируют получение общих итогов для некоторого отчета. Вместе с тем, очень часто в отчетах требуется формировать и промежуточные итоги. Для этой цели необходимо построить группирующий запрос, т.е. в разделе GROUP BY перечислить столбцы таблицы или указать выражения, по которым должна происходить группировка отобранных записей. В результате по каждой группе создается единственная строка с промежуточными итогами. Содержание этой строки описывается в разделе SELECT как <список_выбора>. При этом необходимо учитывать следующее требование: каждый элемент списка должен иметь единственное значение для отдельной группы.

Пусть, например, в БД имеется таблица ПРЕПОДАВАТЕЛИ(Код_Преп, ФИО, Должность, Зарплата, Код_Каф). Чтобы определить количество преподавателей, работающих на каждой кафедре, а также их суммарную зарплату, необходимо выполнить следующий запрос:

SELECTКод_каф,COUNT(Код_Преп), SUM(Зарплата)

FROMПРЕПОДАВАТЕЛИ

GROUP BY Код_каф

  1. Раздел WHERE оператора SELECTможет содержатьвложенный запрос(илиподзапрос). Результат выполнения этого внутреннего запроса используется для получения окончательного результата.

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

SELECTФИО, Должность

FROMПРЕПОДАВАТЕЛИ

WHERE Зарплата > (SELECTAVG(Зарплата)FROMПРЕПОДАВАТЕЛИ)

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

Пусть, например, требуется сформировать список преподавателей университета с указанием названия кафедры, на которой работает преподаватель, и телефона этой кафедры. Выполняем следующий запрос:

SELECTФИО, Название, Телефон

FROMПРЕПОДАВАТЕЛИ a, КАФЕДРЫ b

WHERE a.Код_каф =b.Код_каф

  1. При связывании таблиц конструкция в разделе FROMможет выглядеть так:

<left_table> <join_type> <right_table> ON <search_condition>

В этой конструкции элемент <join_type> может принимать следующие значения:

  • [INNER]JOIN— внутреннее соединение (применяется по умолчанию). Результат содержит только те пары связанных строк из <left_table> и <right_table>, которые удовлетворяют условию соединения <search_condition>.

  • LEFT[OUTER]JOIN— левое внешнее соединение. Результат будет обязательно содержать все строки из <left_table>. Если для некоторой строки этой таблицы ни одна из строк в <right_table> не удовлетворяет условию соединения, то соответствующие поля записи, включаемой в результат запроса, заполняются значениями NULL.

  • RIGHT[OUTER]JOIN— правое внешнее соединение.

  • FULL [OUTER]JOIN— полное внешнее соединение, что равносильно одновременному применению правил дляLEFT[OUTER]JOINиRIGHT[OUTER]JOIN.

Соседние файлы в папке Лекции и прочее