Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

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

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

Απάντηση
Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από iffor » 18 Σεπ 2005 01:37

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

Χρειάστηκε κάποια φορά να οργανώσω μία βάση η οποία θα αναφέρεται
στο κλασικό δενδροιδές διάγραμμα κατηγοριών και προιόντων.

Για τις κατηγορίες οργάνωσα τον πίνακα ως εξής
+++++++++++++++++++++++++++++++++++
+ ID + PARENT + CATEGORY_NAME +
+++++++++++++++++++++++++++++++++++
όπου ώς ID είναι το χαρακτηριστικό μοναδικότητας της κάθε κατηγορίας
ως PARENT είναι το χαρακτηριστικό μοναδικότητας της υπεράνω κατηγορίας από την αναφερόμενη (και αν PARENT=0, θα αναφερόμαστε σε αρχική κατηγορία)
και ως CATEGORY_NAME το "όνομα" της κατηγορίας

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

Έφτιαξα έναν πίνακα στον οποίο θα "περνάω" τα χαρακτηριστικά προιόντος της κάθε κατηγορίας, σαν το εξής
+++++++++++++++++++++++++
+ ID + IDCATEGORY + FIELD +
+++++++++++++++++++++++++
όπου ID η μοναδικότητα του χαρακτηριστικού
IDCATEGORY, με το οποίο θα αναφέρεται στην κατηγορία και
FIELD το χαρακτηριστικό του προιόντος.

πχ αν έχουμε το προιόν Α1 με χαρακτηριστικά ΟΝΟΜΑ, ΤΙΜΗ και
το προιόν Α2 με χαρακτηριστικά ΟΝΟΜΑ, ΧΡΩΜΑ, ΜΕΓΕΘΟΣ
θα έχουμε
+++++++++++++++++++++++++
+ 1 + πχ 1 + ΟΝΟΜΑ +
+ 2 + 1 + ΤΙΜΗ +
+ 3 + πχ2 + ΟΝΟΜΑ +
+ 4 + 2 + ΧΡΩΜΑ +
+ 5 + 2 + ΜΕΓΕΘΟΣ +
+++++++++++++++++++++++++
Ακόμη για την εισαγωγή του προιόντος θα έχω τον πίνακα
+++++++++++++++++++++++++++++++++
+ ID + IDPRODUCT + IDFIELD + PRODUCT +
+++++++++++++++++++++++++++++++++
όπου ID η μοναδικότητα
IDPRODUCT θα ενώνει τα χαρακτηριστικά του προιόντος
IDFIELD το ID του δεύτερου πίνακα που παρουσίασα
και PRODUCT το ανάλογο χαρακτηριστικό του προιόντος

πχ αν έχουμε το προιόν
OPEL ASTRA, 22.000e που θα αναφέρεται στο προηγούμενο παράδειγμα του Α1
και το προιόν PARKER, ΑΣΗΜΙ, ΜΕΣΑΙΟ που θα αναφέρεται στο παράδειγμα του Α2, τότε ο πίνακας θα έχει ώς εξής
++++++++++++++++++++++++++++++++
+ 1 + 1 + 1 + OPEL ASTRA +
+ 2 + 1 + 2 + 22.000e +
+ 3 + 2 + 3 + PARKER +
+ 4 + 2 + 4 + ΑΣΗΜΙ +
+ 5 + 2 + 5 + ΜΕΣΑΙΟ +
++++++++++++++++++++++++++++++++
Η απορία μου είναι απλή...
Μήπως ο μ@λ@κ... παλεύω άδικα με αυτού του είδους την οργάνωση βάσης και χρειαστεί να ψάξω για κάτι καλύτερο, και το λέω αυτό γιατί στην χρήση του είναι αρκετά ως πολύ δύσκολη η χρησιμοποίηση αυτής της διάταξης βάσης. Άσε που έχει και διάφορα μικροπροβλήματα, όπως ότι αναγκαστικά, για το κάθε FIELD προιοντος θα πρέπει να είναι του ίδιου τύπου...

Έχετε καμία βοήθεια, παρατήρηση για τα παραπάνω, ή καμία καλύτερη ιδέα; Δυστυχώς καθώς κοιτούσα διάφορα CMS και το OSCOMMERCE παρατήρησα ότι για τα διάφορα προιόντα τους έχουν στάνταρ χαρακτηριστικά, πράγμα που δεν ψάχνω...

Χίλια ευχαριστώ εκ των προτέρων!
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Άβαταρ μέλους
cordis
Administrator, [F|H]ounder, [C|S]EO
Δημοσιεύσεις: 27617
Εγγραφή: 09 Οκτ 1999 03:00
Τοποθεσία: Greece
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από cordis » 18 Σεπ 2005 17:36

όντως αυτός ο τύπος οργάνωσης είναι αρκετά δύσχρηστος..
αυτό που μου έρχεται τώρα είναι ότι τον τύπο μπορείς να τον έχεις αν θέλεις ως εξής:
+++++++++++++++++++++++++ +++++++++++
+ ID + IDCATEGORY + FIELD + FIELD_TYPE+
+++++++++++++++++++++++++++++++++++++
οπότε έχουμε:
+++++++++++++++++++++++++
+ 1 + πχ 1 + ΟΝΟΜΑ + CHAR+
+ 2 + 1 + ΤΙΜΗ +NUM+
+ 3 + πχ2 + ΟΝΟΜΑ + CHAR+
+ 4 + 2 + ΧΡΩΜΑ + CHAR+
+ 5 + 2 + ΜΕΓΕΘΟΣ + CHAR+
+++++++++++++++++++++++++
και να κάνεις το conversion και τους ελέγχους σου προγραμματιστικά..
Δεν απαντάω σε προσωπικά μηνύματα με ερωτήσεις που καλύπτονται από τις ενότητες του forum. Για ο,τι άλλο είμαι εδώ για εσάς.
- follow me @twitter

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από iffor » 19 Σεπ 2005 10:31

Συμφωνώ...!!!
Δυστυχώς, αν και δυσχρηστος, είναι ο μόνος τρόπος με τον οποίο μπορώ να έχω σε τρεις πίνακες κατηγορίες με μεταβαλόμενα χαρακτηριστικά...!!!
(Μου χρειάστηκε όταν ήθελα να οργανώσω ένα κατάστημα μόντας αυτοκινήτων που γινόταν ο χαμός...)
Όσο αναφορά τον τύπο των FIELDS δίκιο έχεις, απλός εγώ δεν εξηγήθηκα σωστά..., θέλω να πώ ότι στον τρίτο πίνακα, το FIELD του PRODUCT θα πρέπει να το έχω ως longtext ώστε να έχω όσο το δυνατόν μεγαλύτερη διάθεση...
Απλός, εκεί που θα έχω αποθηκευση αριθμών, αυτό θα γίνεται σε longtext field με αποτέλεσμα χαράμισμα bytes...
Μήπως έχεις κανένα site παράδειγμα που να χρησιμοποιεί βάση που αναφέρεται σε διαφορετικών χαρακτηριστικών προιόντα?

Thanx...!!!
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Άβαταρ μέλους
beredim
Δημοσιεύσεις: 26
Εγγραφή: 28 Ιαν 2004 10:04

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από beredim » 19 Σεπ 2005 16:42

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

1η επιλογή: Επανασχεδιασμός βάσης. Ψάξε λίγο τις έννοιες "Σύνθετο Γνώρισμα", "Εξειδίκευση και Γενίκευση/Κλάσεις και Υπερκλάσεις Οντοτήτων" και δες μήπως μπορείς να σχεδιάσεις καλύτερα τη βάση σου.

2η επιλογή: Δοκίμασε να παίξεις με "Πλειότιμα Γνωρίσματα". π.χ. να ορίσεις τα χαρακτηριστικά ενός προϊόντος ως 1 πλειότιμο γνώρισμα. Η MySQL υποστηρίζει πλειότιμα γνωρίσματα με τύπο πεδίου SET('a','b','c') <--- Συνολικά σηκώνει νομίζω 65.000 διαφορετικές τιμές, από τις οποίες το πεδίο μπορεί να έχει ως τιμή οποιονδήποτε συνδυασμό τους...

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από iffor » 19 Σεπ 2005 21:32

Με πολύ χαρά θα αρχίσω να ψαχουλεύω...!!!
Δυστυχώς, κάποιος που γνωρίζει σχεδόν τα βασικά στην σχεδίαση λειτουργικών βάσεων και λίγες από τις δυνατότητες της MySQL ( την οποία χρησιμοποιώ ), για αυτές τις περίεργες οργανώσεις, χρησιμοποιόντας τις λίγες δυνατότητες που γνωρίζει, έχει ως αποτέλεσμα την δύσκολη πραγματοποίηση αρκετών project...
Αν θα σου ήταν και δυνατόν να μου πείς και κανά link :D
Ά, ότι προανέφερες, ισχύουν και για την MySQL 3.23; (την οποία έχει ο server της δουλειάς )
Thanx...!!!
μια νέα αρχή ξεκίνησε...
ένας καινούριος δρόμος άνοιξε...
redpanda.gr

Άβαταρ μέλους
beredim
Δημοσιεύσεις: 26
Εγγραφή: 28 Ιαν 2004 10:04

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από beredim » 19 Σεπ 2005 23:07

Καταρχήν, να διορθώσω τον εαυτό μου. Το SET μπορεί να έχει μονάχα 64 διαφορετικές τιμές από τις οποίες θα προκύψει ο συνδυασμός της επιθυμητής. Επομένως μπορεί και να μην σου κάνει. Το 65535 είναι το πλήθος των δυνατών τιμών που μπορεί να πάρει ο τύπος ENUM, ένα τέτοιου τύπου πεδίο όμως έχει ως τιμή μόνο μία από το σύνολο που ορίζεις και μάλλον δεν κάνει στην περίπτωσή σου.
Στην 3.23, ναι, υπάρχει ο τύπος SET.
Δες και τα παρακάτω:
http://dev.mysql.com/doc/mysql/en/set.html
http://dev.mysql.com/doc/mysql/en/enum.html
http://dev.mysql.com/doc/mysql/en/index.html

Τώρα για τα υπόλοιπα, δεν ξέρω τι επιπέδου είναι οι γνώσεις σου στο σχεδιασμό σχεσιακών βάσεων δεδομένων. Γενικά αυτό που κάνει ένα σωστό σχεδιασμό είναι η σωστή αναγνώριση των οντοτήτων και των συσχετίσεων του προβλήματος που θες να μοντελοποιήσεις, καθώς και των γνωρισμάτων που έχουν αυτές οι οντότητες (ή/και των γνωρισμάτων των συσχετίσεων τους). Σαν ξεχωριστές οντότητες ορίζουμε συνήθως ένα σύνολο αντικειμένων με κοινά γνωρίσματα με βάση τον ίδιο το φυσικό κόσμο που μοντελοποιούμε.

Θα μπορούσα να αρχίσω να αναλύω παραδείγματα, αλλά υπάρχουν ήδη πάμπολλα στο δίκτυο και σε βιβλία. Για αρχή πάντως βρήκα αυτό:
http://www.utexas.edu/its/windows/datab ... index.html
ΠΑ ΒΩ ΚΑΙ ΚΙΝΩ ΤΑΝ ΓΑΝ

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από iffor » 26 Σεπ 2005 19:15

hello again...!!!!

Ψαχούλεψα το θέμα και τα link που έδωσες ( ομολογώ ότι δεν είχα ιδέα για SET datatype...!!!! ) αλλά δύσκολα θα έκανε την δουλειά για την οποία ψάχνομαι....

Και ο σοβαρός λόγος είναι ότι τα διάφορα πεδία του SET datatype χωρίζονται από τον χαρακτήρα "," πράγμα που δυσκολέυει την αποθήκευση πρότασης με το SET... ( δές εδώ )

Δεν διαφωνώ τελικά ότι η οργάνωση της βάσης μου δεν είναι σωστά κανονικοποιημένη, το ψάχνω όμως :)

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

Χίλια συγνώμη αν από την άγνοιά μου είπα κάτι που δεν ισχύει και ίσως σε πρόσβαλα! :wink:

Thanx...!!!

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από cherouvim » 28 Σεπ 2005 07:01

An thes kati telios dynamiko i prosegisi pou exeis sto thema einai i monadiki (nomizo). Ektos kai an den se apasholei to relational model kai apofasiseis na apothikefseis serialized to kathe object sou se ena row enos table.

O tropos me ton opoio eho lysei to prob afto perigrafete apo to parakato schema. Elpizo na katalabeis peripou ti eho kanei. Miazei poly me to diko sou. Doulevei mia hara, apla ta queries kamia fora ginontai polyploka. Mou exei miosei to hrono development, mias kai pleon den kano database design gia pragmata pou modelopoiountai apo afto to schema.

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

mysql> describe elements;
+--------+------------------+
| Field  | Type             |
+--------+------------------+
| id     | int&#40;3&#41; unsigned  |
| type   | int&#40;10&#41; unsigned |
| value  | text             |
| parent | int&#40;10&#41; unsigned |
+--------+------------------+

mysql> describe elementtypes;
+--------+---------------------+
| Field  | Type                |
+--------+---------------------+
| id     | int&#40;3&#41; unsigned     |
| parent | tinyint&#40;3&#41; unsigned |
| name   | varchar&#40;32&#41;         |
| type   | varchar&#40;32&#41;         |
+--------+---------------------+

mysql> describe documents;
+--------+---------------------+
| Field  | Type                |
+--------+---------------------+
| id     | int&#40;3&#41;              |
| type   | tinyint&#40;3&#41; unsigned |
| parent | int&#40;10&#41; unsigned    |
| name   | varchar&#40;255&#41;        |
+--------+---------------------+

mysql> describe documenttypes;
+-------+---------------------+
| Field | Type                |
+-------+---------------------+
| id    | tinyint&#40;3&#41; unsigned |
| name  | varchar&#40;32&#41;         |
+-------+---------------------+

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από iffor » 28 Σεπ 2005 14:05

:D
Θα με ενδιέφερε πολύ να ψαχουλέψω την οργάνωση της βάσης σου!
Αν μπορούσες μόνο να μου διευκρινήσεις σε τί αναφέρεται το
element και σε τί το document!

Χίλια ευχαριστώ...!!!!

Α! και αν δεν σου είναι κόπος ένα παραδειγματάκι?
συνήθως βοηθάνε στην κατανόηση μίας λογικής! :pint:

take5
Δημοσιεύσεις: 22
Εγγραφή: 16 Ιουν 2005 14:16

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από take5 » 28 Σεπ 2005 14:40

Νομίζω ότι συγχεεις τον φυσικό κόσμο με την αποτύπωση του σε ένα μηχανογραφικό σύστημα.
Στον φυσικό λοιπόν κόσμο τα προιόντα είναι μια οντότητα ανεξάρτητα αν κάποια έχουν χρώμα, καποια και χρώμα και μεγεθος καποια πλάτος και κάποια τίποτα από τα πιο πάνω. Το χρώμα, το μέγεθος, το πλατος είναι χαρακτηριστικά των προιοντων και μάλιστα όχι ομοειδή. Κάποια προιόντα έχουν ένα χαρακτηριστικό κάποια 10 και κάποια κανένα
Από εκεί και πέρα και στο φυσικό κόσμο και στα περισσότερα συστήματα ο τιμοκατάλογος είναι μια άλλη οντότητα. Ο τιμοκατάλογος περιλαμβάνει τιμές των προιόντων.
Κατηγορίες προιόντων , κατηγορίες χαρακτηριστικών είναι επίσης συμπηρωματικές οντοτητες.

Άβαταρ μέλους
iffor
Δημοσιεύσεις: 778
Εγγραφή: 14 Μάιος 2005 01:19
Τοποθεσία: Παράδεισος
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από iffor » 28 Σεπ 2005 14:57

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

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Δημιουργία βάσης με πίνακες διαφορετικών διαστάσεων

Δημοσίευση από cherouvim » 28 Σεπ 2005 15:43

@iffor: document einai otidipote thes na kratiseis mesa sto systima sou. document tha mpoouse na einai ena post se afto to thread opote tha itane typou 'comment'. ta elements pou exei ena tetio document tha mporousan na einai ena commentTimestamp, commentAuthor, commentBody (afta mpainoun sto elementTypes) kai sto elements mpainoun oi times tous diladi 234234323 (tyhaio unix timestamp), 'cherouvim', 'bla bla bla'

me afto to tropo sozo tetia documents mesa sti vasi mou alla mazi me aftou tou typou ta documents (of type comment) mporo na valo opioudipote allou typou document thelo (arkei na to eho orisei sto documenttypes).

stino olokliro to site mou se afta ta 4 tables, me documents typou structureElement pou anaparistoun treed elements tou menu pou exei to site, kai oti allo hriazete gia to content tou site px simpleArticle, compliArticle, comment, forum, forumThread, forumPost, user, privateMessage etc.

To scalability enos tetiou systimatos den einai poly kalo alla gia mikra projects me volevei kalytera apo to na dimiourgo 1 table gia kathe object mou.

Exe ypopsin oti ola ta document types ehoun supporting objects sto perivalon tis glossas pou gnorizoun pos na metatrepsoun to text value tou kathe field tous sto type pou hriazete. Episis kseroun kai pos na ektypothoun gia view i gia editing, pos na lavoun dedomena apo to request ($_POST/$_GET stin php) kai na kanoun update ton eafto tous (se epipedo object) kai an hriastei na kanoun persist ton eafto tous sti vasi.
Fysika den eho code duplication mias kai aftes oi vasikes methodoi pou periegrapsa ylopoiountai apo to patriko abstract document object.

Auto pou den fenetai se afti tin ekdosi tis vasis einai to state enos document pou mporei na einai kati san draft->submitted->accepted->live se periptosi pou thes na ylopoihseis lifecycles gia ta documents sto site sou (px ean exeis authors, reviewers, publishers etc) opou to document pernaei kapies faseis mehri na vgei live.

Telos kalo einai na yparxei version field sto document gia na simatodoteis diafores ekdoseis aftou (px gia multilingual sites etc)

Fysika ola afta tha ta eiha apofygei an eiha hrisimopoihsei kati san auto alla to hosting mou den ypostirizei PHP5 akoma.

Απάντηση

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

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

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