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

merged

.pdf
Скачиваний:
10
Добавлен:
01.03.2016
Размер:
10.39 Mб
Скачать

5

SELECT *

FROM Customers outer

WHERE NOT EXISTS

( SELECT *

FROM Customers inner

WHERE outer.rating < = inner.rating

AND inner.city = 'Rome' );

=============== SQL Execution Log ============

 

|

|

| SELECT *

|

| FROM Customers outer

|

| WHERE NOT EXISTS

|

| (SELECT *

|

| FROM Customers inner

|

| WHERE outer rating = inner.rating

|

| AND inner.city = 'Rome');

|

| ============================================= |

|

cnum

cname

city

rating

snum

|

|

-----

--------

----

------

------

|

|

2004

Grass

Berlin

300

1002

|

|

2008

Cisneros

San Jose

300

1007

|

=============================================

Рисунок 13.10: Использование EXISTS в качестве альтернативы к ALL

1

ЕКЗАМЕНАЦІЙНИЙ БІЛЕТ № 16

1.Недоліки використання моделей даних.

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

2.Операції з зовнішніми схемами. Обмеження базових операцій модифікації.

Представление (англ. view, иногда используются названия «вид», «взгляд») — виртуальная (логическая) таблица, представляющая собой поименованный запрос (синоним к запросу), который будет подставлен как подзапрос при использовании представления.

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

Способы создания

Типичным способом создания представлений для СУБД, поддерживающих язык запросов SQL, является связывание представления с определённым SQL-запросом. Соответственно, содержимое представления

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

таких как PostgreSQL, Interbase, Firebird, Microsoft SQL Server, Oracle, представление может содержать:

подмножество записей из таблицы БД, отвечающее определённым условиям (например, при наличии одной таблицы «Люди» можно создать два представления «Мужчины» и «Женщины», в каждом из которых будут записи только о людях соответствующего пола);

подмножество столбцов таблицы БД, требуемое программой (например, из реальной таблицы «Сотрудники» представление может содержать по каждому сотруднику только ФИО и табельный номер);

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

результат объединения (join) нескольких таблиц (например, при наличии таблиц «Люди», «Адреса», «Улицы», «Фирмы и организации» возможно построение представления, которое будет выглядеть как таблица, для каждого человека содержащее его личные данные, адрес места жительства, название организации, где он работает, и адрес этой организации);

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

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

практически любую комбинацию вышеперечисленных возможностей.

CREATE VIEW Londonstaff

AS SELECT *

FROM Salespeople

2

WHERE city = 'London';

Обновляемые представления

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

Любые изменения, в том числе инструкции UPDATE, INSERT и DELETE, должны ссылаться на столбцы только одной базовой таблицы.

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

oпри помощи агрегатной функции: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR и

VARP;

o на основе вычисления. Столбец нельзя вычислить по выражению, включающему другие столбцы. Столбцы, сформированные при помощи операторов UNION, UNION ALL, CROSSJOIN, EXCEPT

иINTERSECT, считаются вычисляемыми и также не являются обновляемыми.

Предложения GROUP BY, HAVING и DISTINCT не влияют на изменяемые столбцы.

Предложение TOP не используется нигде в инструкции select_statement представления вместе с предложением WITH CHECK OPTION.

Вышеназванные ограничения относятся ко всем подзапросам представления в предложении FROM, равно как и к самому представлению.Как правило, компонент Компонент Database Engine должен иметь возможность однозначно трассировать изменения от определения представления до одной базовой таблицы. Дополнительные сведения см. в разделе Изменение данных через представление.

ЕКЗАМЕНАЦІЙНИЙ БІЛЕТ № 17

1. Операція вибірки SELECT. Об’єднання (UNION) у мові SQL.

Оператор UNION комбинирует результаты двух запросов в один результат, который объединяет строки, считанные двумя запросами (это действие отличается от комбинирования столбцов из двух таблиц).

Выражение UNION удаляет из результата повторяющиеся строки; выражение UNION ALL сохраняет повторы. Операторы UNION просты, но имеют ряд ограничений:

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

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

если имена соответствующих столбцовсовпадают, то их название будет использовано в результате.

предложение ORDER BY может использоваться только в последнем запросе команды UNION. Эта сортировка применяется к конечному результату после комбинирования.

можно задавать предложения GROUP BY и HAVING только в отдельных запросах; их нельзя использовать для изменения конечного результата.

Комбинирование строк

select_statement1 UNION [ALL] select statement2;

select_statement1 и select_statement2

2. Операції з зовнішніми схемами. Обмеження базових операцій модифікації.

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

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

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

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

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

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

В предложении WHERE не должен стоять вложенный запрос; в нем могут присутствовать только простые условия поиска.

В запросе не должно присутствовать выражение группировки GROUP BY или HAVING.

ЕКЗАМЕНАЦІЙНИЙ БІЛЕТ № 18

1. Операції модифікації даних у мові SQL: UPDATE.

Изменение строк с помощью команды UPDATE

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

все строки в таблице;

отдельные строки в таблице. Чтобы обновить строки, нужно указать:

какую таблицу изменять;

названия столбцов, которые нужно изменить, а также новые значения;

условие поиска с целью нахождения

строк для обновления (опционально). Перечислим важные параметры команды

UPDATE:

использует предложение WHERE, в котором указывается, какие строки нужноизменить. Без предложения WHERE команда UPDATE изменит все строки в таблице;

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

измененное значение не может отменить ограничение, наложенное на столбец

ни одно выражение не должно приводить к арифметической ошибке (например, переполнению или делению на нуль);

Изменение строк Введите:

UPDATE table

SET column = expr [WHERE search_condition];

table – это название таблицы, которую вы будете обновлять; column – название столбца (с данными для изменения) в table;

expr – буквенное обозначение, выражениеили запрос, который считывает одно значение. Значение, считанное expr, заменит существующее значение в column.

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

Запретить изменения в родительском ключе (ограниченное изменение –

RESTRICTED).

Разрешить автоматическое изменение внешнего ключа (каскадное изменение —

CASCADES).

Разрешить изменение в родительском ключе и автоматически установить внешний ключ в NULL (SET NULL).

2.Налаштування продуктивності. Індекси.

Индекс представляет собой отдельную физическую структуру в базе данных, созданную на основе одного или нескольких столбцов таблицы и предназначенную для ускорения поиска данных по значениям проиндексированных столбцов. Фактически в индексе фиксируются значения проиндексированного столбца в упорядоченном виде и их расположение в памяти. Если для создания одного индекса указывается более одного столбца, то второй упорядочивается внутри первого, третий – внутри второго, и т.д., т.е. каждый последующий – внутри предыдущего. Однако следует помнить, что чем больше

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

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

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

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

№19

1. Представлення структур у моделі даних. Операції над моделлю даних.

Ієрархічна модель бази даних - це логічна модель даних, яка являє собою структуру елементів, пов'язаних в ієрархічному порядку, що утворюють граф типу дерево, спрямоване гілками вниз. Під вузлами розуміють сукупність даних, які описують який-небудь об'єкт. Вузли зв'язуються між собою строго в ієрархічному порядку: вузли більш високого рівня зв'язуються з вузлами більш низького рівня, причому кожен вузол на більш низькому рівні може бути пов'язаний тільки з одним вузлом, що знаходяться на більш високому рівні. Граф типу дерево, що вийшов внаслідок, має тільки одну вершину, що не підпорядкована ніякої іншої і розташована у верхній його частині. Позитивними рисами ієрархічної структури, є: простота опису і швидкість запитів. Однак здійснювати пошук потрібних даних кожного разу доводиться з кореня, що часом не завжди зручно, а іншого способу переміщення по базі в ієрархічних структурах немає. Приклад побудови представлений на малюнку.

Бази даних, що мають ієрархічну структуру, мають дуже швидко знаходити і вибирати інформацію і передавати її користувачеві. Однак на практиці ієрархічну модель використовувати незручно, оскільки структура ієрархічної моделі даних не дозволяє настільки, само швидко перебирати всю інформацію. Серед допустимих операцій над збереженими в ієрархічній БД об'єктами можна виділити операції пошуку, вставки, оновлення та видалення. Особливості ієрархічної структури (1: М) обумовлюють особливості виконання операцій:

1)при включенні даних неможливо додати постачальника, якщо він не поставляє жодної деталі;

2)видалення запису про конкретну деталі може спричинити втрату інформації про постачальника (якщо він постачає тільки цю деталь);

3)програмування запитів до ієрархічної СУБД завжди є процедурним.

Мережева модель. Під мережевою моделлю даних розуміють логічну модель даних, в якій всі об'єкти можуть бути пов'язані з усіма, тобто крім вертикальних зв'язків можливі зв'язки між об'єктами одного рівня. Дана модель відрізняється від ієрархічної тим, що вузли нижчих рівнів можуть бути пов'язані з декількома вузлами більш високого рівня, що було неможливо при побудові ієрархічної моделі. Так, на малюнку це відбивається в тому, одну дисципліну можуть читати кілька викладачів і на одному потоці викладаються кілька дисциплін. Дана модель володіє рядом переваг, які були відсутні в ієрархічній моделі, серед них гнучкість, універсальність, можливість доступу до даних через значення декількох відносин. Проте недоліки даної моделі виявилися набагато істотніше при практичній реалізації.

До недоліків можна віднести складну структуру пам'яті, складну організацію даних, а так само те, що набори співвідношень і структуру необхідно задавати відразу. Програмування запитів в СМД процедурне. Перевагою мережевої моделі даних є можливість ефективної реалізації за показниками витрат пам'яті та оперативності. Недоліком мережевої моделі даних є висока складність і жорсткість схеми БД, побудованої на її основі. Оскільки логіка процедури вибірки даних залежить від фізичної організації цих даних, то ця модель не є повністю незалежною від програми. Іншими словами, якщо необхідно змінити структуру даних, то потрібно змінити і додаток.

Для усунення зазначених вище недоліків була запропонована і розроблена реляційна модель, яка заснована на реляційній алгебрі. Таким чином, в реляційної моделі інформація представляється у вигляді прямокутних таблиць, які складаються з рядків і стовпців. Між таблицями встановлюються різні типи зв'язків, які відображають, як об'єкти співвідносяться між собою. Виділяють такі основні типи зв'язків:

Зв'язок «один до одного» означає, що кожного запису першої таблиці може відповідати не більше одного запису другої таблиці, і кожного запису другої таблиці може відповідати не більше одного запису першої таблиці.

Зв'язок «Один до багатьох» є найбільш поширеним видом зв'язку. При цьому типі зв'язку кожного запису першої таблиці може відповідати безліч записів другої таблиці, але кожного запису другої таблиці може відповідати тільки один запис батьківської таблиці.

Зв'язок «Багато до багатьох» означає, що кожного запису першої таблиці може відповідати безліч записів другої таблиці, і кожного запису другої таблиці може відповідати безліч запис першої таблиці.

Даний тип зв'язку практично не використовується і не підтримується багатьма СУБД, тому при побудові логічної моделі даних краще замінювати зв'язок «багато до багатьох» двома зв'язками «один до багатьох». Вона володіє наступними перевагами: простота і доступність, повна незалежність даних. Одним з основних переваг реляційної моделі є її однорідність. Всі дані розглядаються як збережені в таблицях і тільки в таблицях. Кожен рядок такої таблиці має один і той же формат даних. До недоліків можна віднести обмеженість і зумовленість набору можливих типів даних атрибутів, а так само їх атомарность (тобто значення кожного атрибута не є списками або множинами простих або складних значень). Це ускладнює застосування реляційної моделі для деяких сучасних додатків. Дані недоліки усуваються в розширенні реляційної моделі і застосуванні об'єктно-реляційних СУБД

2. Операції модифікації даних у мові SQL: INSERT.

Оператор INSERT вставляет новые записи в таблицу. При этом значения столбцов могут представлять собой литеральные константы, либо являться результатом выполнения подзапроса. В первом случае для вставки каждой строки используется отдельный оператор INSERT; во втором случае будет вставлено столько строк, сколько возвращается подзапросом.

Синтаксис оператора следующий:

INSERT INTO <имя таблицы>[(<имя столбца>,...)] VALUES (<значение столбца>,…)

№20

1. Моделі даних. Обмеження цілосності.

Цілісність в реляційної моделі даних. Обмеження цілісності суті звучить наступним чином: для заголовка будь-якого відношення бази даних повинен бути явно чи неявно визначений первинний ключ, що є таким мінімальним підмножиною заголовка відносини, що в будь-якому тілі цього ставлення, яке може з'явитися в базі даних, значення первинного ключа в будь-якому кортежі цього тіла є унікальним, тобто відрізняється від значення первинного ключа в будь-якому іншому

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]