Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

DB

Îåêßíçóå áðü ôï ìÝëïò parpel. Τελευταία δημοσίευση από το μέλος cap στις 22-12-2008, 12:54. Υπάρχουν 14 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-12-2008, 01:00 47043

    DB

    Καλησπέρα!!! Έχω μία εργασία για την σχολή, στην οποία πρέπει να δημιουργήσω μια βάση δεδομένων με εργασίες.
    Νομίζω πως οι πίνακες θα πρέπει να είναι ο φοιτητής που αναλαμβάνει την εργασία, ο καθηγητής που την αναθέτει κ η εργασία

    κ  πως γενικότερα η βαση κανονικοποιημένη θα είναι κάπως έτσι:
    Φοιτητής(ΑΜ, Όνομα, επώνυμο, Διεύθυνση, Ε-mail, Κωδικός_εργασίας)
    Καθηγητής(Κωδικός_καθηγητή, Όνομα, επώνυμο, Τηλέφωνο γραφείου, E-mail)
    Εργασία(Κωδικός_εργασίας, Τίτλος, Έτος, Είδος, Βαθμός, Αρχείο, Περίληψη, ΑΜ_φοιτητη, Κωδικός_καθηγητή)

    Έχω δίκιο ή όχι; Νομίζεται πως θα πρέπει να συμπληρώσω ή να διαφοροποιήσω κάτι;;;;
    Ξέρει μήπως και κανείς ποιά θα είναι τα όρια;;;;
    Αρχικά νόμιζα πως εννοεί τις απαιτήσεις, αλλα μου τις ζήτησε πρόσθετα...
  •  21-12-2008, 13:23 47045 σε απάντηση της 47043

    Απ: DB

    Όρια? Τί εννοείς όρια? Υπάρχουν check constraints, υπάρχουν foreign key constraints, αλλά όρια δεν υπάρχουν στις βάσεις. Ας υποθέσουμε όμως ότι ο καθηγητής εννοεί ένα από τα δύο και απλά μετέφρασε π.χ. το constraints σε όρια. Κάτι μου λέει ότι δεν παρακολούθησες το συγκεκριμένο μάθημα κι έτσι δεν ξέρεις τί ακριβώς εννοεί. Από την άλλη, είναι γενικώς σπαστικό να πρέπει να κάνεις αντίστροφη μετάφραση κάθε φορά που κάποιος εφευρίσκει μία νέα μετάφραση ενός όρου που χρησιμοποιείται αυτούσιος παγκοσμίως. Ευτυχώς, μόλις πάρεις πτυχίο δεν θα χρειαστεί να ξαναμαντέψεις τί εννοεί κάποιος όταν γράφει κάτι στα ελληνικά αντί για τα αγγλικά.

    Κατά πάσα πιθανότητα εννοεί τα foreign key constraints, δηλαδή ότι ο AM_Φοιτητή στην εργασία συνδέεται με το AM του φοιτητή.

    Όσον αφορά το τί πρέπει να αλλάξεις ... σκοπός της εργασίας είναι να τα βρεις εσύ αυτά για να τα μάθεις, όχι να στα πούμε εμείς. Άσε που χωρίς την εκφώνηση της άσκησης, δεν μπορούμε να ξέρουμε τί μπορεί να χρειάζεται επιπλέον. Αν έχει ζητήσει π.χ. ο καθηγητής να βάλεις και τη βιβλιογραφία της εργασίας? Κάθε φοιτητής παίρνει διαφορετικη εργασία ή όλοι πέρνουν την ίδια? Βέβαια, μπορεί ο καθηγητής να άφησε επίτηδες ανοικτή την ερώτηση για να δει τί θα σκεφτεί ο καθένας και πως θα το σχεδιάσει.

    Όπως και να έχει, να σε βοηθήσουμε αν υπάρχει κάποια ασάφεια ή όρος δυσνόητος, αλλά δεν μπορούμε να κάνουμε τη δουλειά που σου έχει ανατεθεί.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-12-2008, 13:34 47046 σε απάντηση της 47043

    Απ: DB

    Συνηθίζεται να μην χρησιμοποιούμε Κωδικούς που γνωρίζει ο τελικός χρήστης ως κλειδιά πινάκων ή foreign keys. Οπότε μια πρώτη βελτίωση μπορεί να είναι να προσθέσεις μια στήλη ID τύπου int στους 3 πίνακες. Ως αποτέλεσμα ο πίνακας Εργασία να έχει ID_φοιτητή, ID_καθηγητή αντί για τις 2 τελευταίες στήλες που έχεις. Αυτό γίνεται γιατί οι κωδικοί που γνωρίζει ο χρήστης μπορεί να αλλάξουν κάποια στιγμή ή να επαναχρησιμοποιηθούν. π.χ. κάποιες σχολές ξέρω ότι επαναχρησιμοποιούν τους ΑΜ μετά από χρόνια, οπότε με το σχήμα που έχεις παλιές εργασίες θα φαίνονται ανατεθημένες σε λάθος φοιτητές.
    Επίσης δεν συνηθίζεται να χρησιμοποιούμε ελληνικά για την ονοματολογία, αλλά σε μια εργασία ίσως δεν πειράζει πολύ. Εξαρτάται μάλλον από τον καθηγητή σου και το τι θέλει να δει στη δουλειά σου.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  21-12-2008, 13:43 47047 σε απάντηση της 47043

    Απ: DB

    parpel:
    Ξέρει μήπως και κανείς ποιά θα είναι τα όρια;;;;
    Αρχικά νόμιζα πως εννοεί τις απαιτήσεις, αλλα μου τις ζήτησε πρόσθετα...


    Τι είναι τα όρια (στη γλώσσα του καθηγητή σου), τι οι απαιτήσεις, και τι είναι αυτό που σου ζήτησε πρόσθετα;

    @papadi: Δημήτρη, είθισται όπως ξέρεις στις εργασίες να μην χρησιμοποιούνται surrogate keys γιατί οι καθηγητές θέλουν να εξοικειώσουν τους φοιτητές με την έννοια του primary key και όχι να τους δώσουν την εικόνα μιας ΒΔ του πραγματικού κόσμου. Υπό αυτό το πρίσμα, οκ, το ΑΜ αρκεί για να γίνει κατανοητή η έννοια, αν και συμφωνώ απόλυτα με τα όσα λες.




    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  21-12-2008, 23:52 47064 σε απάντηση της 47045

    Απ: DB

    Παναγιώτης Καναβός:

    Αν έχει ζητήσει π.χ. ο καθηγητής να βάλεις και τη βιβλιογραφία της εργασίας? Κάθε φοιτητής παίρνει διαφορετικη εργασία ή όλοι πέρνουν την ίδια? Βέβαια, μπορεί ο καθηγητής να άφησε επίτηδες ανοικτή την ερώτηση για να δει τί θα σκεφτεί ο καθένας και πως θα το σχεδιάσει.



    Η βιβλιογραφία δεν θα υπάρχει.
    Κάθε φοιτητής θα έχει διαφορετική εργασία. Υπαρχει βέβαι η δυνατότητα συνεργασίας 2 ατόμων.

    Δεν είπα να κάνετε την δουλειά που έχω.
    Ρωτησα απλά αν αυτό που έχω γράψει σας φαίνεται σωστό ή όχι κ αν ξέρει κανείς τί είναι αυτά τα πημαδιασμένα τα όρια που ανλεφερε ο καθηγητής.

    Ευχαριστώ πάντως για τον χρόνο ολων...
  •  22-12-2008, 00:19 47066 σε απάντηση της 47043

    Απ: DB

    parpel:
    Φοιτητής(ΑΜ, Όνομα, επώνυμο, Διεύθυνση, Ε-mail, Κωδικός_εργασίας)
    Καθηγητής(Κωδικός_καθηγητή, Όνομα, επώνυμο, Τηλέφωνο γραφείου, E-mail)
    Εργασία(Κωδικός_εργασίας, Τίτλος, Έτος, Είδος, Βαθμός, Αρχείο, Περίληψη, ΑΜ_φοιτητη, Κωδικός_καθηγητή)

    Έχω δίκιο ή όχι;


    Εγώ θα έβγαζα το πεδίο κωδικός_εργασίας από τον πίνακα Φοιτητής. Το πεδίο ΑΜ_Φοιτητή στον πίνακα της εργασίας αρκεί για να ορίσει σε ποιόν φοιτητή ανήκει η εργασία. Οχι μόνο αυτό, αλλά αν αφήσεις το πεδίο κωδικός_εργασίας στον πίνακα Φοιτητής τότε έχεις να συντηρείς δύο τιμές για κάθε δίδυμο εργασίας-φοιτητή, στους δύο πίνακες, οι οποίες θα πρέπει να βρίσκονται σε συμφωνία, ενώ ένα foreign key στον ένα από τους δύο πίνακες αρκεί.

    Εχε υπόψη σου οτι αν επέλεγες να αφήσεις το πεδίο Κωδικός_εργασίας στον πίνακα Φοιτητής και αφαιρούσες το πεδίο ΑΜ_Φοιτητή από τον πίνακα Εργασία, προεξοφλούσες οτι κάθε φοιτητής θα μπορεί να έχει το πολύ μία εργασία. (null τιμή για καμία εργασία, ή μια τιμή επάνω στο record του φοιτητή για μια εργασία). Από τα στοιχεία του πίνακα Εργασία (έτος, είδος) βγαίνει έμμεσα το συμπέρασμα οτι κάθε φοιτητής μπορεί να έχει παραπάνω από μία εργασίες, ακριβώς όπως κάποιος καθηγητής μπορεί να δίνει παραπάνω από μία εργασίες.

    Σοφά επιλέγεται ως κλειδί ο Κωδικός_Εργασίας στον πίνακα Εργασία και όχι το compound AM_Φοιτητή + Κωδικός_καθηγητή, μια και ο συνδυασμός αυτός μπορεί να υπάρξει περισσότερες από μια φορές (ένας φοιτητής μπορεί να έχει περισσότερες από μία εργασίες από τον ίδιο καθηγητή). Ισως, αν υπάρξει η ανάγκη για σύνθετο πρωτεύον κλειδί, να πρέπει να συμπεριληφθούν και άλλα πεδία σε αυτό (έτος+είδος;)


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  22-12-2008, 00:45 47067 σε απάντηση της 47046

    Απ: DB

    Δημήτρη, αυτό που λες δεν ισχύει ακριβώς έτσι. Είναι λάθος να χρησιμοποιεί κανείς πεδία τα οποία έχουν κάποια σημασία για την επιχείρηση ή τη σχολή ως κλειδιά, γιατί αυτή μπορεί να αλλάξει με περίεργους τρόπους. Αυτό όμως δεν σημαίνει ότι μόνο κρυφά πεδία μπορούν να είναι κλειδιά. Ένα πεδίο όπως ο Αριθμός Μητρώου, άνετα μπορεί να χρησιμοποιηθεί γιατί κατά κανόνα .... προέρχεται από κλειδί κάποιας βάσης! Αν το πεδίο έχει περίεργους κανόνες, όπως η επαναχησιμοποίηση που αναφέρεις, δεν πρέπει να χρησιμοποιηθεί. Αν όμως υπάρχει ένα πεδίο το οποίο είναι πάντα μοναδικό και δεν αλλάζει, άνετα μπορεί να χρησιμοποιηθεί ως κλειδί.

    Τα κλειδιά τα οποία υπάρχουν ήδη στις οντότητες τις οποίες αποθηκεύουμε στη βάση, και τα οποία γνωρίζει ο τελικός χρήστης, ονομάζονται natural keys. Τα τεχνητά πεδία, τα οποία φτιάχνουμε εμείς αν δεν υπάρχουν κατάλληλα natural keys ονομάζονται artificial keys. Αν υπάρχει ένα natural key το οποίο μας κάνει, δεν υπάρχει λόγος να δημιουργήσουμε ένα artificial key. Για παράδειγμα, το ISBN ενός βιβλίου είναι μοναδικό οπότε δεν υπάρχει λόγος να δημιουργούμε νέο κλειδί απλά και μόνο επειδή το ISBN είναι ορατό στο χρήστη.

    Για όσους ενδιαφέρονται, μία καλή περιγραφή των διαφόρων κλειδιών δίνει ο Joe Celko στο άρθρο Keys and History.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-12-2008, 01:02 47069 σε απάντηση της 47067

    Απ: DB

    Παναγιώτης Καναβός:
    Δημήτρη, αυτό που λες δεν ισχύει ακριβώς έτσι.

    Δεν καταλαβαίνω τι είπα διαφορετικό από σένα και λες ότι δεν ισχύει ακριβώς έτσι. Αυτό που είπα είναι ότι "δεν συνηθίζεται". Αυτό που έκανες είναι να περιγράψεις με περισσότερη λεπτομέρεια κάποια πράγματα. Σε ευχαριστούμε.

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  22-12-2008, 01:21 47070 σε απάντηση της 47066

    Απ: DB

    Εγώ πάλι, επειδή η εργασία γίνεται assign στο φοιτητή, αντί να βγάλω τον κωδικό εργασίας από τον φοιτητή, θα έβγαζα το ΑΜ_Φοιτητή από τον πίνακα της εργασίας. Με το ίδιο σκεπτικο, ο καθηγητής ορίζει την εργασία, οπότε καλώς ο κωδικός του συμπεριλαβάνεται στον πίνακα 'Εργασία'. Οπότε, με τον κωδικό εργασίας στον πίνακα του φοιτητή μπορούμε να βρούμε εύκολα τον καθηγητή που την έχει αναθέσει.

    Ουφ! Έχω αϋπνίες σήμερα κι αισθάνομαι ότι κάνω κατάχρηση του forum!


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  22-12-2008, 01:28 47071 σε απάντηση της 47070

    Απ: DB

    Ναι, απλά όπως προείπα έτσι περιορίζεις τις εργασίες σε 0 ως 1 ανά φοιτητή. Η ευκολία στην εύρεση είναι σχετική, μια και ακόμα και στον πίνακα της εργασίας να ήταν το ΑΜ_Φοιτητή η εύρεση του καθηγητή που έχει αναθέσει την εργασία είναι και πάλι εύκολη. Ολα εξαρτώνται από τις προδιαγραφές βέβαια.


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  22-12-2008, 01:39 47072 σε απάντηση της 47071

    Απ: DB

    Τότε οι πίνακες πρέπει να γίνουν τέσσερις. Το assignment της εργασίας δεν πρέπει να γίνεται στον πίνακα των φοιτητών.

    parpel:

    Φοιτητής(ΑΜ, Όνομα, επώνυμο, Διεύθυνση, Ε-mail, Κωδικός_εργασίας)
    Καθηγητής(Κωδικός_καθηγητή, Όνομα, επώνυμο, Τηλέφωνο γραφείου, E-mail)
    Εργασία(Κωδικός_εργασίας, Τίτλος, Έτος, Είδος, Βαθμός, Αρχείο, Περίληψη, ΑΜ_φοιτητη, Κωδικός_καθηγητή)

    Συγνώμη, αλλά είναι και η ώρα δύσκολη. Έτσι, όπως είναι, αν παραμείνει το ΑΜ του φοιτητή στον πίνακα της εργασίας, αφού ο κωδικός της εργασίας είναι το PK, ούτως ή αλλιώς δεν μπορεί να ανατεθεί η ίδια εργασία σε άλλο φοιτητή στον πίνακα 'Εργασία'. Συνεπώς, πρέπει να δημιουργηθεί κι άλλος πίνακας π.χ. 'Ανάθεση Εργασιών' με σύνθετο PK (Κωδικός Εργασίας, ΑΜ_Φοιτητή).


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  22-12-2008, 01:50 47074 σε απάντηση της 47072

    Απ: DB

    Για να γίνουν 4 οι πίνακες, θα πρέπει να υπάρχει εκ των προδιαγραφών δυνατότητα μια εργασία να ανατίθεται από κοινού σε περισσότερους από έναν φοιτητές (η/και να δίνεται από περισσότερους από έναν καθηγητές), συνεπώς θα είχαμε 3 πίνακες με τις οντοτητες (εργασία - φοιτητής - καθηγητής) και ένα junction table που θα κρατούσε τις "συμμετοχές".


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  22-12-2008, 01:57 47078 σε απάντηση της 47074

    Απ: DB

    Η αλήθεια είναι ότι αυτό δεν ξεκαθαρίζεται στο αρχικό post και το σχόλιό μου βασίστηκε στην "φοιτητική" μου εμπειρία όπου μια εργασία ανατίθεται σε περισσότερους του ενός φοιτητές. Είναι αυτό που λέμε: "Κρίνεις εξ' ιδίων τα αλλότρια". Αυτό έπαθα. Όντως κάτι τέτοιο μπορεί να μην ισχύει στο αρχικό πρόβλημα. Τι σου κάνουν τα βιώματα καμιά φορά, ε;
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  22-12-2008, 12:48 47082 σε απάντηση της 47043

    Απ: DB

    Να δώσω και εγώ τον οβολό μου. Γενικά δεν είναι καλή πρακτική να έχεις 2 πίνακες για Φοιτητές - καθηγητές. Μια κοινή πρακτική που γενικά ισχύει σε εμπορικές εφαρμογές είναι ένας και ενιαίος πίνακας των συναλλασσομένων.

    Δηλαδή εκεί θα κρατάς τα στοιχεία για κάθε πρόσωπο και θα τα δέσεις με ένα πίνακα τύπο συναλλασσομένου που θα κρατάς την ιδιότητα του κάθε προσώπου. Αυτό το σενάριο μπορεί να σου φαίνεται άσκοπο τώρα αλλά είναι σίγουρο πως θα το συναντήσεις σίγουρα σε εμπορικές εφαρμογές και καλό θα ήταν να το τηρήσεις. 

    Σκέψου το σενάριο να έχεις και έναν μεταπτυχιακό που θα επιβλέπει την εργασία. Τι θα κάνεις θα βάλεις και άλλο πίνακα. Ενώ με τον τύπο συναλλασσόμενου καθαρίζεις.  

     


    Manos
  •  22-12-2008, 12:54 47083 σε απάντηση της 47082

    Απ: DB

    Σωστό αυτό μεν, αλλά οι απαιτήσεις της συγκεκριμένης εργασίας μπορεί να ορίζουν την ύπαρξη δύο διαφορετικών οντοτήτων για το συγκεκριμένο θέμα, λόγω και των διαφορετικών πεδίων που χαρακτηρίζουν κάθε οντότητα. Στόχος του καθηγητή είναι συνήθως να δει πόσο καλά μπορεί ο φοιτητής να ορίσει τα κλειδιά και τις σχέσεις μεταξύ των οντοτήτων, οι οποίες δίνονται λίγο - πολύ "μασημένες".


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems