Support of Relational Algebra Knowledge ... - Hornad - TUKE
Support of Relational Algebra Knowledge ... - Hornad - TUKE
Support of Relational Algebra Knowledge ... - Hornad - TUKE
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Support</strong> <strong>of</strong> <strong>Relational</strong> <strong>Algebra</strong> <strong>Knowledge</strong> Assessment<br />
Henrieta Telepovska, Matus Toth *<br />
Department <strong>of</strong> Computers and Informatics, Faculty <strong>of</strong> Electrical Engineering and Informatics, Technical University <strong>of</strong> Kosice<br />
Email: Henrieta.Telepovska@tuke.sk<br />
Abstract.<br />
In the paper a prototype <strong>of</strong> relational algebra performance<br />
module is described. This module supports students<br />
training and automated knowledge assessment <strong>of</strong><br />
relational algebra queries. The relational algebra is a basis<br />
<strong>of</strong> SQL queries performance. Each select statement can be<br />
written by operations <strong>of</strong> relational algebra and vice versa.<br />
It is the main idea <strong>of</strong> our solution that is described in this<br />
article. The relational algebra performance module uses a<br />
module <strong>of</strong> select statements evaluation.<br />
I. INTRODUCTION<br />
Automated knowledge assessment becomes quite popular<br />
in the last years ([7]). The main idea <strong>of</strong> advanced support<br />
<strong>of</strong> relational algebra knowledge assessment is to automate<br />
the process <strong>of</strong> student training and examination<br />
([12][13][14]). It was developed prototype <strong>of</strong> relational<br />
algebra performance module which uses module <strong>of</strong> SQL<br />
statement processing especially SELECT statement<br />
([10]). Both modules are plug-ins to LMS Moodle. On the<br />
present LMS (Learning Management System) Moodle is<br />
used as an electronic support in education on Department<br />
<strong>of</strong> Computers and Informatics <strong>of</strong> Technical University in<br />
Kosice. It provides 69 courses in all three degrees <strong>of</strong><br />
university study – undergraduate, graduate and<br />
postgraduate. At first the Database Systems course was<br />
developed to provide learning materials for students.<br />
Later this course was extended about verification and<br />
evaluation <strong>of</strong> students’ knowledge. It was used a quiz<br />
module <strong>of</strong> LMS Moodle with its standard types <strong>of</strong><br />
questions.<br />
A quiz module is a component <strong>of</strong> LMS Moodle ([11]).<br />
This module enables to develop tests consisting <strong>of</strong> various<br />
types questions. The questions and the answers are stored<br />
in database. It is possible to generate a test from database<br />
by defined requirements automatically.<br />
LMS Moodle supports following question types -<br />
embedded answers, matching, multiple choice, calculated,<br />
random short-answer matching, short answer and<br />
true/false. It is possible to set up various test parameters<br />
or features. For example - shuffle questions, shuffle<br />
answers, permit or deny reviewing a quiz, single or<br />
multiple attempts at a quiz, review correct answers,<br />
students’ responses, scores or general feedback and<br />
different grading methods.<br />
The quiz module enables to create the categories <strong>of</strong><br />
questions in which it is possible to distribute developed<br />
questions. One category can contain one or more thematic<br />
parts <strong>of</strong> a particular subject. The questions <strong>of</strong> Database<br />
System course are organized into two basic parts – theory<br />
and practice. The category <strong>of</strong> database system theory is a<br />
collection <strong>of</strong> database system fundamental questions. This<br />
category has 11 subcategories. The second category<br />
named Database System Examples has 7 subcategories. It<br />
contains practice examples that verify student knowledge<br />
<strong>of</strong> database objects manipulation.<br />
The examples are focused on mapping logical database<br />
schema into physical schema. The next examples are<br />
aimed at SQL (Structured Query Language) statements<br />
for database objects creation – table, triggers, and stored<br />
procedures. The very important questions are examples<br />
that verify correctness <strong>of</strong> select statement writing. The<br />
select statement examples are mainly focused on inner<br />
and outer join, subquery and usage <strong>of</strong> aggregate functions.<br />
The newest type <strong>of</strong> question is a relational algebra check<br />
that verifies correctness <strong>of</strong> query writing by the relational<br />
algebra operations.<br />
II.RELATIONAL ALGEBRA<br />
<strong>Relational</strong> algebra, together with the relational calculus<br />
forms the mathematical basis for relational databases. E.F.<br />
Codd described it as a basis for defining the relational<br />
model ([2][3]). A relation is a fundamental concept <strong>of</strong> the<br />
relational model. In the relational DBMS it is a data<br />
structure that allows data storage in database. <strong>Relational</strong><br />
algebra is a set <strong>of</strong> formal operations <strong>of</strong> these relations,<br />
resulting in a new relation. <strong>Relational</strong> algebra defines how<br />
we can manipulate data in tables by relational operators.<br />
Codd originally defined the eight relational operators,<br />
which he called SELECT (or RESTRICT), PROJECT,<br />
JOIN, PRODUCT, INTERSECT, UNION,<br />
DIFFERENCE a DIVIDE. The most important operators<br />
are SELECT, PROJECT and JOIN, which are mostly<br />
used in the formulation <strong>of</strong> relational algebra expressions.<br />
<strong>Relational</strong> operators are characterized by closeness<br />
property, i.e. relational algebra operators are used over<br />
existing relations (tables) and a result is new relation<br />
again. There are two types <strong>of</strong> relational operators - unary<br />
and binary. Unary operators such as SELECT and<br />
PROJECT are used only at one relation, while an operator<br />
such as JOIN is used over two relations ([1][3][4]).<br />
There are two groups <strong>of</strong> relational algebra operations. The<br />
first one includes set operations from mathematical set<br />
theory, because each relation is defined as a set <strong>of</strong> tuples.<br />
Set operations defined in the relational algebra: union,<br />
intersection, difference and Cartesian product. The second<br />
one consists <strong>of</strong> relational operations. This includes<br />
operations such as: selection, projection and join<br />
([1][3][4]). Chyba! Nenašiel sa žiaden zdroj odkazov.<br />
Selection<br />
<strong>Relational</strong> SELECT operator, also called RESTRICT,<br />
retrieves all tuples that meet the specified criteria.<br />
SELECT is the horizontal retrieve <strong>of</strong> relation ([1][3][4]).
Syntax <strong>of</strong> select operation:<br />
σ ()<br />
σ - symbol <strong>of</strong> select operation<br />
condition - boolean expression specified over relation<br />
attributes<br />
relation_name – name <strong>of</strong> the relation which is processed<br />
by select operation.<br />
The result is a new relation that has the same attributes as<br />
original relation defined by relation_name.<br />
Projection<br />
Projection is vertical retrieve from relation and it selects<br />
table columns according to attribute list. Syntax <strong>of</strong> project<br />
operation:<br />
П ()<br />
П - symbol <strong>of</strong> project operation<br />
attribute_list – list <strong>of</strong> attribute (comma separated)<br />
displayed in the result<br />
relation_name – name <strong>of</strong> the relation which is processed<br />
by projection<br />
The result is a new relation with attributes that is specified<br />
in the attribute list in the same order as listed. If the<br />
attribute list contains only non-key attributes <strong>of</strong> the<br />
relation, then duplicate tuples will not be displayed in the<br />
final relation.<br />
Union<br />
Set operator UNION consolidates all tuples <strong>of</strong> two<br />
relations, eliminating duplicate records. Both relations<br />
must have the same relational scheme – degrees <strong>of</strong><br />
relations and domains <strong>of</strong> corresponding columns must be<br />
identical then the relations are union-compatible. Syntax<br />
R 3 = R 1 U R 2<br />
U - symbol <strong>of</strong> union operation<br />
Relations R 1 (a 1 , a 2 , … , a n ) and R 2 (b 1 , b 2 , … , b n ) must be<br />
union-compatible. The degree <strong>of</strong> both relations is n.<br />
The result is R 3 (c 1 , c 2 , … , c n ) relation with degree n and<br />
each tuple <strong>of</strong> R 3 is either from R 1 or R 2.<br />
If two relations are not union-compatible UNION<br />
operator cannot be used. To overcome this problem, it can<br />
be used the project operator, to narrow the number <strong>of</strong><br />
columns in each relation and the relations were unioncompatible.<br />
Intersect<br />
Intersection is a binary operation. The result tuples belong<br />
to both relations. Syntax<br />
R 3 = R 1 ∩ R 2<br />
∩ - symbol <strong>of</strong> intersect<br />
Relations R 1 (a 1 , a 2 , … , a n ) a R 2 (b 1 , b 2 , … , b n ) must be<br />
union-compatible. The degree <strong>of</strong> both relations is n. The<br />
result is R 3 (c 1 , c 2 , … , c n ) relation with degree n and each<br />
tuple from R 3 is in R 1 and also R 2 .<br />
Difference<br />
Difference operator returns all records from a single<br />
relation that are not in the second relation. Difference<br />
operator requires that both relations were unioncompatible.<br />
Syntax:<br />
R 3 = R 1 - R 2<br />
Relations R 1 (a 1 , a 2 , … , a n ) a R 2 (b 1 , b 2 , … , b m ) must be<br />
union-compatible. The degree <strong>of</strong> both relations is n. The<br />
result is R 3 (c 1 , c 2 , … , c n ) relation with degree n.<br />
Cartesian product<br />
Syntax<br />
R 3 = R 1 X R 2 , where<br />
R 1 (a 1 , a 2 , … , a n ) is a relation with degree n and the<br />
number <strong>of</strong> tuples (the cardinality <strong>of</strong> relation) is i.<br />
R 2 (b 1 , b 2 , … , b m ) is a relation with degree m and the<br />
cardinality <strong>of</strong> relation is j.<br />
The result R 3 (a 1 , a 2 , … , a n , b 1 , b 2 , … , b m ) is a relation<br />
with degree n + m and the cardinality <strong>of</strong> result relation is<br />
i*j.<br />
Cartesian product combines tuples from two relations.<br />
The result contains many tuples that have no relationship<br />
between them.<br />
Division<br />
Syntax<br />
R 3 = R 1 ÷ R 2<br />
R 1 (a 1 , a 2 , … , a n ) is a relation with degree n and the<br />
number <strong>of</strong> tuples (the cardinality <strong>of</strong> relation) is i.<br />
R 2 (b 1 , b 2 , … , b m ) is a relation with degree m and the<br />
cardinality <strong>of</strong> relation is j.<br />
R 3 (c 1 , c 2 , … , c k ) is a relation with degree k=n-m and the<br />
cardinality <strong>of</strong> relation is i ÷ j .<br />
The result relation contains tuples from R 1 that<br />
a combination with each tuple from R 2 is in R 1 . The result<br />
tuples has only attributes from R 1 .<br />
Join<br />
Join operation is one <strong>of</strong> the basic operations <strong>of</strong> relational<br />
algebra. It is a binary operation that combines two<br />
relations in the prescribed manner. It is one <strong>of</strong> the most<br />
important operations in relational databases, expressing<br />
the relationship between the two relations. Join R1 and R 2<br />
is a select operation applying over Cartesian product R 1<br />
X R 2 with particular condition. Join operation is defined<br />
over corresponding attributes both relations R 1 and R 2 .<br />
These attributes have the same domain and semantics.<br />
Syntax<br />
R 3 = R1 ⋈ R 2<br />
⋈ - symbol <strong>of</strong> join operation<br />
R 1 (a 1 , a 2 , … , a n ) and R 2 (b 1 , b 2 , … , b m ) - relations<br />
join_condition – boolean expression in the form<br />
AND AND … AND<br />
, where a condition has following form Ai Ө<br />
Bj. Ai is an attribute <strong>of</strong> R 1 and Bj is a attribute R 2 . Symbol<br />
Ө is one <strong>of</strong> next operators =, =, != .<br />
R 3 (a 1 , a 2 , … , a n , b 1 , b 2 , … , b m ) – a result relation with<br />
n+m attibutes<br />
The result relation contains corresponding tuples that<br />
satisfy a join condition.
Aggregate functions<br />
Some database queries require an application <strong>of</strong> aggregate<br />
functions to collection <strong>of</strong> data records. The aggregate<br />
functions also called group functions are COUNT, SUM,<br />
AVERAGE, MAXIMUM and MINIMUM functions.<br />
Another type <strong>of</strong> database query involves grouping the<br />
relation records according to the value <strong>of</strong> some relation<br />
attributes and subsequent use <strong>of</strong> the aggregation function<br />
independently <strong>of</strong> each group. Syntax<br />
F ()<br />
group_attributes – a list <strong>of</strong> relation attributes for grouping<br />
records<br />
F – function symbol<br />
function_list – a list in form ,<br />
a function is one <strong>of</strong> COUNT, SUM, AVERAGE,<br />
MAXIMUM and MINIMUM functions and attribute is<br />
one <strong>of</strong> relation attributes.<br />
relation_name – a name <strong>of</strong> relation<br />
The result relation contains a group attribute and one<br />
attribute for each item from function_list. If no<br />
group_attribute is defined the functions are applied to all<br />
tuples <strong>of</strong> specified relation.<br />
Sequences <strong>of</strong> operations<br />
The usage <strong>of</strong> relational algebra operations in sequence can<br />
be entered in two ways. The first way is one statement<br />
created by immersion <strong>of</strong> operations. The second one is<br />
implementation <strong>of</strong> operations in succession and storing<br />
intermediate results.<br />
The relations which store intermediate results must be<br />
named. ([1][3][4])<br />
III. MODULE OF RELATIONAL ALGEBRA<br />
PERFORMANCE<br />
A query written in a relational algebra can be expressed as<br />
select statement <strong>of</strong> structured query language (SQL).<br />
Execution <strong>of</strong> select statement on the database server<br />
returns a relation. It is a way how to check the correctness<br />
<strong>of</strong> written relational algebra statements. It was developed<br />
the compiler <strong>of</strong> relational algebra statements into select<br />
statements ([5]).<br />
The check correctness <strong>of</strong> a student answer is realized by<br />
execution <strong>of</strong> translated relational algebra statement on<br />
database sever. The result relation is compared with<br />
relation which is a result <strong>of</strong> correct teacher select<br />
statement. Module <strong>of</strong> relational algebra performance<br />
based on designed grammar transforms a query written by<br />
relational algebra operations into select statement <strong>of</strong> SQL.<br />
The select statement is then processed by module <strong>of</strong> SQL<br />
statement evaluation ([6][10]).<br />
Compiler<br />
The lexical units <strong>of</strong> query are identified at the lexical<br />
level. On the basis <strong>of</strong> designated formal grammar rules it<br />
is checked syntax correctness <strong>of</strong> particular query ([8][9]).<br />
It was designed a special language for writing relational<br />
algebra queries for our solution. The special symbols (σ,<br />
П, ⋈) which are not standard keyboard input were<br />
replaced following keywords:<br />
σ = SEL<br />
П = PROJ<br />
⋈<br />
= JOIN<br />
The symbol <strong>of</strong> aggregate functions 'F' was replaced FUN<br />
keyword.<br />
The intermediate results are written following:<br />
MV1 = relational algebra operation<br />
MV2 = relational algebra operation<br />
...<br />
V = relational algebra operation<br />
MVi – symbol <strong>of</strong> intermediate result<br />
V – symbol <strong>of</strong> result – resulting relation<br />
Grammar<br />
An alphabet is the foundation <strong>of</strong> every language. It is a<br />
finite set <strong>of</strong> elements called symbols ([8][9]). Alphabet <strong>of</strong><br />
relational algebra:<br />
• { a,b,...z } – roman letters<br />
• { 0, 1, ...9 } - decimal digits<br />
• { '.' , ',' , '(', ')', '+', '-', '*', '/', '=', '=', '!=' }<br />
– special symbols<br />
• {'SEL', 'PROJ', 'JOIN', 'FUN', 'SUM', 'AVERAGE',<br />
'MAX', 'MIN', 'COUNT', 'AND', 'OR', 'NOT'} -<br />
keywords<br />
• {'MV1', 'MV2', ….'MVi', 'V' } - reserved words<br />
Grammar <strong>of</strong> relational algebra language is<br />
G = (N, T, P, S), where<br />
N = {Program, Command, Select, Project, Join, JoinAF,<br />
Agreg, Conditions, Condition, Relation, Function, Query,<br />
Operation} – a finite set <strong>of</strong> nonterminal symbols<br />
T = { SEL, PROJ, JOIN, FUN, AND, OR, NOT, SUM,<br />
AVER, MAX, MIN, COUNT, RESULT, DOT, POINT,<br />
LOZAT, NM, POZAT, PLUS, MINUS, MULL, DIV, LT,<br />
LE, GT, GE, EQ, NE, PART, ID, KONST} - a finite set<br />
<strong>of</strong> terminal symbols (Table 1)<br />
P a set <strong>of</strong> rules<br />
S = Program – start symbol<br />
Table 1 Terminal symbols<br />
Lexical Unit<br />
Lex[[SEL]]<br />
Lex[[PROJ]]<br />
Lex[[JOIN]]<br />
Lex[[FUN]]<br />
Lex[[AND]]<br />
Lex[[OR]]<br />
Lex[[NOT]]<br />
Lex[[SUM]]<br />
Lex[[AVERAGE]]<br />
Terminal Symbol<br />
SEL<br />
PROJ<br />
JOIN<br />
FUN<br />
AND<br />
OR<br />
NOT<br />
SUM<br />
AVER
Lex[[MAX]]<br />
Lex[[MIN]]<br />
Lex[[COUNT]]<br />
Lex[[ V ]]<br />
Lex[[ . ]]<br />
Lex[[ , ]]<br />
Lex[[ ( ]]<br />
Lex[[ ) ]]<br />
Lex[[ + ]]<br />
Lex[[ - ]]<br />
Lex[[ * ]]<br />
Lex[[ / ]]<br />
Lex[[ < ]]<br />
Lex[[ < ]]<br />
Lex[[ > ]]<br />
Lex[[ > ]]<br />
Lex[[ = ]]<br />
Lex[[ != ]]<br />
Lexical Unit<br />
MAX<br />
MIN<br />
COUNT<br />
RESULT<br />
DOT<br />
POINT<br />
LOZAT<br />
POZAT<br />
PLUS<br />
MINUS<br />
MULL<br />
DIV<br />
LT<br />
LE<br />
GT<br />
GE<br />
EQ<br />
NE<br />
Lex[[ MVi ]]<br />
i → ( '0' | .. | '9' )<br />
Lex[[ j 1 … j n ]]<br />
j k → ( 'a' | .. | 'z' ) { ( 'a' | .. | 'z' ) }<br />
Lex[[ c 1 … c n ]]<br />
c k → ( '0' | .. | '9' ) { ( '0' | .. | '9' ) }<br />
[( '.' | ',' ) ( '0' | .. | '9' ) {( '0' | .. | '9' )}]<br />
Lex[[ ai 1 … i n a ]]<br />
i k → znak , a → ” ' “<br />
A set <strong>of</strong> rules:<br />
Terminal<br />
Symbol<br />
PART<br />
ID<br />
NM<br />
KONST<br />
Relation → LOZAT ( ID | PART ) POZAT<br />
Function → SUM | AVER | MAX | MIN | COUNT<br />
Conditions → Condition {(AND | OR) Condition}<br />
Condition → [NOT] (ID (EQ|NE|GT|GE|LT|LE)<br />
Query | LOZAT Conditions POZAT)<br />
Query<br />
→ ID | NM | ST | LOZAT Query POZAT<br />
| Query Operaction Query<br />
Operation → PLUS | MINUS | MUL | DIV<br />
It is a context-free grammar. The form <strong>of</strong> each grammar<br />
rule is<br />
A → α , where A ∈ Ν a α ∈ ( N U T). <br />
<br />
On the left side <strong>of</strong> any rule it is no terminal symbol<br />
The grammar is LL(1) grammar, because it satisfies<br />
FIRST-FIRST a FIRST-FOLLOW conditions, i.e. for<br />
A type rules are defined:<br />
A → α1|α2 | ... | αn<br />
FIRST-FIRST<br />
If α i ⇒ * w, w ∈ T + , α j ⇒ * u, u ∈ T + ,<br />
then FIRST 1 (α i ) ∩ FIRST 1 (α j ) = ∅ pre 1 ≤ i, j ≤ n, i ≠<br />
j.<br />
<br />
FIRST-FOLOW<br />
If α i ⇒ * e ,t.j. e∈FIRST 1 (α i ) for i,<br />
then FIRST 1 (α j )∩FOLLOW 1 (A )=∅ pre 1 ≤ j ≤ n, i ≠ j<br />
Program → { PART Command } RESULT Command<br />
Command → EQ (Select | Project | JoinAF | Agreg)<br />
Select → SEL Conditions Relation<br />
Project → PROJ ID { POINT ID } Relation<br />
JoinAF → ID ( Join | AF )<br />
Join → JOIN Condition { AND Condition }<br />
( ID | PART )<br />
Agreg → {POINT ID} FUN Function (ID|MUL)<br />
{POINT Function (ID|MUL)} Relation<br />
IV. IMPLEMENTATION<br />
On Figure 1 the scenario <strong>of</strong> the relational algebra<br />
performance is displayed. SQL_RA_Module controls the<br />
whole process <strong>of</strong> RA_queries and select statements<br />
treating. Compiler checks RA_query syntax and if any<br />
errors occur in parsing SQL_RA_module finishes its<br />
evaluation. RA_query is classified as incorrect.<br />
Otherwise, a module returns select1_statement which<br />
corresponds with student relational algebra query ([5]).<br />
The select1_statement is executed on database server<br />
([6][10]). The result relations <strong>of</strong> select1 and select2<br />
statements are compared. If they are equal a student<br />
RA_query is correct else it is incorrect. The module<br />
displayed error message if an error occurs in any step <strong>of</strong><br />
performance.
SequenceDiagram_1<br />
SQL_RA_Module Compiler Database<br />
Student<br />
RA_query<br />
compile<br />
select1_statement<br />
errors?<br />
errors<br />
[errors = false]: execute select1 statement<br />
result <strong>of</strong> select1<br />
execute select2 statement<br />
result <strong>of</strong> select2<br />
result <strong>of</strong> comparison select1 with select2<br />
[errors = true]: compiling error<br />
Figure 1 The relational algebra performance scenario<br />
V. CONCLUSION<br />
Described solution enables to achieve accurate results. It<br />
does not compare specified relation query as text but it<br />
compares two relations. On the present the basic<br />
operations <strong>of</strong> relational algebra (selection, projection,<br />
join, and aggregate function) are implemented. The next<br />
operations are developed. The dynamic evaluation <strong>of</strong><br />
select statement and relational algebra query is the first<br />
step <strong>of</strong> understanding and correct writing <strong>of</strong> select<br />
statement in SQL.<br />
ACKNOWLEDGEMENT<br />
This work is the result <strong>of</strong> the project implementation:<br />
<strong>Knowledge</strong>-Based S<strong>of</strong>tware Life Cycle and Architectures<br />
(Project VEGA No. 1/0350/08)<br />
REFERENCES<br />
[1] Elmasri,R., Navathe, S.B.: Fundamentals <strong>of</strong><br />
Database Systems, The Benjamin/Cummings<br />
Publishing Company, Inc., 1., 2. editions<br />
[2] Codd, E.F.: A <strong>Relational</strong> Model <strong>of</strong> Data for Large<br />
Shared Data Banks, Communications <strong>of</strong> the ACM,<br />
1970, p. 377–387<br />
[3] Codd, E.F.: The <strong>Relational</strong> Model for Database<br />
Management (Version 2 ed.). Addison Wesley<br />
Publishing Company, 1990<br />
[4] Matiaško, K.: Databázové systémy, EDIS –<br />
vydavateľstvo Žilinskej univerzity, 2002, ISBN 80-<br />
7100-968-7<br />
[5] Tóth, M.: Spracovanie relačnej algebry v systéme<br />
Moodle, Diploma thesis, Technical University,<br />
Košice, 2009<br />
[6] Tóth, M. (2007). SELECT Statement Processing in<br />
LMS Moodle, semestral project, Technical<br />
University, Košice.<br />
[7] Genči, J.: Some consideration about knowledge<br />
assessment, 8th Intenational Conference Virtual<br />
University VU'07, Bratislava, 13.-14. 12.2007,<br />
Bratislava, E-ACADEMIA SLOVACA, 2007, pp.<br />
237-240, ISBN 978-80-89316-09-0<br />
[8] Havlice, Z. (2002). Generovanie jazykových<br />
procesorov, Elfa, Kosice 2002, ISBN 80-89066-47-<br />
X.<br />
[9] Kollár, J., Havlice, Z. (2001). Technológia<br />
jazykových systémov, Elfa, Košice 2001, ISBN 80-<br />
89066-12-7.<br />
[10] Telepovská Henrieta: SQL STATEMENT<br />
KNOWLEDGE ASSESMENT, 6th International<br />
Conference on Emerging e-Learning Technologies<br />
and Applications, Conference Proceedings, (ICET<br />
2008) Stara Lesna, September 11 – 13, 2008,<br />
Kosice, elfa, s.r.o, 2008, str. 181-184, ISBN 978-<br />
80-8086-089-9<br />
[11] Moodle Documentation (2010).<br />
http://docs.moodle.org<br />
[12] Raadt, M., Dekeyeser, S., Lee, T.Y.: A System<br />
Employing Peer Review and Enhanced Computer<br />
Assisted Assessment <strong>of</strong> Querying Skills,
Informatics in Education, 2007, Vol. 6, No. 1, 163–<br />
178, Institute <strong>of</strong> Mathematics and Informatics,<br />
Vilnius,<br />
http://www.mii.lt/informatics_in_education/pdf/IN<br />
FE104.pdf<br />
[13] Sadiq, S., Orlowska, M., Sadiq, W., Lin, J.:<br />
SQLator – An Online SQL Learning Workbench,<br />
In ITiCSE '04 Proceedings <strong>of</strong> the 9th annual<br />
SIGCSE conference on Innovation and technology<br />
in computer science education, Leeds, UK, pp.<br />
223-227, ACM Digital Library, retrieved March<br />
2010,<br />
http://portal.acm.org/citation.cfm?id=1026487.100<br />
8055<br />
[14] Soler, J, Boada, I., Prados, F., Poch, J., Fabregat,<br />
R.: An Automatic Correction Tool for <strong>Relational</strong><br />
<strong>Algebra</strong> Queries, retrieved March 2010,<br />
http://bcds.udg.edu/publications.php?year=2007<br />
* Matus Toth graduated on Department <strong>of</strong> Computers and<br />
Informatics, Technical University <strong>of</strong> Kosice