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

3) Охарактеризуйте известные вам уровни изоляции транзакций.

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

Serializable (упорядочиваемость)

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

Repeatable read (повторяемость чтения)

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

Read committed (чтение фиксированных данных)

Принятый по умолчанию уровень для Microsoft SQL Server Завершенное чтение, при котором отсутствует черновое, "грязное" чтение.(т.е. чтение одним пользователем данных, которые не были зафиксированы в БД командой COMMIT) Тем не менее в процессе работы одной транзакции другая может быть успешно завершена и сделанные ею изменения зафиксированы. В итоге первая транзакция будет работать с другим набором данных. Это проблема неповторяемого чтения.

Read uncommitted (чтение незафиксированных данных)

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

Билет№34.1) Какие задачи могут решаться использованием регулярных выражений в SQL – запросах?

2) Как соотносятся между собой понятия «сущность – связь» и зависимость (функциональная зависимость, многозначная зависимость и т.П.)?

3) При помощи какого предложения select можно осуществить выборку всех потомков наперед заданного узла иерархии при моделировании иерархии способом правого и левого коэффициентов?

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

1) определить уровень этого заданного узла и нарастить полученное значе-ние на единицу – это будет значение уровня в дереве для непосредствен-ных потомков данного узла:

SELECT COUNT(*)+1 AS Level

FROM T AS B3, T AS E3

WHERE E3.L BETWEEN B3.L AND B3.R AND

E3.Node='D';

2) выбрать узлы уровня, вычисленного на предыдущем шаге:

SELECT DISTINCT B1.Node FROM T AS B1, T AS E1 WHERE

(SELECT COUNT(*) FROM T AS B2, T AS E2 WHERE

E2.L BETWEEN B2.L AND B2.R AND E2.Node=B1.Node)=

(SELECT COUNT(*)+1 FROM T AS B3, T AS E3 WHERE

E3.L BETWEEN B3.L AND B3.R AND E3.Node='D');

3) Окончательно из полученного на предыдущем шаге списка узлов вы-брать те узлы, которые имеют предком заданный узел:

SELECT B1.Node FROM T AS B1, T AS E1

WHERE (SELECT COUNT(*) FROM T AS B2, T AS E2 WHERE

E2.L BETWEEN B2.L AND B2.R AND E2.Node=B1.Node)=

(SELECT COUNT(*)+1 FROM T AS B3, T AS E3 WHERE

E3.L BETWEEN B3.L AND B3.R AND E3.Node='D') AND

B1.L BETWEEN E1.L AND E1.R AND E1.Node='D';

Билет№35.1) При помощи какого предложения SELECT можно осуществить выборку всех потомков наперед заданного узла иерархии при моделировании иерархии методом вспомогательной таблицы?

Выбор всех потомков для заданного узла (в примере это узел B) может быть осуществлен следующим предложением SQL:

SELECT T_Base.Node

FROM T_Base, T_Helper

WHERE T_Base.ID=T_Helper.UID and

T_Helper.ParentID=(SELECT ID FROM T_Base

WHERE Node='B');