Κατηγορίες για Προϊόντα - Posts - FAQ κλπ κλπ

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

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

Απάντηση
Άβαταρ μέλους
Lykos22
Δημοσιεύσεις: 89
Εγγραφή: 29 Μαρ 2011 16:28
Τοποθεσία: UK

Κατηγορίες για Προϊόντα - Posts - FAQ κλπ κλπ

Δημοσίευση από Lykos22 » 25 Ιούλ 2014 13:51

Ας υποθέσουμε πως έχουμε τους εξής πίνακες σε μία β.δ.

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

Posts
-------------------------
postID (pk)
title
categoryID (fk)
κλπ κλπ


Products
-----------------------
productID (pk)
name
categoryID (fk)
κλπ κλπ


Faqs
---------------------
faqID (pk)
question
categoryID (fk)
klp klp
Ποίος είναι ο καλύτερος τρόπος να διαχειριστώ τις κατηγορίες μου?

1. Να έχω ν-διαφορετικούς πίνακες κατηγοριών για κάθε "τύπο" μου (σαν "τύπο" εννοώ τα posts, products, faqs κλπ κλπ), στο παράδειγμά μου δηλαδή θα δημιουργήσω τους πίνακες
posts_categories, products_categories, faq_categories κ.ο.κ

2. Να μαζέψω όλες τις κατηγορίες μου σε έναν πίνακα, όπου θα έχω ένα πεδίο 'type' το οποίο θα παίρνει τιμές ανάλογα με τον "τύπο" (posts, products, faqs, ...)
Ο λόγος που θα υπάρχει το πεδίο 'type' είναι π.χ. να εμφανίσω σε μία σελίδα blog.php ΜΟΝΟ τις κατηγορίες τύπου post , οι υπόλοιπες κατηγορίες δεν έχουν λόγο να εμφανίζονται σε αυτή τη σελίδα.

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

Categories
--------------------
categoryID
category
type // posts, products, faqs κλπ κλπ πιθανότατα από κάποιο dropdown menu και θα είναι ENUM
Έτσι θα έχω πχ

[table]
[mrow]categoryID[mcol]category[mcol]type
[row]1[col]Science[col]post
[row]2[col]Shirts[col]products
[row]3[col]Design[col]faqs
[/table]

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Κατηγορίες για Προϊόντα - Posts - FAQ κλπ κλπ

Δημοσίευση από geomagas » 25 Ιούλ 2014 14:39

Εφόσον η κάθε κατηγορία αναφέρεται αποκλειστικά σε έναν από τους πίνακές σου, κάνε ξεχωριστούς πίνακες.

Άβαταρ μέλους
Lykos22
Δημοσιεύσεις: 89
Εγγραφή: 29 Μαρ 2011 16:28
Τοποθεσία: UK

Κατηγορίες για Προϊόντα - Posts - FAQ κλπ κλπ

Δημοσίευση από Lykos22 » 25 Ιούλ 2014 14:57

Έχεις ένα δίκιο σ' αυτό που λες. Μπορεί να υπάρχει και το σενάριο μία κατηγορία να αντιστοιχεί σε περισσότερους από έναν πίνακες, π.χ. η κατηγορία 'design' θα μπορούσε να υπάρχει και στον πίνακα posts και στον πίνακα faqs.

Αλλά κάτι τέτοιο μπορεί να μην ισχύει για όλες τις κατηγορίες.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Κατηγορίες για Προϊόντα - Posts - FAQ κλπ κλπ

Δημοσίευση από geomagas » 25 Ιούλ 2014 15:12

Μπορείς απλά να προσθέσεις την ίδια κατηγορία σε όλους τους αντίστοιχους πίνακες. Ίσως θα μπορούσες να φτιάξεις κι έναν επιπλέον, πχ master_category, όπου όλες οι κατηγορίες σε όλους τους πίνακες θα είχαν ξένα κλειδιά σε αυτόν, για το γκρουπάρισμα (ο οποίος θα περιέχει πχ και το όνομα της κατηγορίας).

Μπορείς να το κάνεις και με τον ένα πίνακα. Βέβαια, θα πρέπει να έχεις αντίστοιχες εγγραφές στον πίνακα των κατηγοριών σου, πχ:
[table]
[row]1[col]design[col]posts
[row]2[col]design[col]faqs
[/table]

Και επιπλέον, δεν δασφαλίζεις το referential integrity στο επίπεδο της βάσης (κάποτε είχα δει ένα κολπάκι με σύνθετο pk/fk, αλλά δεν το εφάρμοσα ποτέ).

Άβαταρ μέλους
Lykos22
Δημοσιεύσεις: 89
Εγγραφή: 29 Μαρ 2011 16:28
Τοποθεσία: UK

Κατηγορίες για Προϊόντα - Posts - FAQ κλπ κλπ

Δημοσίευση από Lykos22 » 25 Ιούλ 2014 15:17

geomagas έγραψε:Μπορείς να το κάνεις και με τον ένα πίνακα. Βέβαια, θα πρέπει να έχεις αντίστοιχες εγγραφές στον πίνακα των κατηγοριών σου, πχ:
[table]
[row]1[col]design[col]posts
[row]2[col]design[col]faqs
[/table]
Δηλαδή να κάνω ν-διαφορετικές εγγραφές για την κατηγορία ανάλογα με τις αντιστοιχίσεις?

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Κατηγορίες για Προϊόντα - Posts - FAQ κλπ κλπ

Δημοσίευση από geomagas » 25 Ιούλ 2014 16:20

Ναι προφανώς.
Αλλιώς πως θα ξέρεις ποια κατηγορία προβλέπεται για κάθε τύπο;

Απάντηση

Επιστροφή στο “MySQL”

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

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