<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>SQL Server (και άλλες databases)</title><link>https://www.dotnetzone.gr:443/cs/forums/28/ShowForum.aspx</link><description>Θέματα που αφορούν τον SQL Server (7.0, 2000, 2005) αλλά και Oracle, Access, DB2, MySQL, κλπ.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Εναλλακτικό Ερώτημα (ms access)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/14016.aspx</link><pubDate>Wed, 14 Jun 2006 22:36:12 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:14016</guid><dc:creator>KoYkoY</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/14016.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=14016</wfw:commentRss><description>Cap ευχαριστώ πολύ για τις αναλυτικές οδηγίες και τα χρήσιμα links.&lt;img src="/cs/emoticons/emotion-2.gif" alt="Big Smile" /&gt;</description></item><item><title>Απ: Εναλλακτικό Ερώτημα (ms access)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/14011.aspx</link><pubDate>Wed, 14 Jun 2006 18:38:57 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:14011</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/14011.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=14011</wfw:commentRss><description>&lt;P&gt;Σου έγραψα κάποια πράγματα για τους Normal Forms (Κανονικές Μορφές) αλλά δυστυχώς ένα αναπάντεχο crash ήταν η αιτία να χαθούν. Παντως, για να δεις ορισμένα πράγματα για τις κανονικές μορφές (οι οποίες αποτελούν guidelines για το σχεδιασμό σχεσιακών βάσεων δεδομένων) μπορείς να πας π.χ. εδώ: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.answers.com/topic/database-normalization"&gt;http://www.answers.com/topic/database-normalization&lt;/A&gt;&lt;BR&gt;&lt;A href="http://www.phlonx.com/resources/nf3/"&gt;http://www.phlonx.com/resources/nf3/&lt;/A&gt;&lt;BR&gt;&lt;A href="http://en.wikipedia.org/wiki/Database_normalization"&gt;http://en.wikipedia.org/wiki/Database_normalization&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Ο επαναλαμβανόμενος αριθμός ομοειδών πεδίων σε μια γραμμή με τον κίνδυνο κάποια να μένουν κενά ειναι απαγορευτικός από τα εν λόγω guidelines, εμμέσως μεν, σαφώς δε. Προκύπτουν διάφορα προβλήματα ως προς το χώρο αποθήκευσης αλλά και την ενημέρωση σε περίπτωση π.χ. που θέλεις να διαγράψεις ολοσχερώς κάποιο συμμετέχοντα (σε ποιό από τα 18 πεδία βρίσκεται σε κάθε εγγραφή);&lt;/P&gt;
&lt;P&gt;Για να δούμε όμως μια άλλη προσέγγιση της σχεδίασης που βρίσκεται στον 3NF:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" hspace=0 src="/cs/photos/general/images/14008/original.aspx" align=baseline border=0&gt;&lt;/P&gt;
&lt;P&gt;Εχω αυθαιρετήσει λιγάκι ως προς τον πίνακα tblMembersList λόγω του οτι δεν ειχα ιδιαίτερη πληροφορία για αυτόν. Αυτό που κάνω εδώ είναι να έχω ορίσει ένα πίνακα για τα groups (θεωρώ οτι ένα group είναι η ονομασία του και η ημ/νία του - δηλ. ουσιαστικά η δημιουργία ενός group είναι η ημ/νία του) και σε αυτο μπορούν να συμμετέχουν n συμμετέχοντες οι οποίοι επιλέγονται από τον πίνακα tblMembersList. Ως ενδιάμεσο πίνακα έχω τον πίνακα tblParticipations, του οποίου κάθε γραμμή είναι το primary key (ενα autonumber), και ο συνδυασμός groupid/memberid. Καθε γραμμή του πίνακα δηλ. είναι μια συμμετοχή ενός ατόμου σε ένα γκρουπ. (Το primary key - participationID θα μπορούσε και να μην υπάρχει, μια και ο συνδυασμός groupid/memberid προσδιορίζει μοναδικά κάθε εγγραφή του πίνακα - είναι από μόνη της ένα surrogate key).&lt;/P&gt;
&lt;P&gt;Ετσι έχεις την ευκολία να ορίσεις από έναν ως n συμμετέχοντες σε κάθε γκρουπ, ενώ αν θέλεις περιορισμούς ως προς το μέγιστο αριθμό μπορείς να τους επιβάλλεις στην πλευρά του user interface.&lt;/P&gt;
&lt;P&gt;Για να κάνουμε το Query που θέλεις σε αυτό τον πίνακα:&lt;/P&gt;
&lt;P&gt;SELECT tblMembersList.memberName, tblGroup.groupDescription, tblGroup.groupDate&lt;BR&gt;FROM tblMembersList INNER JOIN (tblGroup INNER JOIN tblParticipations ON tblGroup.groupID = tblParticipations.groupId) ON tblMembersList.memberId = tblParticipations.memberId&lt;BR&gt;ORDER BY tblMembersList.memberName, tblGroup.groupDescription, tblGroup.groupDate;&lt;/P&gt;
&lt;P&gt;Και σχηματικά:&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" hspace=0 src="/cs/photos/general/images/14009/original.aspx" align=baseline border=0&gt;&lt;/P&gt;
&lt;P&gt;Το αποτέλεσμα που παίρνω (χρησιμοποίησα το πεδίο groupDescription αντί του groupID για να είναι πιό ξεκάθαρο):&lt;/P&gt;
&lt;P&gt;&lt;IMG alt="" hspace=0 src="/cs/photos/general/images/14010/original.aspx" align=baseline border=0&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Ο χρόνος εκτέλεσης είναι αμελητέος. &lt;/P&gt;
&lt;P&gt;Βεβαια, δεν ειμαι απόλυτα σίγουρος οτι θέλεις να κάνεις ακριβώς αυτό, όμως με βάση τα δεδομένα που μας δίνεις, κατά 90% θα πρέπει να σε καλύπτει κάτι τέτοιο.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Εναλλακτικό Ερώτημα (ms access)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/14002.aspx</link><pubDate>Wed, 14 Jun 2006 04:24:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:14002</guid><dc:creator>KoYkoY</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/14002.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=14002</wfw:commentRss><description>&lt;P&gt;Οι συμμετέχοντες μπορεί να είναι οι ίδιοι αλλά και διαφορετικοί για άλλο γκρουπ - όταν λέω γκρουπ το ταυτίζω με το GroupID. Ακόμα υπάρχει η πιθανότητα διαφορετικά γκρουπς αλλά με τους ίδιους συμμετέχοντες&amp;nbsp;να παίζουν την ίδια ημερομηνία.&lt;BR&gt;To 1NF έχει σχέση με το σχεσιακό μοντέλο; Τί είναι ακριβώς;&lt;img src="/cs/emoticons/emotion-5.gif" alt="Wink" /&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Εναλλακτικό Ερώτημα (ms access)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/13998.aspx</link><pubDate>Wed, 14 Jun 2006 02:02:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:13998</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/13998.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=13998</wfw:commentRss><description>Συμφωνώ οτι πρέπει να επανασχεδιαστεί. Ετσι οπως έχει σχεδιαστεί δεν καλύπτει ουτε τον 1NF. Για να ξανασχεδιαστεί όμως (αν το επιθυμείς), θα πρέπει να μας δώσεις μερικές πληροφορίες ακόμα όπως:&lt;br /&gt;
&lt;br /&gt;
Τα groups είναι ad-hoc (δημιουργούνται δηλ. με βάση μια συγκεκριμένη ημ/νία) ή χρησιμοποιούνται συνέχεια, το ίδιο γκρουπ σε διάφορες ημ/νίες;&lt;br /&gt;
&lt;br /&gt;
Αν ισχύει το δεύτερο από παραπάνω, κάθε φορά ένα γκρουπ έχει διαφορετικούς συμμετέχοντες;&lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Απ: Εναλλακτικό Ερώτημα (ms access)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/13997.aspx</link><pubDate>Wed, 14 Jun 2006 00:26:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:13997</guid><dc:creator>sovilo</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/13997.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=13997</wfw:commentRss><description>Μάλλον το πρόβλημα σου είναι ότι έχεις σχεδιάσει την βάση με λάθος τρόπο.&lt;br /&gt;
&lt;br /&gt;
Εγώ θα έβαζα τους συμμετέχοντες σε μια στήλη και εκεί μέσα θα καταχωρούσα για τον καθένα ξεχωριστά την ημερομηνία που έχει παρουσιαστεί. Έτσι δεν θα είχα κενά πεδία (όπως φαντάζομαι ότι έχεις) στους participant 1-18 και θα είχα μόνο 3 στήλες. Το αποτέλεσμα θα ήταν μικρότερη σε μέγεθος βάση και πιο εύκολα διαχείρισημη. &lt;br /&gt;
&lt;br /&gt;</description></item><item><title>Εναλλακτικό Ερώτημα (ms access)</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/13996.aspx</link><pubDate>Tue, 13 Jun 2006 23:21:20 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:13996</guid><dc:creator>KoYkoY</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/13996.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=28&amp;PostID=13996</wfw:commentRss><description>&lt;P&gt;Σε μια βάση δεδομένων της ms access έχω ένα πίνακα [tblGroup] με βασικό κλειδί ένα πεδίο autonumber [GroupID]&amp;nbsp; και ένα πεδίο ημερομηνίας [GroupDate] ο οποίος περιέχει 18 επιπλέον πεδία όπου καταχωρούνται ονόματα συμμετεχόντων [Participant1] έως 18. Ο χρήστης συμπληρώνει την κάθε εγγραφή μέσω μίας φόρμας με 18 σύνθετα πλαίσια που παίρνουν τιμές από τη λίστα μελών [tblMembersList]. Θέλω να δημιουργήσω&amp;nbsp; μία αναφορά όπου ο χρήστης θα βλέπει ομαδοποιημένες ανά συμμετέχοντα τις ομάδες και τις ημερομηνίες που έχει πάρει μέρος.&lt;/P&gt;
&lt;P&gt;Για να το καταφέρω αυτό έχω δημιουργήσει ένα ερώτημα συνένωσης qrGroupMembers ως εξής:&lt;BR&gt;SELECT [Particiapant1] As [Participant], [GroupID], [GroupDate]&lt;BR&gt;FROM tblGroups&lt;BR&gt;WHERE Nz([Participant1])&amp;lt;&amp;gt;""&lt;BR&gt;UNION SELECT [Participant2], [GroupID], [GroupDate]&lt;BR&gt;FROM tblGroups&lt;BR&gt;WHERE Nz([Participant2])&amp;lt;&amp;gt;""&lt;BR&gt;κλπ έως 18;&lt;/P&gt;
&lt;P&gt;Την αναφορά τη βασίζω στο παραπάνω ερώτημα. Ο τρόπος αυτό αν και λειτουργεί σωστά είναι απελπιστικά αργός ακόμα και όταν έχω να κάνω με λίγες εγγραφές. Υπάρχει κάποιος άλλος τρόπος που θα μου δίνει τα αποτελέσματα που θέλω πιο γρήγορα;&lt;/P&gt;</description></item></channel></rss>