2.3. Проектирование реляционных баз данных для конкретной СУБД

 

Проектирование реляционной схемы из ER-модели:

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

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

•  связи "многие к одному" (и "один к одному") становятся внешними ключами; В случае связи «многие к одному» в таблицу сущности на стороне «многие» добавляется столбец, который может принимать значения соответствующие первичному ключу сущности на стороне «один». В случае связи «один к одному» внешний ключ может быть включен в любую сущность;

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

Индекс – специальная служебная таблица. Она содержит значения атрибута, для которого создается индекс и хранит ссылки на строки, в которых указано данное значение. Создание индекса позволяет ускорить процесс поиска по данному атрибуты при выполнении запросов.

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

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

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

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

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

•  FROM (из) перечисленных таблиц, в которых расположены эти столбцы

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

•  GROUP BY (группируя по) указанному перечню столбцов с тем, чтобы получить для каждой группы единственное агрегированное значение, используя во фразе SELECT SQL-функции SUM (сумма), COUNT (количество), MIN (минимальное значение), MAX (максимальное значение) или AVG (среднее значение)

•  HAVING (имея) в результате лишь те группы, которые удовлетворяют указанному перечню условий отбора групп

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

SELECT Название, Статус, Адрес FROM Поставщики;

SELECT ПС, Название, Статус, Город, Адрес, Телефон FROM Поставщики;

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

SELECT ПР, Цена, К_во, (Цена * К_во) FROM Поставки;

Запросы с условиями. Применяются когда требуется выдать не все строки таблицы, а лишь некоторое их подмножество. Подмножество строк таблицы можно выбрать указав ограничения на значения отдельных столбцов. Ограничения можно задавать с помощью операций = (равно), <> (не равно), < (меньше), <= (меньше или равно), > (больше), >= (больше или равно). Пример

SELECT ПС, Название, Статус, Город, Адрес, Телефон FROM Поставщики WHERE Город = «Новосибирск»;

В запросах допустимы логические операторы AND и OR . Например, если требуется выбрать поставщиков, которые размещаются либо в Новосибирске либо в Омске, то запрос примет вид:

SELECT ПС, Название, Статус, Город, Адрес, Телефон FROM Поставщики WHERE Город = «Новосибирск» OR Город = «Омск»;

В случае если требуется выбрать строки имеющие неопределенное (определенное) значение атрибута то используется условие вида Атрибут IS NULL или Атрибут IS NOT NULL

Запросы с упорядочиванием. Применятся для сортировки результатов запроса по одному из вошедших в запрос полей. Пример. Выдать список новосибирских поставщиков в алфавитном порядке названий.

SELECT ПС, Название, Статус, Город, Адрес, Телефон FROM Поставщики WHERE Город = «Новосибирск» ORDER BY Название;

Агрегирование данных в запросе. Применяется в случае, когда требуется получение обобщенных показателей по группам. Допустимы следующие операции над данными в группе COUNT - число значений в столбце, SUM - сумма значений в столбце, AVG - среднее значение в столбце, MAX - самое большое значение в столбце, MIN - самое малое значение в столбце. Например, в конце месяца требуется узнать общее количество проданного товара, количество сделок по данному товару, и общую сумму реализации по данному товару.

SELECT ПР, SUM(К_во), COUNT(К_во) SUM(К_во * Цена) FROM Поставки GROUPBY ПР;

Запросы с использованием нескольких таблиц. Такие запросы представляют собой наиболее мощное средство управления данными. Они позволяют формировать результаты на основе информации о связи данных различных сущностей. Он получается следующим образом: СУБД последовательно формирует строки декартова произведения таблиц, перечисленных во фразе FROM, проверяет, удовлетворяют ли данные сформированной строки условиям фразы WHERE, и если удовлетворяют, то включает в ответ на запрос те ее поля, которые перечислены во фразе SELECT. Условие WHERE должно обязательно содержать условия связи данных в виде Сущность1.ВнешнийКлюч=Сущность2.ПервичныйКлюч или Сущность1.Атрибут1=Сущность2.Атрибут2. Например, требуется сформировать лист поставок, который содержит следующие поля: Продукт, количество, Название фирмы-поставщика, Адрес фирмы поставщика.

SELECT ПР, К_во, Название, Адрес FROM Поставки, Поставщики WHERE Поставки.Поставщик=Поставщики.ПС;

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

Остальные возможности языка SQL – для самостоятельного ознакомления.

<<Предыдущий

Содержание

Следующий>>