
City מסוג nvarchar(50) שמותרת בה NULL. כשמקלידים ידנית, אותה עיר נכתבת בכמה צורות, למשל "תל אביב" עם מקף או בלי, או "תל אביב יפו". חיפוש אחרי תלמידי תל אביב לא ימצא את כולם.CityName מסוג nvarchar. מכניסים כל עיר פעם אחת.City ומוסיפים CityID מסוג int, שהוא המפתח הזר, בלי חובה למלא. כך כל תלמיד מצביע על עיר, והשם עצמו נשמר רק פעם אחת. את השם במקום המספר מציגים בעזרת שפת SQL, שמביאה מידע מכמה טבלאות.CityID שאין לו עיר, למשל 8. כי הדאטאבייס לא יודע שהעמודה היא מפתח זר, וזה מקור לבאגים. ההרצאה הבאה מטפלת בזה.Prevent saving changes that require table recreation ומסירים את הסימון. אצל המרצה לא הופיעה שגיאה.הטקסט המלא של הדקות הראשונות בהרצאה «יצירת טבלת רשימה ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לסוג הבא של הטבלה, אבל מה זה אומר סוג אחר או סוג הבא של הטבלה? הרי טבלה זה טבלה. מבחינת מסד הנתונים אין הבדל בין טבלה א' לטבלה ב' מבחינת איך בונים אותה, איך מגדירים אותה. מסד הנתונים אין לו הבדל, הוא אומר לכם זה טבלה, כל טבלה היא טבלה, תגדירו מה שבא לכם.
אבל מבחינה לוגית, מבחינת האפיון שלנו, אנחנו צריכים להבין שיש כמה סוגים של טבלאות, ומה שראינו בסרטון הקודם זה טבלת בסיס, בייס טייבל מחזיקה מידע בסיסי המידע הראשי בעצם יותר נכון להגיד שאנחנו רוצים שהיוזרים יוסיפו שהמשתמשים יוסיפו יעדכנו ימחקו בחיי האפליקציה לפני שנוסיף את הטבלה הנוספת שהיא לא בייס טייבל הייתי רוצה ללכת לסטודנטים ולהוסיף
עוד משהו הרי אם אנחנו רוצים לחזור ולהוסיף משהו יש לנו אפשרות ללכת פה לדיזיין ופשוט להגיד שמע אני שכחתי עוד עמודה שאני רוצה להוסיף לתלמיד ומותר לי להוסיף כאן עמודה נוספת, מותר לי למחוק, לעדכן. מה שהייתי רוצה זה לדעת באיזה עיר גר כל תלמיד שלנו.
אולי אני רוצה להוציא איזשהו פלייר רק לתלמידים שגרים באזור הקרוב למכללה. בואו נוסיף כאן סיטי. סיטי זה כמובן n var char, בואו נניח 50, נראה לי סבבה עבור עיר.
בואו נגיד שלא חייבים להכניס עיר, אז נגדיר על האונל. אם אני אנסה רגע לשמור את הטבלה אני רואה שהוא הצליח לשמור אותה ואם אני הולך פה לאדיט אז כמובן יש לנו פה נאלים בסיטי ואני יכול פשוט להוסיף לתלמידים ערים.
אז בוא נניח שבארט גר בתל אביב וליסה גרה בחיפה והומר גם גר בתל אביב. רגע רגע מה קרה כאן? פעם אני יכול לכתוב תל אביב בלי מקף ופעם אני כותב תל אביב עם מקף?
גם זה נכון וגם זה נכון, אבל האם באמת נכון לאפשר דבר כזה? ואנחנו יודעים שיש תל אביב ויש תל אביב יפו, אז אולי זה תל אביב ג'פה או תל מקף אביב ג'פה או תל מקף אביב מקף ג'פה או מקף כזה ג'פה, ופתאום יש לנו המון אפשרויות להגדיר את אותו מידע.
אסור שזה יקרה. כי אם אני מחפש את כל התלמידים שגרים בתל אביב ואני רושם ככה תל אביב הוא לא ימצא לי את החבר'ה האלה שגם הם גרים בתל אביב. הדבר הזה נקרא רשימה סגורה של פריטים והפתרון לעשות דבר כזה זה כמובן לא להגדיר עמודה שיכולה להכיל את הערכים האלה שיכולים להיות קצת שונים
אחד מהשני הפתרון הוא טבלה מיוחדת שמחזיקה את הערכים האלה קודם כל טבלה שיש בה סדרה סופית של ערכים אין פה אין סוף היוזר לא יכול להוסיף לי ערכים יוזר שמשתמש במכללה לא יכול פתאום להחליט וואלה אני רוצה להוסיף עוד עיר חדשה אנחנו תכף נראה איך אנחנו משלבים את הטבלה כאן אז דבר ראשון מה שאנחנו רוצים לבצע זה לגשת לסטודנטס בואו נלך
לדיזיין וניפטר מהעמודה הזאת בואו נבצע delete column ביי ביי בואו נבצע שמירה אני רוצה רק לציין דבר אחד לפעמים אתם מקבלים שגיאה אני רואה שאני לא מקבל שגיאה אבל לפעמים אתם מקבלים שגיאה כשיש לכם טבלה ועשיתם איזשהו שינוי במבנה שלה אם זה קורה אתם צריכים ללכת לכאן תראו אתם הולכים לדיזיינר וכאן יש לנו את ה-v הזה prevent saving changes that require
table recreation by default זה מסומן ואני רואה שזה מסומן אצלי הוא לא נתן לי את השגיאה, אז אני אשאיר את זה כרגע מסומן, ואם אנחנו נקבל את השגיאה בהמשך, נדע ללכת ופשוט להוריד את ה-V הזה.
כרגע הוא Prevent Saving Changes That Require Table Recreation, הוא כנראה לא הרס, זרק ויצר את הטבלה מחדש או משהו כזה, אז הוא לא נתן לי שגיאה, אבל תזכרו את זה, אולי נחזור לזה.
אנחנו רוצים לראות איך אנחנו פותרים את הבעיה הזאת, שיש לנו ערים שאנחנו לא רוצים שמישהו ימציא לי שם.
אז אנחנו הולכים לטבלאות ומוסיפים עוד טבלה. טבלה כזאת נקראת טבלת ליסטינג, וזה הקטגוריה שלה, טבלת רשימה, כי היא מחזיקה רשימה סגורה של פריטים. אתם אולי מכירים את זה בפיתוח כאינאם, אם אתם מכירים מה זה אינאם בשפת תכנות כלשהי, זה בעצם טבלה שמחזיקה ערכים סגורים.
טבלה כזאת לרוב יש לה רק שתי עמודות, יכול להיות יותר, אבל לרוב יש לה שתי עמודות, והעמודות האלה זה כמובן מפתח ראשי, ctid או נגדיר int, הוא לא עלה או נל, בוא נסמן פריימרי, ניגש ונגיד לדאטה-בייס, תשמע, תייצר לי מספור אוטומטי רץ, הנה, והדבר הבא זה השם.
נהוג בליסטינג להגדיר את השם של הטבלה ביחיד בסיומת name. זה בעצם משהו שהוא כן מקובל ולא רק name, למרות שגם אפשר name, אבל אני אוהב להגדיר city name עבור המקרה הזה.
יש לי מדינות, אז country name, אוקיי, מצב מספחתי, סטטוס ניים או משהו כזה בואו נגדיר כאן nvarchar וניתן לא יודע גודל אולי קצת יותר גדול נהיה on the safe side אי אפשר להוסיף עיר בלי השם של העיר בואו נבצע שמירה אנחנו בטבלת cities בצורה כזאת ואז יש לנו טבלה בואו נרפרש שמחזיקה רק ורק ערים בואו ניגש אליה ועכשיו
נוסיף פעם אחת תל אביב אני מחליט שתל אביב, ככה אני מכניס, וזהו. אף אחד לא הולך להכניס את המכרוז לתל אביב בשום מקום אחר, גם לא אצל הסטודנטים.
תכף נראה מה אנחנו עושים אצל הסטודנטים. אנחנו כמובן מוסיפים, מוסיפים, מוסיפים את כל הערים. אנחנו יכולים לשאוב את המידע הזה מוויקיפדיה, מהאינטרנט, לא משנה מאיפה.
נניח שיש לנו פה חיפה, נניח שיש לנו פה ג'רוזלם, בואו נניח שיש לנו פה את נתניה, בואו נניח שיש לנו אילת וכו' וכו' וכו', נבצע שמירה של המידע, גו.
עכשיו אנחנו חוזרים לתלמידים. אנחנו עדיין רוצים לדעת איזה תלמיד גר באיזה עיר, אז אנחנו חוזרים לדיזיין, וכאן, מה אנחנו מגדירים לפי דעתכם?
צדקתם, עשיתי ID. כאן זה המפתח הזר שלנו,