12.11.2014 Views

Support of Relational Algebra Knowledge ... - Hornad - TUKE

Support of Relational Algebra Knowledge ... - Hornad - TUKE

Support of Relational Algebra Knowledge ... - Hornad - TUKE

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!