ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ ΣΧΕΔΙΑΣΜΟΣ ΒΑΣΕΩΝ ΔΕΔΟΜΕΝΩΝ ΕΡΓΑΣΤΗΡΙΟ 4 ΔΕΣΠΟΙΝΑ ΠΑΠΑΚΩΝΣΤΑΝΤΙΝΟΥ dpap@unipi.gr
ΣΥΝΕΧΕΙΑ SQL 2
3 ΑΣΚΗΣΗ 3 (1/3) Πίνακες Classes(class, type, country, numguns, bore, displacement) Ships(name, class, launched) Battles(name, date) Outcomes(ship, battle, result) Ερωτήματα a) Βρες τις χώρες (country), των οποίων τα πλοία έχουν τον μεγαλύτερο αριθμό πυροβόλων(numguns). b) Βρες τους τύπους (classes) των πλοίων, από τα οποία τουλάχιστον ένα έχει βυθιστεί σε μια μάχη. c) Βρες τα ονόματα των πλοίων με 16-inch οπή (bore). d) Βρες τις μάχες στις οποίες συμμετείχαν τα πλοία του τύπου Kongo. e) Βρες τα ονόματα των πλοίων, των οποίων ο αριθμός των πυροβόλων είναι ο μεγαλύτερος για τα πλοία με την ίδια οπή.
4 Πίνακες ΑΣΚΗΣΗ 3 (2/3) Classes(class, type, country, numguns, bore, displacement) Ships(name, class, launched) Battles(name, date) Outcomes(ship, battle, result) Λύσεις a) SELECT country FROM Classes WHERE numguns = (SELECT MAX(numGuns) from Classes); SELECT country FROM Classes WHERE numguns >= ALL (SELECT numguns from Classes); b) SELECT DISTINCT class FROM Ships WHERE name IN (SELECT ship FROM Outcomes WHERE result = sunk ); SELECT class FROM Ships WHERE EXISTS (SELECT * FROM Outcomes WHERE Ships.name = Outcomes.ship AND result = sunk );
5 Πίνακες ΑΣΚΗΣΗ 3 (3/3) Classes(class, type, country, numguns, bore, displacement) Ships(name, class, launched) Battles(name, date) Outcomes(ship, battle, result) Λύσεις c) SELECT name FROM Ships WHERE class IN (SELECT class from Classes where bore = 16); SELECT name FROM Ships, Classes WHERE Ships.class = Classes.class AND bore = 16; d) SELECT DISTINCT battle FROM Ships, Outcomes WHERE name = ship AND class = Kongo ; SELECT DISTINCT battle FROM Outcomes WHERE ship = ANY (SELECT name FROM Ships WHERE class = Kongo ); e) SELECT name FROM Ships, Classes AS C1 WHERE Ships.class = C1.class AND numguns = (SELECT MAX(numGuns) FROM Classes AS C2 WHERE C1.bore = C2.bore);
6 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
7 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
8 ΣΥΝΔΕΣΗ MySQL με PHP ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (1/3) Για να αποκτηθεί πρόσβαση σε μία ΒΔ, πρέπει να δημιουργηθεί σύνδεση με αυτή τη ΒΔ. Στην PHP η σύνδεση αυτή επιτυγχάνεται με την εντολή mysql_connect(). Η σύνταξη της εντολής αυτή είναι η εξής: mysql_connect (servername,username,password);, όπου servername: προσδιορίζει τον εξυπηρετητή, στον οποίο επιθυμείται η σύνδεση. Η default τιμή είναι "localhost:3306 ". username: προσδιορίζει το username, με το οποίο γίνεται η σύνδεση. Η default τιμή είναι το όνομα του χρήστη που έχει στην ιδιοκτησία του τη διαδικασία του εξυπηρετητή. password: προσδιορίζει το password με το οποίο γίνεται η σύνδεση. Η default τιμή είναι "".
9 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (2/3) ΣΥΝΔΕΣΗ MySQL με PHP(συνέχεια ) Παράδειγμα Στο παρακάτω παράδειγμα η σύνδεση τοποθετείται σε μια μεταβλητή ($con), για χρήση του στο script. Το τμήμα του κώδικα που αφορά στο "die" είναι αυτό που θα εκτελεστεί αν αποτύχει η σύνδεση: <?php $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('could not connect: '. mysql_error()); } // some code?>
10 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (3/3) ΣΥΝΔΕΣΗ MySQL με PHP(συνέχεια ) Τερματισμός της σύνδεσης Η σύνδεση κλείνει αυτόματα όταν τελειώνει το script. Για να τερματισθεί μια σύνδεση νωρίτερα χρησιμοποιείται η εντολή mysql_close(): <?php $con = mysql_connect("localhost","peter","abc123"); if (!$con) { die('could not connect: '. mysql_error()); } // some code mysql_close($con);?>
11 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (1/7) ΣΥΝΔΕΣΗ ORACLE με PHP Η PHP έχει διάφορες επεκτάσεις που επιτρέπουν εφαρμογές να χρησιμοποιούν την Oracle. Η επέκταση OCI8 (OCI8 Extension): είναι η προτεινόμενη για χρήση επέκταση. Περιλαμβάνεται στις εκδόσεις 3, 4, και 5 και 6 της PHP, ενώ είναι open source. Εγκατάσταση της επέκτασης PHP OCI8 Extension σε Windows Κατεβάζουμε το Apache HTTPD Server (http://httpd.apache.org/download.cgi) και το Windows PHP 5.2 zip package (http://www.php.net/downloads.php). Χρησιμοποιούμε την το default bundle αν επιθυμούμε να τρέξουμε την PHP ως Apache module.
12 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (2/7) ΣΥΝΔΕΣΗ ORACLE με PHP (συνέχεια) Εγκατάσταση της επέκτασης PHP OCI8 Extension σε Windows Εγκαθιστούμε PHP και Apache ακολουθώντας τις οδηγίες του PHP οδηγού για την εγκατάσταση σε Windows συστήματα (http://gr.php.net/install.windows). Ελέγχουμε αν η PHP δουλεύει κανονικά πριν προχωρήσουμε στα επόμενα βήματα. Εγκαθιστούμε την Oracle Database.
13 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (3/7) ΣΥΝΔΕΣΗ ORACLE με PHP (συνέχεια) Εγκατάσταση της επέκτασης PHP OCI8 Extension σε Windows (συνέχεια) Κατεβάζουμε την επέκταση OCI8 1.3 για την PHP 5.2 από το http://www.php.net/archive/2008.php#id2008-12-10-1). Το τρέχον πακέτο OCI8 1.3 για την PHP 5.2 είναι το εξής: php_oci8-1.3.5-5.2-win32-vc6-x86.zip, το οποίο περιλαμβάνει δύο dll αρχεία, τα php_oci8.dll και php_oci8_11g.dll (για oracle 11i). Αποσυμπιέζουμε το πακέτο και μεταφέρουμε τα δύο dll αρχεία στον κατάλογο όπου έχει εγκατασταθεί η PHP (π.χ. C:\php-5.2.9\ext).
14 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (4/7) ΣΥΝΔΕΣΗ ORACLE με PHP (συνέχεια) Εγκατάσταση της επέκτασης PHP OCI8 Extension σε Windows (συνέχεια) Αλλάζουμε τη σύνταξη στο php.ini και θέτουμε το extension_dir στον κατάλογο, όπου βρίσκονται τα αρχεία dll της επέκτασης PHP: extension_dir="c:\php-5.2.9\ext". Επίσης, στο αρχείο php.ini, θέτουμε την επέκταση OCI8 ως εξής: extension=php_oci8_11g.dll (στην περίπτωση που χρησιμοποιούμε την Oracle 11i. Αν χρησιμοποιούμε το Oracle 10.2 Instant Client, θέτουμε το extension ως εξής: extension=php_oci8.dll. Κάνουμε επανεκκίνηση στο Apache.
15 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (5/7) ΣΥΝΔΕΣΗ ORACLE με PHP (συνέχεια) Επιβεβαίωση της ορθής εγκατάστασης της επέκτασης Για να ελέγξουμε ότι η επέκταση έχει εγκατασταθεί σωστά, δημιουργούμε ένα απλό PHP script μέσα στο κατάλογο Apache: <?php phpinfo();?> Φορτώνουμε το script σε έναν browser, παραδείγματος χάριν "http://localhost/phpinfo.php".
16 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (6/7) ΣΥΝΔΕΣΗ ORACLE με PHP (συνέχεια) Σύνδεση με την Oracle Η αυθεντικοποίηση (authentication) της Oracle και η πληροφορία σχετικά με τη ΒΔ περιέχεται στην εντολή oci_connect(). Ένα παράδειγμα αφορά στη σύνδεση στο HR σχήμα της MYDB υπηρεσίας ΒΔ που τρέχει στο mymachine: $c = oci_connect('hr', 'hr_password', '//mymachine.mydomain/mydb'). Σε καινούριες ΒΔ ο HR χρήστης μπορεί να χρειαστεί να ξεκλειδωθεί και να της δοθεί ένα password. Αυτό μπορεί να γίνει στην SQL*Plus με το να συνδεθούμε ως χρήστης SYSTEM και να εκτελέσουμε το εξής: ALTER USER username IDENTIFIED BY new_password ACCOUNT UNLOCK;
17 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ PHP (7/7) ΣΥΝΔΕΣΗ ORACLE με PHP (συνέχεια) Χρήση της Oracle Ένα παράδειγμα της χρήσης της Oracle είναι το απλό script, testoci.php. Προσαρμόζουμε τις λεπτομέρειες της σύνδεσης στη δική μας ΒΔ και το φορτώνουμε σε έναν browser. Το συγκεκριμένο παράδειγμα θεωρεί ότι όλοι οι πίνακες βρίσκονται κάτω από την κατοχή του χρήστη HR: <?php $conn = oci_connect('hr', 'hr_password', 'mymachine.mydomain/mydb'); $query = 'select table_name from user_tables'; $stid = oci_parse($conn, $query); oci_execute($stid, OCI_DEFAULT); while ($row = oci_fetch_array($stid, OCI_ASSOC)) { foreach ($row as $item) { echo $item." "; } echo "<br>\n"; } oci_free_statement($stid); oci_close($conn);?>
18 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
19 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
20 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ JAVA (1/2) ΣΥΝΔΕΣΗ MySQL με JAVA (με χρήση JDBC) Για αυτή τη σύνδεση είναι απαραίτητη η ύπαρξη ενός λογαριασμού στην MySQL ΒΔ. Για να δημιουργήσουμε λογαριασμό, συνδεόμαστε με την MySQL ΒΔ ως root και κατόπιν εκτελούμε την ακόλουθη εντολή: mysql> GRANT ALL PRIVILEGES ON *.* TO username@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
21 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ JAVA (2/2) ΣΥΝΔΕΣΗ MySQL με JAVA (με χρήση JDBC) (συνέχεια..) Connection connection = null; try { // Load the JDBC driver String drivername = "org.gjt.mm.mysql.driver"; // MySQL MM JDBC driver Class.forName(driverName); // Create a connection to the database String servername = "localhost"; String mydatabase = "mydatabase"; String url = "jdbc:mysql://" + servername + "/" + mydatabase; // a JDBC url String username = "username"; String password = "password"; connection = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException e) { // Could not find the database driver } catch (SQLException e) { // Could not connect to the database }
22 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ JAVA (1/2) ΣΥΝΔΕΣΗ ORACLE με JAVA Βήμα 1 - Εισάγουμε το πακέτο JAVA : import java.sql.*; Βήμα 2 - Καταχωρούμε τον driver με την ακόλουθη εντολή: Class.For.Name("sun.jdbc.odbc.JdbcOdbcDriver"); Βήμα 3 - Δημιουργούμε τη σύνδεση με τη ΒΔ: Connection conn DriverManager.getConnection( main protocol:sub protocol:type4driver:name of oracle server:default port number(1521):service name username password ); Άρα jdbc:oracle:thin:[<user>/<password>]@//<host>[:<port>]/<service> π.χ. Connection conn = DriverManager.getConnection( "jdbc:oracle:thin:@mylaptop:1521:oradb", // URL "budiraharjo", // username "SDDNBandung" // password );
23 ΣΥΝΔΕΣΗ ΒΔ ΜΕΣΩ JAVA (2/2) ΣΥΝΔΕΣΗ ORACLE με JAVA (συνέχεια ) Βήμα 4 - Ανοίγουμε τη σύνδεση: cn.open(); Βήμα 5 - Για να εισάγουμε δεδομένα: PreparedStatement ps cn.preparestatement("insert into <table name> values(????)"); ps.setint(1 Integer.parseInt(t1.setText())); ps.setstring(2 t2.settext()); Βήμα 6 - Εκτελούμε την εντολή: ps.executeupdate(); Βήμα 7 - Τερματίζουμε τη σύνδεση: cn.close(); ΠΡΟΣΟΧΗ: Το βήμα 7 είναι μόνο για εισαγωγή δεδομένων. Όταν επιθυμούμε ανάκτηση ακολουθούμε την ίδια μεθοδολογία μέχρι το βήμα 4 κι έπειτα γράφουμε την ακόλουθη εντολή: ResultSet rs;
24 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
25 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
26 ΑΣΚΗΣΗ 1 ΔΙΑΧΕΙΡΙΣΗ ΒΙΒΛΙΩΝ ΒΙΒΛΙΟΘΗΚΗΣ (1/7) Μια βιβλιοθήκη Πανεπιστημίου επιθυμεί να κατασκευάσει βάση δεδομένων για τα βιβλία που διαθέτει. Κάθε βιβλίο υπάρχει στη βιβλιοθήκη σε ένα ή περισσότερα ανάτυπα. Κάθε βιβλίο καταχωρείται σε μια θεματική περιοχή και μεταξύ των στοιχείων που καταγράφονται είναι: ISBN, τίτλος, συγγραφείς, εκδοτικός οίκος, ημερομηνία πρώτης, δεύτερης, κτλ. έκδοσης, περίληψη περιεχομένου (κείμενο), έτος απόκτησης. Να κατασκευαστεί ένα μοντέλο δεδομένων που να ικανοποιεί τις απαιτήσεις της βιβλιοθήκης για κατασκευή μητρώου των βιβλίων που διαθέτει και για την ανάκτηση τους ανά κωδικό, ή/και τίτλο, ή/και θεματική περιοχή, ή/και συγγραφέα. Επιπλέον, να καθίσταται δυνατή η ανάκτηση των βιβλίων μέσω λέξεων-κλειδιά των περιλήψεων τους.
ΑΣΚΗΣΗ 1 ΔΙΑΧΕΙΡΙΣΗ ΒΙΒΛΙΩΝ ΒΙΒΛΙΟΘΗΚΗΣ (2/7) 27
28 ΑΣΚΗΣΗ 1 ΔΙΑΧΕΙΡΙΣΗ ΒΙΒΛΙΩΝ ΒΙΒΛΙΟΘΗΚΗΣ (3/7) Συσχετίσεις Μια βιβλιοθήκη Πανεπιστημίου επιθυμεί να κατασκευάσει βάση δεδομένων για τα βιβλία που διαθέτει. Κάθε βιβλίο υπάρχει στη βιβλιοθήκη σε ένα ή περισσότερα ανάτυπα. Κάθε βιβλίο καταχωρείται σε μία θεματική περιοχή και μεταξύ των στοιχείων που καταγράφονται είναι: ISBN, τίτλος, συγγραφείς, εκδοτικός οίκος, ημερομηνία πρώτης, δεύτερης, κτλ. έκδοσης, περίληψη περιεχομένου (κείμενο), έτος απόκτησης.
29 ΑΣΚΗΣΗ 1 ΔΙΑΧΕΙΡΙΣΗ ΒΙΒΛΙΩΝ ΒΙΒΛΙΟΘΗΚΗΣ (4/7) Ανάλυση Απαιτήσεων - Παραδοχές Το μοντέλο αυτό περιγράφει την διαδικασία καταχώρησης βιβλίων στην βιβλιοθήκη ενός πανεπιστημίου. Κάθε βιβλίο (BOOK) καταχωρείται σε μία θεματική περιοχή (SUBJECT). Μία θεματική περιοχή (SUBJECT) έχει ένα ή περισσότερα βιβλία (BOOK). Κάθε βιβλίο (BOOK) εκδίδεται από έναν εκδοτικό οίκο (PUBLISHER). Ένα βιβλίο (BOOK) έχει μία ή περισσότερες εκδόσεις (EDITION). Κάθε έκδοση ενός βιβλίου (EDITION) μπορεί να υπάρχει σε ένα ή περισσότερα αντίτυπα (COPY). Κάθε βιβλίο (BOOK) αντιστοιχεί σε έναν ή περισσότερους συγγραφείς (AUTHOR).
30 ΑΣΚΗΣΗ 1 ΔΙΑΧΕΙΡΙΣΗ ΒΙΒΛΙΩΝ ΒΙΒΛΙΟΘΗΚΗΣ (5/7) Μοντέλο Οντοτήτων Συσχετίσεων (ER) SUBJECT PUBLISHER CORRESPONDS_T O PUBLISHES BOOK HAS IS_WRITEN_BY EDITION AUTHOR HAS_COPY COPY
31 ΑΣΚΗΣΗ 1 ΔΙΑΧΕΙΡΙΣΗ ΒΙΒΛΙΩΝ ΒΙΒΛΙΟΘΗΚΗΣ (6/7) Σχεσιακό Μοντέλο SUBJECT PUBLISHER SUBJECT_CODE smallint PUBLISHER_CODE smallint SUBJECT_DESCR varchar(300) PUBLISHER_NAME varchar(100) SUBJECT_CODE = SUBJECT_CODE BOOK BOOK_ISBN SUBJECT_CODE PUBLISHER_CODE BOOK_TITLE BOOK_ABSTRACT BOOK_RECEIVE_DATE varchar(50) smallint smallint varchar(300) varchar(3000) datetime PUBLISHER_CODE = PUBLISHER_CODE BOOK_ISBN = BOOK_ISBN BOOK_ISBN = BOOK_ISBN EDITION BOOK_ISBN varchar(50) EDITION_NO smallint EDITION_DATE datetime AUTHOR BOOK_ISBN varchar(50) AUTHOR_SURNAME varchar(25) AUTHOR_NAM E varchar(15) AUTHOR_ADDRESS varchar(200) BOOK_ISBN = BOOK_ISBN EDITION_NO = EDITION_NO COPY BOOK_ISBN EDITION_NO COPY_SN COPY_AVAILIABLE varchar(50) smallint smallint char(1)
32 ΑΣΚΗΣΗ 1 ΔΙΑΧΕΙΡΙΣΗ ΒΙΒΛΙΩΝ ΒΙΒΛΙΟΘΗΚΗΣ (7/7) Το σχεσιακό μοντέλο μπορούμε να το αναπαραστήσουμε με τους πίνακες, ως εξής: SUBJECT (SUBJECT _CODE, SUBJECT_DESCR) PUBLISHER (PUBLISHER_CODE, PUBLISHER_NAME) BOOK (BOOK_ISBN, SUBJECT_CODE, PUBLISHER_CODE, BOOK_TITLE, BOOK_ABSTRACT, BOOK_RECEIVE_DATE) EDITION (EDITION_NO, BOOK_ISBN, EDITION_DATE) AUTHOR (AUTHOR_SURNAME, BOOK_ISBN, AUTHOR_NAME, AUTHOR_ADDRESS) COPY (COPY_SN, BOOK_ISBN, COPY_AVAILABLE)
33 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
34 ΠΕΡΙΕΧΟΜΕΝΑ Σύνδεση ΒΔ μέσω PHP (PHP Database Connectivity) Σύνδεση ΒΔ μέσω JAVA (JAVA Database Connectivity) Άσκηση 1 Άσκηση 2
ΑΣΚΗΣΗ 2 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΕΠΙΔΟΣΕΩΝ ΦΟΙΤΗΤΩΝ (1/6) 35 Η διαδικασία παρακολούθησης των επιδόσεων των φοιτητών στο μάθημα των Βάσεων Δεδομένων είναι η ακόλουθη: για κάθε ακαδημαϊκό έτος και για κάθε φοιτητή καταγράφονται οι παρουσίες του στα μαθήματα και οι θεωρητικές εργαστηριακές ασκήσεις που παραδίδει. Η βαθμολογία κάθε φοιτητή στο μάθημα είναι συνάρτηση των ασκήσεων, των παρουσιών και της τελικής εξέτασης. Να κατασκευαστεί μοντέλο οντοτήτων σχέσεων για τη βάση δεδομένων του συστήματος παρακολούθησης των επιδόσεων των φοιτητών και να μετατραπεί σε σχεσιακό σχήμα.
ΑΣΚΗΣΗ 2 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΕΠΙΔΟΣΕΩΝ ΦΟΙΤΗΤΩΝ (2/6) 36
ΑΣΚΗΣΗ 2 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΕΠΙΔΟΣΕΩΝ ΦΟΙΤΗΤΩΝ (3/6) 37 Ανάλυση Απαιτήσεων - Παραδοχές Το μοντέλο αυτό περιγράφει τη διαδικασία παρακολούθησης των επιδόσεων των φοιτητών στο μάθημα Βάσεων Δεδομένων. Για κάθε φοιτητή (STUDENT) καταγράφονται οι βαθμοί του στο μάθημα (GRADE). Κάθε φοιτητής μπορεί να παραδώσει μία ή περισσότερες θεωρητικές ασκήσεις (EXERCISE) και εργαστηριακές ασκήσεις (LAB). Η αντιστοιχία αυτή καταχωρείται στο (ST_EXE) και (ST_LAB) αντίστοιχα μαζί με το βαθμό που πήρε σε κάθε άσκηση. Οι παρουσίες του κάθε φοιτητή καταχωρούνται στο (PRESENCE). Η βαθμολογία του φοιτητή είναι συνάρτηση των ασκήσεων, των παρουσιών του και της τελικής εξέτασης.
38 ΑΣΚΗΣΗ 2 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΕΠΙΔΟΣΕΩΝ ΦΟΙΤΗΤΩΝ (4/6) Μοντέλο Οντοτήτων Συσχετίσεων (ER) STUDENT GRADE ST UDENTS_GRADE CORRESPONDS_T O CORRESPONDS_T O HAS ST_EXE PRESENCE ST_LAB EXERSICE LAB EXERSICE LAB
39 ΑΣΚΗΣΗ 2 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΕΠΙΔΟΣΕΩΝ ΦΟΙΤΗΤΩΝ (5/6) Σχεσιακό Μοντέλο STUDENT STUDENT_CODE STUDENT_NAME STUDENT_SURNAM E STUDENT_ADMIN smallint varchar(15) varchar(25) varchar(25) STUDENT_CODE = STUDENT_CODE GRADE EXAM_CODE STUDENT_CODE EXAM_DATE EXAM_GRADE TOT_GRADE smallint smallint datetime smallint smallint STUDENT_CODE = STUDENT_CODE STUDENT_CODE = STUDENT_CODE STUDENT_CODE = STUDENT_CODE ST_EXE STUDENT_CODE EXERSICE_CODE smallint smallint PRESENCE LECT_CODE smallint STUDENT_CODE smallint LECT_NAME varchar(50) ST_LAB STUDENT_CODE smallint LAB_CODE smallint LAB_GRADE smallint LAB_DATE timestamp LAB_WEIGHT smallint EXERSICE_CODE = EXERSICE_CODE LAB_CODE = LAB_CODE EXERSICE EXERSICE_CODE smallint EXERCISE_DESC varchar(200) EXERCISE_DATE datetime EXERCISE_WEIGHT smallint LAB LAB_CODE smallint LAB_DESCR varchar(50)
ΑΣΚΗΣΗ 2 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΕΠΙΔΟΣΕΩΝ ΦΟΙΤΗΤΩΝ (6/6) 40 Το σχεσιακό μοντέλο μπορούμε να το αναπαραστήσουμε με τους πίνακες, ως εξής: STUDENT (STUDENT_CODE, STUDENT_NAME, STUDENT_SURNAME, STUDENT_ADMIN) GRADE (EXAM_CODE, STUDENT_CODE, EXAM_DATE, EXAM_GRADE, TOT_GRADE) PRESENCE (LECT_CODE, STUDENT_CODE, LECT_NAME) LAB (LAB_CODE, LAB_DESCR) EXERCISE (EXERCISE_CODE, EXERCISE_DESCR, EXERCISE_DATE, EXERCISE_WEIGHT) ST_EXE (STUDENT_CODE, EXERCISE_CODE) ST_LAB (STUDENT_CODE, LAB_CODE, LAB_GRADE, LAB_DATE, LAB_WEIGHT)
ΕΥΧΑΡΙΣΤΩ ΠΟΛΥ! 41