Семантический анализ

Целью проведения семантического анализа является отклонение нормализованных запросов, которые некорректно сформулированы или содержат противоречивые требования. Запрос считается некорректно сформулированным, если его выполнение никогда не сможет привести к созданию результирующего набора данных. Чаще всего такая ситуация возникает тогда, когда в предикате отсутствует определение необходимых операций соединения. Запрос считается противоречивым, если его предикат никогда не сможет удовлетворить каким-либо кортежам. Например, запрос Select FIOS From Student Where Nzach = “АП2001/43” And Nzach = “АП2200/43” является противоречивым, поскольку в таблице Student не может быть студента с разными номерами зачетки. Аналогично, запрос Select FIOS From Student Where (Nzach = “АП2001/43” And Nzach = “АП2200/43”) Or YearEnter > 2000 может быть заменен на запрос Select FIOS From Student Where YearEnter > 2000, поскольку его противоречивую фразу можно заменить на логическое значение False.

Алгоритм определения корректности существует только для подмножества запросов, не содержащих операций дизъюнкции и отрицания. По отношению к этому множеству запросов могут применяться следующие проверки.

1.Построение графа соединения отношений. Если элементы графа оказываются разъединенными, формулировка запроса является неверной. При построени графа соединения отношений сначала создается отдельный узел для каждого используемого в запросе отношения, а также для результирующей таблицы запроса. Затем между парами узлов проводятся дуги, представляющие операции соединения, и дуги вокруг отдельных узлов, представляющие проекции исходных таблиц. Пусть запрос «Определить Ф.И.О. студентов и группы, в которых они учатся, имеющих задолженности по курсу «Базы данных».» записан следующим образом Select Student.FIOS, Student.Sgroup From Student, Vedom, Ekzamen, Predmet Where Ekzamen.CodOcen > 3 And Predmet.Predm = “Базы данных” And Vedom.Nved = Ekzamen.Nved And Predmet.CodPredm = Vedom.CodPredm And Ekzamen.CodOcen <=2.

Построим для него граф соединения отношения.

 
 


В этом графе есть не соединенные между собой отношения. Это указывает на то, что данный запрос сформулирован неверно. Ошибка состоит в том, что в предложении Where пропущено соединение Ekzamen.Nzach = Student.Nzach.

2.Построение графа соединений нормализованных атрибутов. Если граф включает петлю, для которой сумма оценок является отрицательной, то запрос содержит противоречивые условия. При построении графа соединений нормализованных атрибутов сначала создаются отдельные узлы для каждой ссылки на атрибут и константы 0. Затем проводятся направленные дуги между узлами, представляющие операции соединения, а также направленные дуги между узлами атрибутов и констант 0, которые представляют операции выборки. Далее каждому ребру a ® b присваивается весовое значение c, если оно представляет условие, записанное в виде неравенства (a £ b + c), а каждому ребру 0 ® a значение –c, если оно представляет условие типа (a ³ c).

Select Student.FIOS, Student.Sgroup From Student, Vedom, Ekzamen, Predmet Where Ekzamen.CodOcen > 3 And Predmet.Predm = “Базы данных” And Vedom.Nved = Ekzamen.Nved And Predmet.CodPredm = Vedom.CodPredm And Ekzamen.CodOcen <=2 And Ekzamen.Nzach = Student.Nzach


Этот граф включает петлю между узлами Ekzamen.CodOcen и 0, для которой сумма весовых значений является отрицательной, и, следовательно, не может быть студента, получившего оценку по «Базам данных» равную или большую четырех, и одновременно быть задолжником по этому предмету.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: