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

6) Явное и неявное соединение таблиц в языке sql. Правое и левое соединение.

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

Явное:JOIN: Возвращает строки, когда есть хотя бы одно совпадение в обеих таблицах.

LEFT JOIN: Возвращает строки из левой таблицы, даже если их нет правой таблице.

INNER JOIN - возвращает строки, когда есть хотя бы одно совпадение в обеих таблицах.

SELECT field1, field2, field3 FROM first_table

INNER JOIN second_table

ON first_table.keyfield = second_table.foreign_keyfield

Пример: SELECT Employees.Name, Orders.Product FROM Employees

INNER JOIN Orders ON

Employees.Employee_ID=Orders.Employee_ID ;

Левое соединение: SELECT field1, field2, field3 FROM first_table

LEFT JOIN second_table

ON first_table.keyfield = second_table.foreign_keyfield

Пример: SELECT Employees.Name, Orders.Product FROM Employees

LEFT JOIN Orders

ON Employees.Employee_ID=Orders.Employee_ID ;

RIGHT JOIN - возвращает строки из правой таблицы(table_name2), даже если их нет левой таблице (table_name1).

Правое соединение: SELECT field1, field2, field3 FROM first_table

RIGHT JOIN second_table

ON first_table.keyfield = second_table.foreign_keyfield

Пример: SELECT Employees.Name, Orders.Product FROM Employees

RIGHT JOIN Orders

ON Employees.Employee_ID=Orders.Employee_ID ;

Неявное - это когда просто в SELECT'еSELECT t1.c, t2.n FROM t1,t2;

7)

8) 1,2,3 Нф. «Восходящая и нисходящая» нормализация.

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

В определении реляционной модели Кодда все отношения всегда находятся в 1НФ.

2НФ: Отношение R находится во второй нормальной форме (2НФ), если никакие неключевые атрибуты не являются функционально зависимыми лишь от части ключа.

Таким образом, 2НФ может оказаться нарушена только в том случае, когда ключ составной.

3НФ: Отношение R находится в третьей нормальной форме (3NF) в том и только в том случае, если находится в 2NF и каждый неключевой атрибут нетранзитивно зависит от первичного ключа.

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

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

разбиение с учетом условий нормализации.

9) Моделирование иерархий средствами реляционной субд. Способ полного обхода дерева. Повышение производительности за счет использования индексов.

Метод, предложенный Джо Селко, называемый ещѐ методом вложен-ных множеств, основан на полном обходе дерева (рис. 43). При полном обходе дерева каждому узлу назначается пара значений – левый и правый коэффици-енты. Левые коэффициенты присваиваются во время движения от предка к по-томку. Правые коэффициенты назначаются при движении от потомка к предку. Корень всегда имеет левый коэффициент, равный 1. Разность между значениями левого и правого коэффициентов для листьев всегда равна 1. Пра-вый коэффициент для корня равен удвоенному числу узлов в иерархии (2n), так как при обходе мы должны посетить каждый узел дважды, один раз с левой стороны и один раз с правой стороны.

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

create table T (L int not null primary key,

Node varchar,

R int not null);

все листья можно найти следующим простым запросом (рис. 54):

SELECT * FROM T WHERE R-L=1;

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

CREATE UNIQUE INDEX L1 ON T(L ASC);

Для того чтобы воспользоваться преимуществом индекса, запрос следует напи-сать в виде

SELECT * FROM T WHERE L=(R-1);

MS SQL Server может применить индекс только в том случае, когда атрибуты, на которых этот индекс определѐн, не использу-ются в выражениях, поэтому если записать условие в виде (R-L) = 1, то индекс использоваться не будет.