עזרה בתכנון
-
אני כותב תוכנה שאמורה לנהל מלון קטן נאמר כ25 חרדים.
המלון פתוח רק בקיץ כחודש וחצי.ע"פ המלצות גורפות מחברי האתר המידע ישמר בדטה בייס
הסתפקתי,
האם לבנות טבלה שמכילה 25 חדרים, ועל כל חדר לעשות 45 תאריכים זמינים,
או לעשות טבלה עם 45 ימים ועל כל יום 25 חדרים.
יתכן שבהמשך יוכלו לתפוס חדרים על פני כל השנה.כמו כן איך אני בכלל רושם בדטה בייס על חדר מסויים שתאריך פלוני הוא תפוס ובמשנהו הוא פנוי,
האם לעשות בטבלה 30 עמודות על כל תאריך בפני עצמו?אשמח לעצות מפי בעלי הניסיון
פורסם במקור בפורום CODE613 ב21/12/2015 19:57 (+02:00)
-
אם אתה רוצה תיכנון טוב, אתה צריך בעיקרון 3 טבלאות:
טבלת חדרים (מבחינתי מכילה 2 עמודות מזהה ושם החדר כאשר המזהה הוא identity ושם החדר יכול להיות גם מספר החדר, תוכל להוסיף גם עמודות כרצונך כגון הערות וכו)
טבלת הגדרות שבה יהיה מזהה חדר, תאריך התחלה, תאריך סיום.
טבלת תפוסה, שבו יהיה מזהה חדר, מתאריך, עד תאריך (ייתכן שתרצה כמובן גם מזהה לקוח, שזה מטבלת לקוחות שלא הזכרתי כי אתה לא הזכרת).
כל השאר באמצעות שאילתות, פרוצדורות וכו'. כלומר אתה בעצם מפריד לחלוטין, כי התפיסה המקורית של מסד נתונים היא, שה"מידע" שנשמר בטבלאות הוא מנימיליסטי, ואילו ה"חוכמה" היא בעצם בקוד, או בשאילתות וכדומה (ואם נוטים מהכלל הזה לפעמים זה מטעמי ביצועים, אבל לא מסיבות של ארכיטקרטורה).
אם אתה מתחיל בדטה בייסים ייתכן שיהיה לך קשה מאוד עכשיו, ותצטרך הרבה עזרה איך לתשאל את הנתונים הללו. ואנחנו כאן כדי לעזור.בהצלחה!
פורסם במקור בפורום CODE613 ב21/12/2015 21:38 (+02:00)
-
לכאורה דרך המלך היא 2 טבלאות
טבלת חדרים;
טבלת תאריכים; עם השדות חדר, תאריך (פרטי המזמין וכו' כמובן אבל לא על זה אנחנו מדברים)
בעת הזמנה של חדר מוסיף שורה בטבלת תאריכים וכך גם בודק האם פנוי
ואידך זיל גמור.שוין, עד ש'שלח'תי ארכיטקט הספיק להרחיב הרבה יותר.
בהצלחה.פורסם במקור בפורום CODE613 ב21/12/2015 21:44 (+02:00)
-
תודה רבה, תשובות מאירות עיניים
אין כמו האתר הזה
נ.ב. חבל שקשה להגיע אליו בלי כתובת מדוייקת
נסו:
http://search.clearch.org/?direct_search=2&reason=2&uid=260615&q=CODE613M
ותראו את התוצאה
פורסם במקור בפורום CODE613 ב21/12/2015 22:45 (+02:00)
-
@יאן גולד
נ.ב. חבל שקשה להגיע אליו בלי כתובת מדוייקת
נסו:
http://search.clearch.org/?direct_search=2&reason=2&uid=260615&q=CODE613M
ותראו את התוצאה
זה בגלל שאתה לא מחפש בגוגל אלא בclearch מנוע החיפוש של אינטרנט רימון/אתרוג...
ואכן - אין על האתר שלנו יש כאן חברים נפלאים עם ידע נרחב והרבה רצון ושמחה לעזור בכל שאלה / תקלה ובעיה.
אשרינו שזכינו!!!פורסם במקור בפורום CODE613 ב21/12/2015 22:56 (+02:00)
-
@יאן גולד
תודה רבה, תשובות מאירות עיניים
אין כמו האתר הזה
נ.ב. חבל שקשה להגיע אליו בלי כתובת מדוייקת
נסו:
http://search.clearch.org/?direct_search=2&reason=2&uid=260615&q=CODE613M
ותראו את התוצאה
https://www.google.com/search?q=code613m
פורסם במקור בפורום CODE613 ב22/12/2015 12:49 (+02:00)
-
בשאלה דלעיל, מתכנת ותיק יעץ לי לא לעשות טבלת תאריכים אלא לקחת אותם מטבלת ההזמנות, שהרי כשמזמינים חדר רושמים מאיזה ועד איזה תאריך ואח"כ לעשות סינון על החדר המבוקש האם בתאריך מסויים הוא פנוי.
עשיתי שאילתא שנותנת לי טבלה עם תאריך כניסה ויציאה של כל ההזמנות לפי מספר החדר בשם DATES
כמו כן יש לי סטור פרוג'יסר (בשם GETDATESׂ) שמקבל שני תאריכים ומחזיר את מה שבין לבין, כדי לדעת את כל הטווח שהחדר תפוס
השאלה שלי איך לקחת את התאריכים שקיבלתי בטבלה DATES ולשלוח אותם כפרמטרים לסטור פרוסיגר
האמת שאני מקבל כמה שורות בטבלה איך אני ניגש שורה אחרי שורה?הערך במשתנים לצורך הדגמה בלבד
with dates as( select date_in,date_out from reservations where rooms=3) select * from dates declare @in datetime = '20151112' declare @out datetime = '20151114' exec getDates @start=@in ,@end=@out
פורסם במקור בפורום CODE613 ב22/12/2015 21:13 (+02:00)
-
וואקשה
----Create Demo DB --Rooms Table DECLARE @Rooms AS TABLE(ID INT, Name NVARCHAR(MAX)) INSERT INTO @Rooms VALUES(1,'Room A'),(2,'Room B') --Reservations Table DECLARE @Reservations AS TABLE(ID INT, CheckInDate DATE, CheckOutDate DATE, RoomID INT) INSERT INTO @Reservations VALUES (100,'2015-01-03','2015-01-09',1),(102,'2015-01-18','2015-02-09',1),(103,'2015-01-01','2015-01-17',2) DECLARE @Seasons AS TABLE(ID INT, Name NVARCHAR(MAX), StartDate DATE, EndDate DATE) INSERT INTO @Seasons VALUES (1,N'Winter','2015-01-01','2015-04-15'),(2,N'Spring','2015-06-18','2015-06-25') ; ----End of Demo DB ---- occupancy query (could be used as a view) -- Generate Calendar Table WITH Cal (CalendarDay) AS( SELECT CAST('2015-01-01' AS DATE) AS DateDay -- Calendar Start Date UNION ALL SELECT DATEADD(DAY,1,CalendarDay) FROM Cal WHERE DATEADD(DAY,1,CalendarDay) < '2016-01-01' -- Calendar End Date ) SELECT CalendarDay,Rooms.ID AS RoomID, Rooms.Name AS RoomName,Season.Name AS SeasonName, Res.ID AS ReservationID, CheckInDate, CheckOutDate, CASE WHEN Res.ID IS NULL THEN 1 ELSE 0 END IsRoomAvailable FROM Cal CROSS JOIN @Rooms AS Rooms -- create rooms calendar table (cartesian product) INNER JOIN @Seasons AS Season ON Cal.CalendarDay BETWEEN Season.StartDate AND Season.EndDate LEFT JOIN @Reservations AS Res ON Rooms.ID = Res.RoomID AND CalendarDay BETWEEN CheckInDate AND CheckOutDate -- join the reservations OPTION (MAXRECURSION 32767) -- allow recursion
פורסם במקור בפורום CODE613 ב22/12/2015 23:45 (+02:00)
-
@יאן גולד
לימדת אותי הרבה בכמה שורות האלה
אני תמיד מתלבט אם לכתוב תשובות ברמה גבוהה ולאתגר את השואל בלהבין או לכתוב שווה לכל נפש
פה הלכתי על רמה גבוהה יחסית - משתני טבלה, שאילתה ריקורסיבית ללוח שנה, שלושה סוגי JOIN שונים באותה שאילתה ו JOIN לפי טווחי תאריכים
ואני שמח על הפידבק שמראה שהחלטתי נכוןארכיטקט תודה על ההארה, שבשתא כיוון דעל על...
לדעתי אין השפעה על הביצועים אבל מכיוון שהפורום הוא מקור ידע אז תיקנתי בגוף הסקריפט (ואז שכחתי לתקן את ההערות בהתאם אז ערכתי שוב. . . )אם כבר דיברנו על כך שהפורום הוא גם מקור ידע, יאן גולד, אשמח שתסמן את הנושא כנפתר למען הבאים אחרינו ...
פורסם במקור בפורום CODE613 ב25/12/2015 00:05 (+02:00)
-
@יאן גולד
איפה אני מסמן שנפתר
בכל הודעה יש לך מצד שמאל למעלה (סמוך לשם המגיב) כמה אפשרויות של סימונים: אצבע למעלה - כדי לומר תודה למי שכתב לך את התשובה. כמו"כ זה מבטא הרבה פעמים הסכמה עם הדברים וכדו', כמו "אהבתי". ולפותח השרשור יש אפשרות לסמן "וי" שזה מוסיף סימן וי ירוק לתשובה שלחצת עליה, וגם לכל השרשור ברשימת הנושאים. כך אפשר לדעת מבחוץ שהנושא נפתר, ואפשר גם לדעת איזו תגובה פתרה אותו.
בהצלחה!אני תמיד מתלבט אם לכתוב תשובות ברמה גבוהה ולאתגר את השואל בלהבין או לכתוב שווה לכל נפש
softs - כל הכבוד לך על כל ההשקעה בפורום בעניית תשובות!! תמשיך לאתגר אותנו..
פורסם במקור בפורום CODE613 ב25/12/2015 09:13 (+02:00)
-
שאילתה ריקורסיבית ללוח שנה
במאמר המוסגר, ברור ששאילתה רקורסיבית עושה את העבודה בצורה הכי "נקייה" במצבים כאלו, אולם כשזה מגיע לכמויות גדולות, זה נעשה כמעט בלתי אפשרי, ולכן מחוסר ברירה אני מחזיק טבלה של תאריכים ל 150 שנה, וזה פותר לי על הדרך גם את בעיית הלוח השנה העברי שSQL לא ממש תומך בו, ועוד הרבה דברים "כיפיים" ומניפולציות שאני עושה איתו די בקלות.
פורסם במקור בפורום CODE613 ב25/12/2015 12:57 (+02:00)