ABA


"mySQL שאלה על מבנה DB"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #20232 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 20232
The Boss  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.9.08
6889 הודעות, 2 פידבק
   19:52   29.09.13   
אל הפורום  
  mySQL שאלה על מבנה DB  
 
   שלום,

איך יהיה הכי נכון לבנות DB שצריך לאחזר מידע על שמות רחובות מ 60 ערים?

טבלה 1 -> שמות ערים בלבד מנורמלים.
טבלה 2 -> שמות רחובות מנורמלים עם קישור לשם העיר מטבלה 1.

יש כ 40,000 רשומות.

רעיון אחר?

תודה רבה

קופון הנחה של 5% ל iHerb
https://goo.gl/Q6Tr1S
הרבה יותר טוב מ Vitacost


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

  האשכול     מחבר     תאריך כתיבה     מספר  
  מכתב VeNom  29.09.13 20:12 1
     תודה, The Boss  29.09.13 21:42 3
         אם יש כפילויות VeNom  29.09.13 23:30 7
  תשובה, last_test 29.09.13 21:16 2
     תודה, The Boss  29.09.13 23:13 5
         שאלת מה הכי נכון, לא מה הכי קל... הפתרון הראשון של last_test לטעמי הוא הכי יעיל Ice Cold  30.09.13 00:08 8
             מכתב The Boss  30.09.13 17:38 9
                 אין כאן פתרון הכי נכון. ShocKi  30.09.13 18:18 10
                     מכתב The Boss  30.09.13 18:45 11
                         אני לא מכיר דרך לעשות את מה שאתה מבקש במסד נתונים רלציוני. ShocKi  01.10.13 01:15 12
                             מכתב The Boss  01.10.13 01:19 13
  אני הייתי הולך עם הפתרון שלך משה הלולן 29.09.13 23:03 4
     תודה רבה. The Boss  29.09.13 23:14 6

       
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   20:12   29.09.13   
אל הפורום  
  1. מכתב  
בתגובה להודעה מספר 0
 
   האם יש כפילויות בשמות הרחובות? כלומר רחוב הרצל בת"א ורחוב הרצל בגבעתיים? אם מדובר על אותו רחוב מבחינתך אז:

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

לכל עיר יש רחוב אחד או יותר(רחוב הרצל ורחוב בן גוריון) ולכל רחוב יש עיר אחת או יותר(הרצל בת"א, הרצל ברמת גן).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
The Boss  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.9.08
6889 הודעות, 2 פידבק
   21:42   29.09.13   
אל הפורום  
  3. תודה,  
בתגובה להודעה מספר 1
 
   כמובן שיש כפילויות בשמות של רחובות.
אך יש לי קו אורך/רוחב ייחודי לכל רחוב.

קופון הנחה של 5% ל iHerb
https://goo.gl/Q6Tr1S
הרבה יותר טוב מ Vitacost


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   23:30   29.09.13   
אל הפורום  
  7. אם יש כפילויות  
בתגובה להודעה מספר 3
 
   כלומר הרצל רמת גן והרצל ת"א לא זהות, אז אין צורך בטבלת אמצע(מכיוון שהיחס כאן הוא יחיד לרבים - לכל עיר יש הרבה רחובות אבל לכל רחוב יש רק עיר אחת).

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

משהו כזה:



id | streetname | city | lon | lat.....


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
last_test
חבר מתאריך 20.8.13
328 הודעות
   21:16   29.09.13   
אל הפורום  
  2. תשובה,  
בתגובה להודעה מספר 0
 
   אני אומנם רחוק מלהיות DBA אבל תמיד אני חושב על מה הדרך הכי נוחה עם הכי פחות וויתורים על אופטימיזציה כדי לתחזק את הנתונים שלי.

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

city_id
city_title


street_id
street_city_id
street_title

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

פתרון אחר יכול להיות להחזיק שדה במקום street_city_id קבוצה של איברים מופרדים בפסיק שיכילו באיזה ערים אותו רחוב מופיע ואז באמצעות IN/NOT IN אתה מבצע שליפות.

חסרון עיקרי הוא עדכון/מחיקה של איבר מהשדה הזה, לא אופטימלי בכלל.

פתרון נוסף הוא להחזיק טבלה שלישית, שתהיה סוג של טבלה מקשרת בין עיר לרחוב, זה שדרוג של הפתרון הראשון, אתה מחזיק טבלה מהסוג הזה:

city_related_streets

ומחזיק שם את הרשומות הכפולות של עיר->רחוב (רק לפי המפתחות).


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
The Boss  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.9.08
6889 הודעות, 2 פידבק
   23:13   29.09.13   
אל הפורום  
  5. תודה,  
בתגובה להודעה מספר 2
 
   נראה לי מסורבל מאוד.

קופון הנחה של 5% ל iHerb
https://goo.gl/Q6Tr1S
הרבה יותר טוב מ Vitacost


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Ice Cold  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 3.8.02
28041 הודעות, 19 פידבק
   00:08   30.09.13   
אל הפורום  
  8. שאלת מה הכי נכון, לא מה הכי קל... הפתרון הראשון של last_test לטעמי הוא הכי יעיל  
בתגובה להודעה מספר 5
 
ונותן לך את הגמישות המירבית לשחק עם הנתונים.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
The Boss  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.9.08
6889 הודעות, 2 פידבק
   17:38   30.09.13   
אל הפורום  
  9. מכתב  
בתגובה להודעה מספר 8
 
   נראה לי שהכי נכון זה ליצור: (הפתרון השלישי שהוא מציע)
טבלה 1-> ערים כולל נרמול עבור מפתח ראשי.
טבלה 2-> שמות רחובות כולל נרמול עבור מפתח ראשי.
טבלה 3-> 2 שדות הכוללים את הקישור בין עיר לרחוב באמצעות המפתחות.

מה דעתך?

קופון הנחה של 5% ל iHerb
https://goo.gl/Q6Tr1S
הרבה יותר טוב מ Vitacost


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק
   18:18   30.09.13   
אל הפורום  
  10. אין כאן פתרון הכי נכון.  
בתגובה להודעה מספר 9
 
   השאלה היא מה אתה כמי שמשתמש ב DB צריך.

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

אפשר לומר על פתרון שהוא לא נכון אם הסכמה הרלציונית לא מנורמלת בהתאם לדרישות (3CNF, BCNF וכו'), אבל יכול בהחלט להיות שיש כמה דרכים לייצג את הפתרון - החוכמה היא להתאים את הפתרון בהתאם לדרישות.


קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
The Boss  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.9.08
6889 הודעות, 2 פידבק
   18:45   30.09.13   
אל הפורום  
  11. מכתב  
בתגובה להודעה מספר 10
 
   אז במצב כזה אפשר להוסיף את שם הרחוב החדש ולקבל מזהה חדש עבורו.


יש 2 דרישות עיקריות:
1. DB ייעיל ללא נתונים כפולים.
2. תחזוקה בנויה נכון.


תודה רבה

קופון הנחה של 5% ל iHerb
https://goo.gl/Q6Tr1S
הרבה יותר טוב מ Vitacost


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ShocKi  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.3.02
20171 הודעות, 10 פידבק
   01:15   01.10.13   
אל הפורום  
  12. אני לא מכיר דרך לעשות את מה שאתה מבקש במסד נתונים רלציוני.  
בתגובה להודעה מספר 11
 
   כדי להתגבר על הקושי שהצגתי בהודעה הקודמת הפתרון הוא לשכפל נתונים.
כלומר שהרשומה הרצל בחיפה לא תהייה קשורה לרשומה הרצל בתל אביב.
כך שאם אחת מהן תתעדכן לא תהייה השפעה על הערים האחרות.
זה אומר שלצורך העניין לא תהייה לך טבלת

street id
street name

כמו שאתה מבין זה יוצר כפילות נתונים (או שלא, תלוי איך מסתכלים על זה).

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

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



קאש-באק ישראלי: https://www.cashback.co.il/?uref=33330
קאשבק לAsos ואמזון דרך Ebates: https://goo.gl/MX87Y7 - מקבלים 10$ לאחר שימוש ראשון.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
The Boss  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.9.08
6889 הודעות, 2 פידבק
   01:19   01.10.13   
אל הפורום  
  13. מכתב  
בתגובה להודעה מספר 12
 
   אז בעצם זה תלוי איך מסתכלים על זה,
אם שם רחוב הוא ייחודי ברמת עיר או ברמת מדינה.

קופון הנחה של 5% ל iHerb
https://goo.gl/Q6Tr1S
הרבה יותר טוב מ Vitacost


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
משה הלולן לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 11.6.13
4818 הודעות, 8 פידבק
   23:03   29.09.13   
אל הפורום  
  4. אני הייתי הולך עם הפתרון שלך  
בתגובה להודעה מספר 0
 
   במקרה הזה לא מפריע לי שיהיה 2 עמודות עם השם הרצל, לא סיפור גדול.
זה עדיף מאשר להוסיף עוד טבלה ולסבך את העניינים


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
The Boss  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 14.9.08
6889 הודעות, 2 פידבק
   23:14   29.09.13   
אל הפורום  
  6. תודה רבה.  
בתגובה להודעה מספר 4
 
  

קופון הנחה של 5% ל iHerb
https://goo.gl/Q6Tr1S
הרבה יותר טוב מ Vitacost


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

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

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



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