Πολλαπλά ξένα κλειδιά σε μία στήλη

Γενικές συζητήσεις για SQL και SQL Servers (RDBMS)

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

Απάντηση
logintech
Δημοσιεύσεις: 10
Εγγραφή: 05 Νοέμ 2012 14:29

Πολλαπλά ξένα κλειδιά σε μία στήλη

Δημοσίευση από logintech » 05 Νοέμ 2012 14:41

Καλησπέρα


Προσπαθώ να φτιάξω μια βάση στην οποία θα καταχωρούνται στοιχεία από hardware και περιφερειακά υπολογιστών. Έχω κολλήσει στο πώς θα δηλώνω πως ένα εξάρτημα έχει χαλάσει.
Για παράδειγμα έχω τέσσερεις πίνακες:

Motherboard: modoID (PK), socket_speed, sata_slot κτλ
Monitors: mID (PK), model, type, inches κτλ
Printers: prID (PK), model, serial, color κτλ
OFF_hardware: IDs, date

Ψάχνω έναν τρόπο έτσι ώστε στην στήλη IDs να μπορώ να βάλω τα κλειδιά από τους άλλους πίνακες και να μην αναγκαστώ να φτιάξω πχ 12 στήλες οι οποίες η κάθε μία θα αντιστοιχεί σε κάποιο ξένο κλειδί. Κατά κάποιο τρόπο να έχω πολλά ξένα κλειδιά σε μία στήλη.
Υπάρχει κάποιος τρόπος να το κάνω αυτό; Αν δεν υπάρξει κάποια σύνδεση μεταξύ τους είναι εντάξει αλλά αυτό δεν μου διαφυλάσσει ότι δεν θα γίνει κάποιο λάθος στις καταχωρήσεις αργότερα. Θα ήθελα δηλαδή να υπάρχει κάποια σύνδεση και να μην είναι ένας πίνακας μόνος του.


Ευχαριστώ

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

Πολλαπλά ξένα κλειδιά σε μία στήλη

Δημοσίευση από burnmind » 05 Νοέμ 2012 15:01

Θεωρητικά πάντα (δε ξέρω τι ακριβώς έχεις στο μυαλό σου), μπορείς να κάνεις το εξής:

off_hardware_cases: id (pk), case_title, date
off_hardware: case_id (fk), hardware_id (fk)

Στον πίνακα off_hardware_cases υπάρχουν οι γενικές πληροφορίες για κάθε περίπτωση (πχ ένας τίτλος "χάλασε ο υπολογιστής του μάκη" και η ημερομηνία/ώρα του ticket) και στον off_hardware, απλά ενώνεις το id του case, με το κάθε hardware που αφορά (από 0 μέχρι n).
Τελευταία επεξεργασία από το μέλος burnmind την 05 Νοέμ 2012 15:03, έχει επεξεργασθεί 1 φορά συνολικά.

logintech
Δημοσιεύσεις: 10
Εγγραφή: 05 Νοέμ 2012 14:29

Πολλαπλά ξένα κλειδιά σε μία στήλη

Δημοσίευση από logintech » 05 Νοέμ 2012 15:45

Burnmind ευχαριστώ για την απάντησή του. Υποθέσω ότι αναφέρεσαι στα κουτιά. Μου πέρασε από το μυαλό αυτό που μου προτείνεις αλλά το αποτέλεσμα θα είναι να φτιάξω 20 καινούργιους πίνακες. Μέσα στην βάση έχω άλλο πίνακα για τα κουτιά, άλλο για τις οθόνες, άλλο για τις motherboard, σκληρούς δίσκους, εκτυπωτές, δικτυακές συσκευές, κτλ. Αυτό σημαίνει πως θα πρέπει να έχω έναν OFF πίνακα για κάθε εξάρτημα-πίνακα και άλλο πίνακα για να συνδεθεί ο OFF πίνακας.

Θεωρώ πως το πλήθος των πινάκων δεν είναι πρόβλημα για τον MySQL server, απλά σκεφτόμουν μήπως υπάρχει κάποιος τρόπος να είναι πιο «συμπτυγμένα» τα πράγματα με τις καταχωρήσεις; Όπως αυτό με τα πολλαπλά κλειδιά σε ένα κελί;

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

Πολλαπλά ξένα κλειδιά σε μία στήλη

Δημοσίευση από burnmind » 05 Νοέμ 2012 18:34

Ναι, για κάποιον λόγο δεν πρόσεξα πως τα products είναι σε διαφορετικούς πίνακες.

Με τα πολλά κλειδιά σε 1 κελί, πιστεύω πως χάνεις την ευελιξία στα queries (joins), καθώς θα πρέπει να τα τραβάς, να τα κάνεις unserialise (αν τα έχεις αποθηκευμένα έτσι) και μετά να εκτελείς τα υπόλοιπα queries που θέλεις.

Δε μου αρέσει η λογική "1 είδος hardware = 1 πίνακας" γιατί δεν είναι ευέλικτο (τουλάχιστον έτσι πιστεύω καθώς δε μπορώ να σκεφτώ στα γρήγορα κάποιον ωραίο τρόπο να κάνεις αυτό που θέλεις έτσι όπως είναι δομημένη η βάση σου). Αντιθέτως, αν έχεις όλα τα προϊόντα σε έναν πίνακα μπορείς εύκολα να χρησιμοποιήσεις αυτό που περιέγραψα πριν.

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

Το να έχεις 800 διαφορετικά πεδία στον πίνακα με το 95% τους να είναι null σε κάθε εγγραφή δε θα το συνιστούσα.

Αυτό που μάλλον (λέω μάλλον γιατί θέλει αρκετή σκέψη το θέμα) θα επέλεγα είναι να φτιάξω έναν βασικό πίνακα "hardware" με όλα τα κοινά στοιχεία των προϊόντων και μετά διάφορους πίνακες για τις διαφορετικές κατηγορίες προϊόντων, τους οποία θα ένωνα με views. Υπάρχουν και άλλοι, πιο πολύπλοκοι τρόποι (πίνακας με abstract properties που συνδέεται με τον κάθε τύπο hardware), αλλά μάλλον το παρατραβάμε. :lol:

logintech
Δημοσιεύσεις: 10
Εγγραφή: 05 Νοέμ 2012 14:29

Πολλαπλά ξένα κλειδιά σε μία στήλη

Δημοσίευση από logintech » 05 Νοέμ 2012 21:42

Χμμμ έχεις ένα δίκιο. Απλά οι πολλοί διαφορετικοί πίνακες με εξυπηρετούν για την ταξινόμηση που κάνω (βέβαια μέχρι έναν αριθμό γιατί μετά θα χάσω την μπάλα). Το PK το συσχετίζω με τον κωδικό προϊόντος.
Πχ
Στον πίνακα workstation έχω PK "pcID" και όλα είναι δοσμένα από εμένα με συγκεκριμένο format, pc0001, pc0002, pc0358
Στον πίνακα Monitor έχω PK το "mID" και είναι του τύπου m0001, m0002, m0464
Και επειδή τα έχω βάλει κάτω εδώ και μέρες δεν μπορώ να βρω πολλά κοινά στοιχεία πχ μεταξύ εκτυπωτή, οθόνης και δικτυακές συσκευές.

Όλο αυτό έχει στόχο να μου κάνει την ζωή πιο εύκολη αργότερα κυρίως για τα queries. «Ποια workstation ή ποιες οθόνες είναι χαλασμένες»

Σκεφτόμουν να κάνω κάτι σαν αυτό που έχω στην εικονίτσα.
Όπως και να έχει θα το κοιτάξω αυτό που μου λες παραπάνω. Ευχαριστώ για τον χρόνο σου!
Συνημμένα
dbtest.jpg
(44.39 KiB) Μεταφορτώθηκε 200 φορές

Απάντηση

Επιστροφή στο “Βάσεις Δεδομένων και SQL - γενικά”

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

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