בקשת עזרה בהשמה SQL

SharonaX

New member
בקשת עזרה בהשמה SQL

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

(אני חושבת שזה מה שהטבלאות הנ"ל מציגות)

http://www.codeproject.com/Articles/383188/Sunset-and-Sunrise-Calculation-Based-on-Latitude-L - זמני שיקעה\זריחה לפי מיקום
http://crm2011wiki.wordpress.com/2012/07/15/43/ תארכים עבריים.
http://crm2011wiki.wordpress.com/2012/07/15/find-all-hebrew-hollidays-with-sql/ חגים

איך אני יכולה ליצרת משלושת אלו טבלה מאוחדת ?
תודה.
 

i t a i b

New member
שליפות

שלום רב,

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

בהצלחה
 

SharonaX

New member
תודה, המשך

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

האם עלי להריץ בכל פעם שאילתה בנושא ? האם עלי ליצר SP או מה הדרך הנכונה ?
תודה
 

pitoach

New member
נקודות: קטנות

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

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

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

pitoach

New member
לא רק שמתאים אלא לפעמים מאוד מומלץ

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

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

1. טבלת מספרים: טבלה פשוטה שמכילה רק מספרים מ 1 ועד כמה שיותר בהתאם למערכת (הכוונה למאות מליוני מספרים לפעמים) .
2. טבלת תאריכים: שוב מדובר ב"סתם" טבלה שמכילה את כל התאריכים ב 50 שנים האחרונות או בהתאם לכמה שצריך בהתאם למערכת.
ועוד...

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

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

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

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

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

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

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

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

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

גרי רשף

New member
:-\רע ומאכזב

לפני 3 שנים פרסמתי פוסט מושקע על חישוב הלוח העברי בעזרת TSQL:
http://blogs.microsoft.co.il/gerireshef/2011/03/29/הלוח-העברי-בעזרת-tsql/
כעבור מספר חודשים פרסמתי פוסט המשך לגבי מציאת מועדי החגים:
http://blogs.microsoft.co.il/gerireshef/2011/10/17/מועדי-ישראל/
זה היה אתגר לא פשוט לפצח את נוסחת חישוב הלוח העברי ("חוכמת העיבור" בלשון המסורת), ודאגתי לכלול בפוסט הסבר מאיר עיניים לגביו - הסבר שיכול לעזור לכל מי שמתעניין בנושא, גם אם אינו עוסק ב-SQL.
למותר לציין שזה אולי הפוסט שלי שאני הכי גאה בו.
קצת מתסכל לגלות שבאיזה אתר העתיקו את הקודים מהפוסטים שלי, ללא קרדיט, ללא עריכה נוחה של הקוד, ללא הסברים..
כסף על הבלוג שלי אינני מקבל, ושכרי בעצם קיומו; ולכן לא נגרע ממני דבר.
חבל שיש מי שמתנהג כך.

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

שימוש נעים ומועיל!
ו
 

i t a i b

New member
זכויות יוצרים

גרי היקר,

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

המשך לפרם פוסטים מעולים !

בהצלחה

איתי.
 

pitoach

New member
דרך אגב אני רואה שם קרדיט מפורש אלייך

שים לב שיש שם בהתחלה בצורה מאוד ברורה את המשפט:
The following script is taked from the original post:
והקישור מוביל למאמר שלך


* חשוב לדעת, שקרדיט לא הופך פעולות העתקה של קניין רוחני לחוקי!
 

pitoach

New member
לגבי השאלה המקורית

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

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

בתוך הלולאה תבצע פעולה פשוטה של שאיתת INSERT... select כאשר בחלק של ה SELECT תבחר את הערכים בהתאם לפונקציות השונות שהבאת בקישורים.
 

SharonaX

New member
תודה, נסיון להבין יותר בבקשה.

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

תודה
 

pitoach

New member
אנסה לעבו על הנודות מהר

1. הצלחתם להבהי לעצמכם, זה טוב

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

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

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

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

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

pitoach

New member
* הנודות=הנקודות, * לעבו = לעבור

* בעיות במקלדת...
מצטער
 
למעלה