ABA


"מאמר : שמירה על מסד נתונים מצומצם כמה שיותר ( יעילות)"
גירסת הדפסה        
קבוצות דיון בניית אתרים נושא #12905 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 12905
lior066

   02:40   14.09.07   
אל הפורום  
  מאמר : שמירה על מסד נתונים מצומצם כמה שיותר ( יעילות)  
 
   מה המצב אנשים , אז ככה הרבה זמן לא הפגנתי נוכחות פה בפורום אז החלטתי להכניס מאמר ככה בישביל כולם כדי שתראו שאני עדיין חיי וקיים.


טוב אז הפעם אני "אחנך" אותכם קצת על יעילות במסדי נתונים ובשמירת אופציות קבועות.

טוב נגיד עכשיו יש לנו טופס שאנחנו רוצים לשמור , ויש בו נגיד רשימה של 40 תחביבים ( משהו שקשור לטופס נגיד הרשמה לאתר הכרויות ) , ואתם רוצים לשמור את ה 40 תחביבים האלה של הבנאדם.

עכשיו דבר ראשון שאתם תעשו זה בטוח ליסט של צ'ק בוקס וזה הדבר הנכון היעיל והכי נוח לעשות.

עכשיו מבחינת מסד הנתונים שלכם אתם מתחילים להסתבך קצת.
מה עכשיו לעשות 40 עמודות של כן ולא עם השם של התחביב?
להכניס סטרינג של ID של התחביב + כן ולא ?

אז זהו שלא אתם יכולים לעשות הכל פשוט וקל בתוך עמודה אחת ולשמור אותה בתור מספר.

אז אתם שואלים איך עושים את זה?

טוב אז אם מישהו מכם מכיר את הייצוג הבינארי שמחשב משתמש בו אז ההסבר יהיה פשוט וקל יותר.

המבנה הבינארי בנוי מ אחדים ואפסים , ואם אתם מסכימים איתי שניתן לייצג 1 ככן ו 0 כלא אז אנחנו בדרך הנכונה , ( מי שלא מסכים איתי שיחזור לכיתה ז ויתחיל להקשיב טוב טוב בשיעורים)

נגיד ויש לנו עכשיו רשימה של ה 40 תחביבים האלה ניתן לייצג אותם באופן הבא : 10011000000011000000011100000.... וכדומה עד 40 שכן 0 הוא לא נבחר התחביב ו 1 נבחר התחביב.

עכשיו מה שיפה פה שבנייה נכונה של מסד נתונים כמו שצריך ואתם לא תאמינו כמה גמישות אתם יכולים לקבל עם השיטה הזאת ( אתם יכולים גם ליצור מחולל טפסים עם השיטה הזאת בקלות ולהוסיף כמה צקים שאתם רוצים )....

עכשיו אנחנו נעשה הגדרה שכזאת:
בישביל ייצוג של מספר בינארי אנחנו נשתמש בנוסחה של :


2^n

עכשיו 2 בחזקת N זאת הדך לייצוג מספרים בינאריים בצורה של מספר דצימלי.
עכשיו נגדיר תחביב מספר 1 = 1
תחביב 2 = 2
תחביב 3 = 4
תחביב 4 = 8
תחביב 5 = 16
וכן הלאה.. אם אתם מבינים איך אני עובד פה בהקשר של החזקות.

נגיד עכשיו סימתי את תחביב 1, 3, ו 5 סבבה אם אני אחבר את התוצאות יצא לי המספר 1+4+16 = 21 שזה ביצוג בינארי : 10101 שזה 1 עבור מסומן ו 0 עבור לא מסומן.

עכשיו כל מה שנשאר לנו לתת זה לשמור את התוצאה המשכוללת של הצ'קים שלנו ולהכניס לתוך המסד נתונים ( בתור בינארי או מספר רגיל לבחירתכם) , ואחרי זה שרוצים לשלוף את הנתונים פשוט מאוד מבצעים פירוק לאחור.


מה שיפה פה שאם מוסיפים צקים בהמשך זה לא פוגע בשום תהליך ואאפשר פשוט להכניס אותם דינאמי לתוך הדף בלי לשנות שום דבר בתכנות.

אם רוצים לבצע חיפוש מדוייק לפי תחביבים פשוט מכניסיים מספר משוכלל של התוצאה שאתם רוצים במשפט פשוט ונוח וזה מוצא בלי להגיד משפטי SQL מורכבים.

ויש פה עוד המון , בעיקרון לדעתי זאת אחת השיטות הטובות ביותר שקיימות כדי לייצג מספר של מאפיינים בוליאנים.


שיהיה לכולם בהצלחה חג שמח ושנה טובה לכולם.


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  תודה רבה MoonHunter 14.09.07 16:17 1
     טוב קצת פירוט ויותר טכני.. lior066 15.09.07 23:43 2
         מכתב MoonHunter 16.09.07 01:50 4
             טוב.. בקצרה.. lior066 16.09.07 12:54 5
                 לדעתי הרעיון לא ממש טוב MoonHunter 19.09.07 18:42 7
  נחמד מאוד, תודה רבה. asco88  16.09.07 00:04 3
  קצת הסתבכתי עם השיטה שלך .. code_blue  19.09.07 10:02 6
     אני יביא לך את הדוגמא שלי ב ASP.NET lior066 19.09.07 22:35 8
         אני ממש ממש לא מתחבר עם ASP code_blue  20.09.07 09:56 9
             הסבר בעברית.. lior066 20.09.07 21:50 10

       
MoonHunter
חבר מתאריך 1.8.02
680 הודעות
   16:17   14.09.07   
אל הפורום  
  1. תודה רבה  
בתגובה להודעה מספר 0
 
   אני אשמח לפרוט יותר נרחב בנוגע לבינארים.
קצת בילבלת אותי בהסבר ואני בטוח שכאלו שפחות מנוסים בתיכנות יתבלבלו יותר.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

   23:43   15.09.07   
אל הפורום  
  2. טוב קצת פירוט ויותר טכני..  
בתגובה להודעה מספר 1
 
   אז ככה נגיד יש לי עכשיו רשימה של צקים , ואני רוצה לקחת מהטופס ולהפוך אותו למספר שאני יכול אחרי זה לפרק אותו לחלקים אז אני משתמש בקוד הבא ASP.NET

Dim sum As Long = 0
Dim i As Integer = 0
For i = 0 To (CheckBoxList1.Items.Count - 1)
If CheckBoxList1.Items.Item(i).Selected = True Then
sum += Math.Pow(2, i)
End If
Next

בסופו של דבר SUM ישמור בתוכו מספר שניתן לייצג בבינארית , בכן או לא ללא שארית ככה שתמיד יהיה לנו כן או לא.
אם יש סימון אז הוא פשוט ישתמש במשוואה של 2 בחזקת האינדקס שהוא הגיע אליו ואז הוא ידע מה כן ומה לא.

ובישביל להגיע להפך של זה פשוט עושים את אותו הדבר רק עם שורשים , וניתן לייצג את כל הצק שלנו כמו שצריך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MoonHunter
חבר מתאריך 1.8.02
680 הודעות
   01:50   16.09.07   
אל הפורום  
  4. מכתב  
בתגובה להודעה מספר 2
 
   לצערי אני לא יודע VB.
מה Math.Pow עושה?

האם אתה מתכוון לחבר את כל הID של הCheckboxים שסומנו וליצור מהם מספר?
כלומר אם checkboxים 7, 8 ו10 סומנו, אתה תחבר אותם למספר אחד 25 ואותו תהפוך לבינארי?

או שאתה תבנה מספר כזה
0000001101
כלומר 0 עבור מה שלא סומן ו1 עבור מה שסומן ואחר כך להפוך את זה למספר בינארי?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

   12:54   16.09.07   
אל הפורום  
  5. טוב.. בקצרה..  
בתגובה להודעה מספר 4
 
   אתה לא אמור לדעת VB זה בעיקרון סינטקס שממש דומה לדברים לשפות אחרות כי אין פה דברים מורכבים.

MATH.POW זה העלאה בחזקה.
וכן אם אני רוצה לחבר כמה צקים אז אני יוצר מספר אחד, ויצא לי פלט כמו שאמרת פה וכן כמו שהבנת אתה מקבל 1 עבור צק שסומן ו 0 עבור צק שלא סומן , ממש פשוט,

ובשביל להגיע לההפך אתה פשוט משתמש באלגוריתם של מעבר ממספר דצימלי לבינארי ויש מספיק דוגמאות בגוגל. ( הרעיון הוא לחלק ב 2 את המספר ואם יש שארית זה 1 אם אין זה 0 ולהמשיך עד שמגיעים ל 0 בחלוקה )


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
MoonHunter
חבר מתאריך 1.8.02
680 הודעות
   18:42   19.09.07   
אל הפורום  
  7. לדעתי הרעיון לא ממש טוב  
בתגובה להודעה מספר 5
 
   הרי אם אתה יוצר טופס כ"כ מסובך הוא למטרת חיפוש עתידית על אותם נתונים והצגת תוצאות רלוונטיות.
בשביל זה יש צורך להכניס את כל התוצאות לשדות שונים.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   00:04   16.09.07   
אל הפורום  
  3. נחמד מאוד, תודה רבה.  
בתגובה להודעה מספר 0
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
code_blue  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.7.06
21280 הודעות, 7 פידבק
   10:02   19.09.07   
אל הפורום  
  6. קצת הסתבכתי עם השיטה שלך ..  
בתגובה להודעה מספר 0
 
   איך אני עושה תספירה של הצ'קליסטים?!
כדי שאוכל לעדכן , אני בד"כ עובד עם PHP ..

אני יודע לקבל נתון .. לתוך משתנה איך אני יכול לקבל את כולם כייצוג
של "0" או "1" ..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

   22:35   19.09.07   
אל הפורום  
  8. אני יביא לך את הדוגמא שלי ב ASP.NET  
בתגובה להודעה מספר 6
 
   ובנוגע לשאמרתם שזה לא יעיל אז בדקתי את זה וזאת הדרך המקובלת בהנדסת תוכנה.

Public Function GetUserGrup(ByVal ID As Integer) As String

Dim strsql As String
strsql = "Select UsersGrup from content where id=" & ID
Dim Ug As Long = 0
If Database.Execute(strsql) = "OK" Then
rs = Database.CommandObject.ExecuteReader()
If rs.HasRows Then
Do While (rs.Read())
Ug = rs("usersgrup")
Loop
End If
rs.Close()
Database.close()
End If

Dim strTF As String = ""
Dim temp As Integer = Ug
While temp > 0
If temp Mod 2 <> 0 Then
strTF += "T"
Else
strTF += "F"
End If
temp = Math.Ceiling((temp / 2) - (temp Mod 2))
End While
Return strTF
End Function
End Class

זה קוד שמחזיר T או F
ברצף במילה ואז אתה בודק לפי האורך של המילה אות אות שווה לפי האינדקס.

אולי זה לא הקוד הכי יעיל פשוט עשיתי עד שעבד לי עדיף שתבדוק אם אפשר ליעל

תעבור על זה :
http://he.wikipedia.org/wiki/%D7%91%D7%A1%D7%99%D7%A1_%D7%91%D7%99%D7%A0%D7%90%D7%A8%D7%99

מומלץ..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
code_blue  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 5.7.06
21280 הודעות, 7 פידבק
   09:56   20.09.07   
אל הפורום  
  9. אני ממש ממש לא מתחבר עם ASP  
בתגובה להודעה מספר 8
 
   אז אני אשמח אם תוכל פשוט לתת איזה שורה הסבר על כל פונקצייה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
lior066

   21:50   20.09.07   
אל הפורום  
  10. הסבר בעברית..  
בתגובה להודעה מספר 9
 
   ערכתי לאחרונה בתאריך 20.09.07 בשעה 21:50 בברכה, lior066
 
טוב אז אני יסביר לך בקצרה מה עשיתי ואחרי זה אני ינסה לבנות פונקצייה ב C שתהייה חופפת ל PHP אז מקווה שתבין.
מה שעשיתי זה לקחת את המספר הסופי שיצא לי בסופו של דבר מהפלט , ואז בלולאה להתחיל לחלק את המספר ב 2 , אם יש לי שארית אז התיבה סומנה אם אין לי שארית התיבה לא סומנה.

עכשיו בבידקה עצמה אני עושה עיגול של החילוק אחרי הבדיקה נגיד ב 7 לחלק 2 התשובה תהייה 3 וחצי - יש לי שארית , ואז החילוק הבא שלי יהיה 3 חלקי 2 עד שאני מגיע למצב של 0 חלקי 2 שם אני מפסיק.

ואז יש לי רשימה של כן ולא אם סומנו.


string GetCategoryChack(int temp)
{
string strTF="";
while (temp >0)
{
if ((temp % 2) != 0)
{
strTF = strTF + "T";
}
else
{
strTF = strTF + "F";
}
temp = ceil((temp / 2) - (temp % 2) );
}
return strTF;
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net