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

 

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

to "int" or not to "int"?

Îåêßíçóå áðü ôï ìÝëïò Smert. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 02-04-2008, 12:20. Υπάρχουν 1 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  02-04-2008, 10:22 41258

    to "int" or not to "int"?

    Καλημέρα!

    1. Στη σχολή μας μάθανε (τι γραφικό) ότι τα πρωτεύοντα κλειδιά βολεύει να είναι int. Μάλλον για να αυξάνεται από μόνο του ίσως.

    Από την άλλη, μια παλιά βάση που θα διαβάσω και θα βάλω φόρμες από πάνω έχει το κλειδί και όλα τα πεδία (ακόμα και τις ημερομηνίες) char.

    Γιατί όχι? αφού έτσι μπορώ να φτιάχνω και queries με το κλειδί παράμετρο , και τον μπαλαντέρ "%". Ποιά είναι αλλιώς η χρησιμότητα του int?

    2. στην ίδια βάση θέλω ένα query με όλα τα πεδία παραμέτρους για να βάζει ο χρήστης όσα κριτήρια θέλει. Βάζω για αντίστοιχες παραμέτρους ό,τι γράφει σε όλα τα textboxes + "%"

    και δουλεύει μια χαρά εκτός φυσικά από το κλειδί γιατί είναι int. Πώς προτείνετε να κάνω μια τέτοια διαδικασία ? Να κάνω το κλειδί char και να χω αυτό το συνολικό query?

     

  •  02-04-2008, 12:20 41261 σε απάντηση της 41258

    Απ: to "int" or not to "int"?

    Νομίζω ότι έχεις παρεξηγήσει την έννοια του primary key. Το primary key χρησιμοποιεται ως η "ταυτότητα" μίας οντότητας στα διάφορα queries, είτε για να διαβάσεις/τροποποιήσεις τα πεδία της π.χ. με ένα SELECT xyz from MyTable Where MyID=123, είτε σε joins, ειδικά όταν έχεις σχέσεις many to many π.χ. SELECT xyz from OrderItems, Orders Where Orders.ID=OrderItems.OrderID. Μοιάζει, χωρίς να είναι, με ένα pointer.

    Ένα primary key χρησιμοποείται το 99,9999999999999999999% σε συγκρίσεις όπως η Orders.ID=OrderItems.OrderID. Οι υπόλοιπες περιπτώσεις είναι του τύπου Orders.ID>234. Σχεδόν ποτέ δεν συμμετέχει σε Like. Γι αυτό θέλεις να είναι όσο το δυνατόν μικρότερο, για να μην ξοδεύει χώρο στο σκληρό και τη μνήμη.
    Σκέψου το εξής. Στα 4 bytes ενός int μπορείς να αποθηκεύσεις 4294967296 τιμές, ενώ οι συγκρίσεις μεταξύ ints γίνονται σε ένα μόλις operation από τον επεξεργαστή.  Σε 4 chars μπορείς να αποθηκεύσεις μόλις 10000, ενώ οι συγκρίσεις είναι αργές και κατά κανόνα απαιτούν σύγκριση όλων των χαρακτήρων του string.

    Γι αυτό το λόγο δεν χρησιμοποιείται σχεδόν ποτέ πεδίο varchar για Primary Key ή σε queries με Like.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems