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

 

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

Βαση δεδομένων για λεξικό

Îåêßíçóå áðü ôï ìÝëïò paris171. Τελευταία δημοσίευση από το μέλος cap στις 15-01-2007, 12:15. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-12-2006, 18:42 22761

    Βαση δεδομένων για λεξικό

        Γεια σας παιδια κ Χρονια Πολλα!!

    Αυτο που θελω να φτιαξω ειναι ενα ελληνο-ισπανικό κ ισπανο-ελληνικό λεξικό σε ένα πρόγραμμα.
    Το interface το εχω φτιάξει σχεδόν με VS.NET κ τωρα εχω προβληματιστεί με τη βαση δεδομενων...

    Η σχεση μεταξυ των ελληνικών κ των ισπανικων λεξεων ειναι μ:ν κατι που με παιδευει....

    Θυμαμαι τον καλο μου δασκαλο που μας ελεγε οτι αν εχουμε μια μ:ν σχεση βαζουμε μια επιλεον
    οντοτητα στη μεση κ απο μ:ν γινεται 1:μ - ν:1 αλλα δεν ξερω πως να το χρησιμοποιήσω αυτο
    στην προκειμένη

    Εχω σκεφτει δυο τροπους οργανωσης της βασης οποθ και οι δυο ειναι χαλια!!
    -Ο πρωτος ειναι να υπαρχει ενας πινακας με μια λεξη στα ισπανικα κ απο διπλα 5 (πχ) θεσεις για τις
    μεταφρασεις στα ελληνικά πραγμα που σημαινει οτι με αυτη την οργανωση η αναζητηση ενω η αναζητηση
    μιας ισπανικης λεξης θα γινεται μια χαρα, η αναζητηση μιας ελληνικης θα καθυστερει απελπιστικα πολυ.
    -Ο δευτερος ειναι να δημιουργηθουν δυο πινακες οπως τον προηγουμενο, ενας για τις ισπανικες λεξεις
    με τις ελληνικες μεταφρασεις και ενας για το αναποδο. Ετσι ολες οι αναζητήσεις γινονται γρηγορα
    αλλα με προβληματιζει το γεγονος οτι καθε πληροφορια θα ειναι αποθηκευμενη δυο φορες στη βαση
    δεδομενων πραγμα που προσπαθω να το αποφυγω

    Φανταζομαι λοιπον θα υπαρχει κ καποιος αλλος τροπος να οργανωθει αυτή η βαση μια που κανενας απο
    τους τροπους αυτους δε μου φαινεται σωστος...

    Σας ευχαριστω πολυ κ καλες γιορτες να εχετε!!
  •  26-12-2006, 17:34 22802 σε απάντηση της 22761

    Απ: Βαση δεδομένων για λεξικό

    Πολύ ενδιαφέρον ερώτημα! Δεν το έχω σκεφτεί ποτέ, αλλά αυτή η λύση μου έρχεται στο μυαλό πρώτη :

    Ένας πίνακας με τρεις στήλες (προτεινόμενο όνομα word):

    id - κωδικός λέξης (integer - auto increment)

    language - κωδικός γλώσσας (tinyint) π.χ. ελληνικά=0, ισπανικά=1, αγγλικά=2

    word - λέξη (nvarchar)

    Δεύτερος πίνακας με σχέσεις μεταξύ λέξεων με τρεις στήλες (προτεινόμενο όνομα wordRelation):

    id κωδικός σχέσης (integer - auto increment)

    wordID κωδικός λέξης Α (integer - foreign key στον κωδικό λέξης)

    tranWordID κωδικός λέξης Β (integer - foreign key στον κωδικό λέξης)

    Το query για να βρεις τη μετάφραση μιας ελληνικής λέξης στα ισπανικά θα είναι:

    select * from word A

    inner join wordrelation B on (A.ID=B.tranWordID)

    inner join word C on (B.wordID=C.ID)

    WHERE C.word='ελληνικήΛέξη'

    AND A.language=1

    Η λύση αυτή προϋποθέτει ότι η σχέσεις μεταξύ των λέξεων ορίζονται δυο φορές. Δηλαδή ένα=uno και uno=ένα. Οπότε αν ID του ένα είναι 12 και ID του uno είναι 13 τότε ο πίνακας wordrelation θα έχει δυο εγγραφές 12,13 και 13,12. Αν το πεδέψεις λίγο παραπάνω ίσως αυτό μπορεί να αποφευχθεί.

    Αν υπάρχουν άλλες ιδέες τις περιμένω με ενδιαφέρον!
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  26-12-2006, 19:23 22805 σε απάντηση της 22802

    Απ: Βαση δεδομένων για λεξικό

    Με λιγότερα INNER JOINS και γρηγορότερη αναζήτηση...

    Words
    WordID/int, auto increment, WordKey/unique identifier, WordDesc/varchar(255)
    Περιέχει τις λέξεις στην γλώσσα που θα είναι η βασική και θα γίνονται οι καταχωρίσεις. (Cluster index WordKey, index WordDesc)

    WordsTranslated
    TranslatedWordID/int, auto increment, WordKey/unique identifier, LanguageID/integer, TranslatedWordDesc/varchar(255)
    Περιέχει όλες τις μεταφρασμένες λέξεις. (Cluster index WordKey, index LanguageID, index TranslatedWordDesc - για να μπορούν να γίνουν και ανάποδες αναζητήσεις)

    Για να βρεις μια λέξη:
    SELECT * FROM Words INNER JOIN WordsTranslated on (Words.WordKey=WordsTranslated.WordKey) WHERE LanguageID=1 AND WordDesc='Λέξη'

    Βασικά πρέπει να είμαι πιο γρήγορος γιατί, έχω 1 INNER JOIN και το Foreign key μου είναι σταθερού μεγέθους (unique identifier = char(32)) Smile

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  29-12-2006, 13:06 22887 σε απάντηση της 22761

    Απ: Βαση δεδομένων για λεξικό

    Συνημμένα: sample.jpg

     paris171 wrote:
        Γεια σας παιδια κ Χρονια Πολλα!!

    Η σχεση μεταξυ των ελληνικών κ των ισπανικων λεξεων ειναι μ:ν κατι που με παιδευει....
    ...
    Θυμαμαι τον καλο μου δασκαλο που μας ελεγε οτι αν εχουμε μια μ:ν σχεση βαζουμε μια επιλεον
    οντοτητα στη μεση κ απο μ:ν γινεται 1:μ - ν:1 αλλα δεν ξερω πως να το χρησιμοποιήσω αυτο
    στην προκειμένη
    ...

    Κατ'αρχάς την αρχική σου σκέψη την βρίσκω σωστή και ο καλός σου δάσκαλος δεν είχε άδικο ;)

    Στην απλούστερη μορφή θα χρειαστείς 3 πίνακες λοιπόν.

    Πίνακας με τις Ελληνικές λέξεις (Greece), πίνακας με τις Αγγλικές (English) και ένας πίνακας με την αντιστοιχία τους (Translation).

    Στην συνημμένη εικόνα φαίνεται πως μπορεί να γίνει μια υλοποίηση σε access.

    Με τον τρόπο αυτό ορίζονται σχέσεις μεταξυ των λέξων της κάθε γλώσσας και ο συνδιασμός τους δεν επαναλαμβάνεται  (οπότε δεν έχεις περιττά records), αυτο εξασφαλίζεται δε, απο τον ορισμό και των 2 πεδίων στον πίνακα Translation ώς primary keys (σύνθετο κλειδί). Μάλιστα μεταφράζοντας μόνο την μία γλώσσα (πχ απο Αγγλικά σε Ελληνικά) με την ενημέρωση του πίνακα έχεις ταυτόχρονα και την μετάφραση απο Ελληνικά σε Αγγλικά.

    Σίγουρα υπάρχουν και άλλα θέματα που πρέπει να λάβεις υπόψιν στον σχεδιασμό , αλλά πιστεύω οτι αυτός είναι ένας τρόπος για να ξεκινήσεις.


  •  29-12-2006, 13:21 22888 σε απάντηση της 22761

    Απ: Βαση δεδομένων για λεξικό

    Η λύση του Γιώργου είναι η πιο γρήγορη και η πιο scalable (την είχα υλοποιήσει παλιότερα σε ένα multilingual web application που είχα κατασκευάσει).
    Μην αφήνετε τα media να σας "ταΐζουν"!
  •  29-12-2006, 22:30 22894 σε απάντηση της 22761

    Απ: Βαση δεδομένων για λεξικό

    Τελικά υπάρχοουν αρκετοί τρόποι για να το κάνεις ενώ νόμιζα ότι θα ήταν πολύ πιο τυποποιημένη διαδικασία

    Δημήτρη μου άρεσε πολύ η ιδέα σου και πιο πολύ επειδή δεν το είχα σκεφτεί καθόλου με αυτόν τον τρόπο!!

    Gio με βοήθησες πολύ με το post σου (thnx a lot για τον κοπο σου) και μάλλον έτσι θα το κάνω γιατί μου φαίνεται και πιο απλό μια που δεν εχω και ιδιαίτερη εμπειρία σε τέτοια θέματα

    Anyway σας ευχαριστώ όλους

    Φυσικά καλοδεχούμενη και οποιαδήποτε άλλη απάντηση και σχόλιο

    Καλές γιορτές και χρόνια πολλά
  •  15-01-2007, 12:15 23532 σε απάντηση της 22761

    Απ: Βαση δεδομένων για λεξικό

    Να σε παρακαλέσω να αλλάξεις το μήνυμά σου από Greekglish σε κανονικά Ελληνικά.


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

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