פרויקט SQL קלפים
במאמר הבא נסקור את דרישות והגדרות הפרוייקט.
עבור אלה מאיתנו שלומדים שרוצים לבחון את הרמה שלהם ועבור אלה שלא מכירים כיצד בסיס נתונים משתלב באפליקציות ואתרי אינטרנט , הפרוייקט הזה הוא בשבילכם.
אז קצת רקע,
ביישומים ואתרי אינטרנט ישנו מודל כללי של העברת מידע בין החלק שהמשתמש רואה או בשמו המקצועי front-end שהוא בגדול דף html עם עיצוב css ופונקציונאליות מסוימת javascript לבין ה”קסם” שקורה מאחורי הקלעים back-end.
חלק ה-back-end מכיל שפת שרת כמו php , python , c-sharp שמעבירה בקשות למידע שמגיעות מהאתר אל בסיס הנתונים data base ובחזרה אל האתר.
התקשרות אל בסיס הנתונים מבוצעת ע”י פונקצייה function או פרוצדורה store procedure השמורה בסיס הנתונים וזאת כדי להימנע מ- sql injection.

הכנתי עבורכם פרוייקט המדמה שולחן במשחק קלפים מבוסס microsoft sql server ובניתי יישומון קטן אותו תוכלו להריץ מקומית על המחשב והוא בעצם מכיל בתוכו את ה-front-end ואת שפת השרת שמדברת עם בסיס הנתונים.
התפקיד שלכם הוא לכתוב את הפרוצדורות כדי שהיישום יוכל לקבל מידע מבסיס הנתונים לפי דרישות האפיון שמפורט בהמשך.
- Microsoft Sql Server
- Sql Server Managment Studio
מוכנים? הפרוייקט מתחיל
שלב 1 - הקמת בסיס נתונים וטבלאות
צרו בסיס נתונים ותנו לו שם לבחירתכם.
בתוך בסיס הנתונים יש להקים ארבע טבלאות, אין צורך לייצר קשרי גומלין ביניהן.
במשחק שלנו 5 שחקנים.
בחפיסה יש 52 קלפים .מספרי הקלפים מתחילים ב – 1 ונגמרים ב- 13, בנוסף יש לנו את ארבעת סוגי הקלפים:
- לב – H
- עלה- S
- יהלום – D
- תלתן – C
UserPassword |
---|
(6) nvarchar |
not null |
CardID | CardNumber | CardType |
---|---|---|
int | int | (1) char |
identity | from 1 to 13 | only accept capitals H,S,D,C |
HandID | CardNumber | CardType |
---|---|---|
int | int | (1) char |
from 1 to 5 | from 1 to 13 | only accept capitals H,S,D,C |
CardSn | HandID | CardNumber | CardType |
---|---|---|---|
int | int | int | (1) char |
identity | from 1 to 5 | from 1 to 13 | only accept capitals H,S,D,C |
למשל, שדה CardType יקבל אותיות גדולות בלבד
שלב 2 - מסך התחברות
- הוסיפו סיסמא ברשומה חדשה אל טבלת Users.
- צרו פרוצדורה sp_login
- חזרו אל היישום ובמסך החיבור הקלידו:
- שם משתמש – DATAOM
- סיסמא
- שם השרת שלכם
- שם בסיס הנתונים שלכם

שדה שם משתמש: DATAOM
שדה סיסמא: סיסמא לבחירתכם.
שדה שם שרת: שרת SQL המקומי שלכם.
שדה שם בסיס נתונים: שם בסיס הנתונים שהקמתם ובו נמצאת טבלת Users.
במידה והצלחתם, תיכנסו ותגיעו אל המסך הבא.
שלב 3 - פרוצדורות הצגת מידע ופקודות DML
עברתם לשלב הבא! כל הכבוד!
בקצרה
- הזינו כמה רשומות עבור חלק מהשחקנים בטבלת Hands.
- הזינו כמה רשומות עבור קופת הקלפים בטבלת Deck.
- צרו את פרוצדורות הבאות:
- sp_DeckCount – לספירת הקופה.
- sp_ShowHands – להצגת הקלפים של השחקנים.
- sp_GetRows – להצגת רשומות בטבלת Testim.
- sp_insertRecords – להכנסת רשומות אל טבלת Testim.
- sp_updateRecords – לעדכון רשומות בטבלת Testim.
- sp_deleteRecords – למחיקת רשומות בטבלת Testim.

מפורט
אוקי אז עכשיו הגענו אל החלק העיקרי בפרוייקט. עלינו לייצר פרוצדורות ולתת מענה לכל כפתור המופיע על הלוח.
בחלק זה נעבוד עם טבלאות Hands, Deck ו- Testim לביצוע פקודות DML
כדי שנוכל לבדוק את הפרוצדורות יש להזין רשומות אל טבלת Hands וטבלת Deck.
השאירו את טבלת Testim ריקה.
הפרוצדורות שיש לייצר לצורך שלב 3, ליחצו על הסימן “+” כדי לראות הסבר לכל אחת:
מטרת הפרוצדורה | הפרוצדורה סופרת את כמות הרשומות שיש בטבלת Deck |
---|---|
תיאור הפרוצדורה | בעת הפעלה הפרוצדורה סופרת רשומות בטבלת Deck |
פרמטרים | ללא |
מחזירה | int |
מטרת הפרוצדורה | בהתאם לבחירת המשתמש, הפרוצדורה מציגה רשומות מטבלת Hands. |
---|---|
תיאור הפרוצדורה | הפרוצדורה מציגה את כל הקלפים שיש לשחקן מסוים לפי מה שבחר במשתמש, במידה והמשתמש בחר להציג ALL הפרוצדורה תחזיר את רשומות כל השחקנים בטבלת Hands. |
פרמטרים | (3) HandID nvarchar |
מחזירה | Result Set |
מטרת הפרוצדורה | הצגת הרשומות מטבלת Testim כדי לראות השפעה של פקודות DML. |
---|---|
תיאור הפרוצדורה | הפרוצדורה מציגה את כל הרשומות מטבלת Testim. |
פרמטרים | ללא |
מחזירה | Result Set |
מטרת הפרוצדורה | הכנסת רשומה לתוך טבלת Testim לפי המידע שהזין המשתמש בתיבת טקסט ביישום. |
---|---|
תיאור הפרוצדורה | הפרוצדורה מקבלת פרמטרים המגיעים מהיישום ורושמת רשומה אחת חדשה בגין הערכים שנכנסו. |
פרמטרים | HandID int CardNumber int CardType char(1) |
מחזירה | לא מחזירה |
מטרת הפרוצדורה | עדכון ערכי קלף בטבלת Testim |
---|---|
תיאור הפרוצדורה | הפרוצדורה מאתרת קלף לפי מספר סידורי CardSn ומעדכנת את הערכים באותה רשומה בהתאם לערכים שהזין המשתמש. |
פרמטרים | CardSn int HandID int CardNumber int CardType char(1) |
מחזירה | לא מחזירה. |
מטרת הפרוצדורה | מחיקת רשומה בטבלת Testim |
---|---|
תיאור הפרוצדורה | הפרוצדורה מאתרת רשומה לפי CardSn ומוחקת אותה |
פרמטרים | CardSn int |
מחזירה | לא מחזירה. |
המסך מחולק לשני חלקים.
החלק השמאלי מאפשר לקבל את מספר הקלפים שיש בחבילה ועל ידי בחירת מספר שחקן להציג את הרשומות שיש עבורו בטבלה.
החלק הימני מאפשר לנו לבצע פקודות Insert , Update או Delete ולהציג את התוצאות של הפקודות בטבלת Testim.
אחרי שביצענו בהצלחה את כל הפרוצדורות וכל הכפתורים עובדים
ניתן לעבור אל המסך האחרון על ידי לחיצה על הכפתור בפינה הימנית “מעבר אל חלק 3”.
שלב 4 - קלפים ונהנים!
הגענו בהצלחה אל השלב האחרון!
בקצרה
צרו את פרוצדורות הבאות:
- sp_ShowHandFirstCard – להצגת הקלף הראשון שמחזיק שחקן מסוים.
- sp_MakeDeck – ליצירת חפיסת קלפי המשחק שלנו
- sp_DealFullHand – לחלוקת הקלפים לכל חמשת השחקנים

מפורט
החלק האחרון לא פחות מאתגר מקודמיו , משלב את הבנה שלנו בטרנזקציות , ניהול טבלאות וכתיבת TSQL
עליכם לייצר שלוש פרוצדורות נוספות. אז אמרנו משחק קלפים מה בנוגע לחפיסת קלפים וחלוקתם לשחקנים.
אז במשחק שלנו ,יש כמובן 52 קלפים המחולקים ל13 מספרים וארבעה סוגים .
הפרוצדורה הראשונה sp_MakeDeck תהיה הפרוצדורה ליצירת החפיסה. זכרו לבדוק שהחפיסה ריקה לפני שמתחילים להכניס אליה קלפים.
לאחר מכן נרצה לחלק את החפיסה לחמשת השחקנים ולצורך הנוחות כל שחקן מחזיק 5 קלפים בדיוק. נקו את טבלת Hands ובעזרת הפרוצדורה sp_DealFullHand חלקו לכל שחקן 5 קלפים בצורה אקראית! אם ראיתם שכל שחקן מקבל פשוט 5 רשומות ראשונות מהחפיסה סימן שלא ביצעתם זאת כהלכה.
הפרוצדורה האחרונה sp_ShowHandFirstCard תציג לנו את הקלף הראשון שמחזיק שחקן לבחירתנו במסך הימני.
הפרוצדורות שיש לייצר לצורך שלב 4, ליחצו על הסימן “+” כדי לראות הסבר לכל אחת:
מטרת הפרוצדורה | יצירת חפיסת קלפים חדשה מלאה עם 52 קלפי משחק |
---|---|
תיאור הפרוצדורה | בעת הפעלת הפרוצדורה , נרוקן את החפיסה ונמלא אותה ב52 קלפים. כדי לוודא שהפרוצדורה הצליחה נציג אותה במסך השמאלי |
פרמטרים | ללא |
מחזירה | Result Set |
מטרת הפרוצדורה | חלוקת 5 קלפים אקראית לכל שחקן |
---|---|
תיאור הפרוצדורה | הפרוצדורה תנקה את טבלת Hands ותזין במקום חמישה קלפים בצורה אקראית עבור כל שחקן. את הקלפים שחולקו לשחקן יש למחוק מהחפיסה כמובן. נדפיס את תוצאות הפרוצדורה כדי לוודא את התוצאה. |
פרמטרים | ללא |
מחזירה | Result Set |
מטרת הפרוצדורה | הצגת הקלף הראשון שמחזיק שחקן |
---|---|
תיאור הפרוצדורה | הפרוצדורה מציגה את הקלף הראשון מטבלת Hands עבור שחקן אותו בחר המשתמש |
פרמטרים | HandID int |
מחזירה | Result Set |
סיכום
אז הפרוייקט הקטן בא לתת לנו טעינה קטנה מכיצד מתנהל ממשק מעבר המידע בין המשתמש לבין בסיס הנתונים.
כמובן שישנם אלמנטים נוספים שמתקיימים בסביבת אמת כמו הרשאות , כתיבה נכונה ושימוש נכון באובייקטים בסיס הנתונים וכן הלאה.
נפגש בפרוייקט הבא 🙂
המרצה שלך

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