Πολλές τιμές σε ένα πεδίο...

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
rafinos
Δημοσιεύσεις: 304
Εγγραφή: 15 Μάιος 2011 00:20
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από rafinos » 18 Ιούλ 2011 16:39

Γεια σας θα ήθελα να μου πείτε αν γίνεται και πως... να βάλω πολλές τιμές σε ένα πεδίο μιας βάσης sql...

Δεν έχω δημιουργήσει κάτι ακόμα βρίσκομαι ακόμα στο στάδιο έρευνας για την πτυχιακή μου!

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

Τι κάνω σε αυτή τη περίπτωση;;;

(Όπως καταλάβατε θα είναι ένα web based συστήμα με html-php-javascript σε συνδυασμό με mysql για αυτό και απευθύνομαι εδώ... αρχικά είχα δημιουργήσει εδώ ένα topic)

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από burnmind » 18 Ιούλ 2011 16:59

Εφόσον θέλεις ένας χρήστης να μπορεί να δηλώσει απεριόριστο αριθμό τηλεφώνων (1 προς Ν), τότε εκτός από τον πίνακα users μπορείς να δημιουργήσεις και τον πίνακα phones:

Κώδικας: Επιλογή όλων

Phones
------
user_id | phone *
Εκεί θα δηλώνεις τα τηλέφωνα για όλους τους users, βάσει του ID τους (το primary key του πίνακα users, που εδώ θα είναι foreign key).

* τα user_id και phone μπορούν να είναι double primary key ώστε να μη μπορεί ο χρήστης να δηλώσει τον ίδιο αριθμό τηλεφώνου πάνω από μία φορά.

παράδειγμα:

Κώδικας: Επιλογή όλων

Phones
------
user_id | phone
---------------
1 | 1234567
1 | 9876543
2 | 1111111
1 | 2736576
Ο χρήστης με ID 1 έχει 3 δηλωμένα τηλέφωνα, ενώ αυτός με ID 2 μόνο ένα.

rafinos
Δημοσιεύσεις: 304
Εγγραφή: 15 Μάιος 2011 00:20
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από rafinos » 18 Ιούλ 2011 17:09

Ευχαριστώ πολύ φίλε μου!!! Θα το κοιτάξω και για απορίες θα ξαναποσταρο :P (αν και μάλλον θα αργήσω ξαναποστάρο γιατί εργάζομαι σε πολύ αργούς ρυθμούς...)

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από pimpogio » 19 Ιούλ 2011 00:57

διαβασε αυτο http://en.wikipedia.org/wiki/Database_normalization πριν να φτιαξεις την βαση σου
το αποπανω παραβιαζει το 2NF
αυτο που ηθελες να κανεις παραβιαζει το 1NF.

κανε το ετσι
Phones(phone_id,phone) PK phone_id / unique phone
Users(user_id,....) PK user_id
UsersPhones(user_id,phone_id) PK(user_id,phone_id) / FK user_id sto Users.user_id / FK phone_id sto Phones.phone_id

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από burnmind » 19 Ιούλ 2011 02:27

Τίποτα δεν παραβιάζει. Αυτό που του προτείνεις για το συγκεκριμένο παράδειγμα είναι πλεονασμός.

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

Αν για παράδειγμα θέλουμε να συνδέσουμε τον χρήστη με το τμήμα στο οποίο εργάζεται, ναι, η λύση των 3 πινάκων (users, departments, user_department) είναι η σωστή, γιατί θα πρέπει να μπορούμε να διορθώσουμε το όνομα του τμήματος ή άλλα στοιχεία (τα οποία θα είναι κοινά για όλους τους χρήστες που ανήκουν στο συγκεκριμένο τμήμα).

Για εξήγησέ μου όμως γιατί να υπάρχει ο πίνακας Phones που προτείνεις. Υπάρχει άραγε η περίπτωση να χρησιμοποιηθεί κάποιο τηλέφωνο πάνω από μία φορά για κάθε χρήστη; Και πες πως υπάρχει, 2 χρήστες (λένε πως) έχουν το ίδιο τηλέφωνο, οπότε αντιστοιχεί το ίδιο phone_id και στους 2. Αν ο ένας από τους 2 αποφασίσει να κάνει edit τι κάνεις; Θα κάνεις καινούρια εγγραφή; Για να μη πολυλογώ, η συγκεκριμένη λύση στο συγκεκριμένο παράδειγμα δεν έχει καμία πρακτική ουσία. Θέλω να πιστεύω πως πιάνεις τη λογική μου (όχι μοναδικά τηλέφωνα γενικά, αλλά μοναδικά τηλέφωνα για κάθε χρήστη).

ΥΓ: Φυσικά θα πρέπει να διαβάσει περί normalisation (όπως όλοι που πρόκειται να φτιάξουν μια βάση, μικρή ή μεγάλη). Έπειτα από το διάβασμα, καλό θα είναι να εφαρμόσει όλα αυτά που διάβασε σε Χ συστήματα (πολύπλοκα και μη), να δοκιμάσει διάφορες λύσεις και να μάθει από τα λάθη του. Γιατί καλά τα βιβλία και τα πτυχία, αλλά σαν την πράξη και το trial & error, τίποτα :)

rafinos
Δημοσιεύσεις: 304
Εγγραφή: 15 Μάιος 2011 00:20
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από rafinos » 19 Ιούλ 2011 02:52

Ξέρω ότι αυτό που ζητάω παραβιάζει την 1η NF και ξέρω να κάνω κανονικοποίηση....
όπως είπα περί πτυχιακής πρόκειτε οπότε θα μου έχουν διδάξει βάσεις απλά το μυαλό δεν τα θυμάται... θέλει ένα καλό reinstall :P

Ευχαριστώ πολύ για τις συμβουλές!!! :)

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από pimpogio » 19 Ιούλ 2011 03:08

στη σχολη εχουνε γραφεια και μπορει 1 τηλεφωνο να ανηκει σε 5 χρηστες.
αμα θελει καποιος να κανει update το συγκεκριμενο τηλεφωνο σημαινει οτι αλλαξε το τηλεφωνο του γραφειου
οποτε ναι θα αλλαξει σε ολους γιατι το συγκεκριμενο τηλεφωνο αλλαξε και το σωστο ειναι να αλλαξει γιατι ειναι ενα κοινο τηλεφωνο.
Αν ομως βαλει νεο τηλεφωνο θα κανεις insert και delete το relation με το παλιο τηλεφωνο για το χρηστη.

α και κατι αλλο αν θες χεσε την mysql καθως εχει λιγοτερες δυνατοτητες απο την postgresql και μπορει να δυσκολεψει σε καποια
πραγματα και να χρειαστει να κανεις "πατεντες"...
αφου δεν θα εχεις προβλημα hosting γιατι ειναι για σχολικη εργασια δεν εχεις λογο να κανεις πραγματα που ειναι ετοιμα

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από burnmind » 19 Ιούλ 2011 03:30

pimpogio έγραψε:στη σχολη εχουνε γραφεια και μπορει 1 τηλεφωνο να ανηκει σε 5 χρηστες.
αμα θελει καποιος να κανει update το συγκεκριμενο τηλεφωνο σημαινει οτι αλλαξε το τηλεφωνο του γραφειου
οποτε ναι θα αλλαξει σε ολους γιατι το συγκεκριμενο τηλεφωνο αλλαξε και το σωστο ειναι να αλλαξει γιατι ειναι ενα κοινο τηλεφωνο.
Αν ομως βαλει νεο τηλεφωνο θα κανεις insert και delete το relation με το παλιο τηλεφωνο για το χρηστη
Είσαι σίγουρος πως σημαίνει ότι άλλαξε; Αν αυτός που το αλλάζει κάνει μαλακία και καταστρέψει τα πάντα για όλους;

Αν για παράδειγμα η Παναγιώτα από τη γραμματεία βάλει αντί για το τηλέφωνό της (12346) το 12345 που ανήκει στο ΙΤ (οπότε πάρει κι αυτή το phone_id του ΙΤ) και μετά κάνει EDIT; Θα σημαίνει πως άλλαξε το τηλέφωνο του ΙΤ;

Μην επιμένεις. Μία σχεδίαση όπως την περιγράφεις δεν αφορά απλά τηλέφωνα. Θα μπορούσε για παράδειγμα να υπάρχει ένας πίνακας με όλα τα στοιχεία ενός γραφείου (πχ το όνομα του τμήματος, το κτίριο, τον αριθμό του γραφείου και το τηλέφωνό του) κι έτσι οι χρήστες να γίνονται associate με το γραφείο κι όχι με το τηλέφωνο. Έτσι ναι, αλλά απλά ένας πίνακας με τηλέφωνα (όπως τον περιγράφεις) όχι απλά είναι άχρηστος αλλά μπορεί να δημιουργήσει και σοβαρά λάθη. Επίσης, αναφερόμαστε σε προσωπικά τηλέφωνα κι όχι τμημάτων, γραφείων κι εργοστασίων (προσωπικά στοιχεία από βιογραφικά θέλει να καταχωρήσει ο άνθρωπος).

pimpogio
Δημοσιεύσεις: 1080
Εγγραφή: 28 Δεκ 2010 14:08

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από pimpogio » 19 Ιούλ 2011 03:35

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

rafinos
Δημοσιεύσεις: 304
Εγγραφή: 15 Μάιος 2011 00:20
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από rafinos » 19 Ιούλ 2011 04:32

Καλά ντε... μη μαλώνετε!!!
Έτσι και αλλιώς ότι και να κάνω εγώ αν δεν αρέσει στον καθηγητή θα το αλλάξει ;)

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από burnmind » 19 Ιούλ 2011 05:34

:lol:

Μη φοβάσαι, δε μαλώνουμε, μια χαρά συζήτηση κάναμε :wink:

Άβαταρ μέλους
fronimitis
Δημοσιεύσεις: 31
Εγγραφή: 11 Οκτ 2004 09:23
Τοποθεσία: Αθήνα
Επικοινωνία:

Πολλές τιμές σε ένα πεδίο...

Δημοσίευση από fronimitis » 19 Ιούλ 2011 19:25

Αν το πεδίο παίρνει μόνο μερικές σχετικά λίγες και συγκεκριμένες τιμές, και θέλεις να αποφύγεις έξτρα tables και συσχετισμούς, μπορείς να τις αντιστοιχίσεις σε bits ενός αριθμού. Π.χ. Αν οι τιμές ειναι οι λέξεις: Αγγλικά, Γαλλικά, Ιταλικά, Ισπανικά, τοτε αν καταχωρησεις το νούμερο 5 (δυαδικό 1001) σημαίνει ότι ο χρήστης μιλάει Αγγλικά και Ισπανικά. Βέβαια, θα πρέπει να δημιουργήσεις κώδικα php που να καταχωρεί και να διαβάζει τα bits αυτά.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 4 επισκέπτες