>> בסדר.
אז, בלי שהיות, SQL, שפת שאילתות מובנית.
אז, כנראה שהשתמשת בזה לפחות בCS50, אולי בCS165,
אולי בעצמך פרויקטים אישיים.
ומה SQL אין לך לעשות, ב- SQL Server באופן כללי יותר?
כן?
[הערה לא נשמע]
אוקיי, זה היה מאוד דרך מאובטחת לומר את זה.
כן. אז זה מאפשר לך לאחסן נתונים
ויותר מכך מאפשר לך לבצע שאילתא לנתונים.
ואת זה הוא צעד קדימה
מלהשתמש במשהו פשוט כמו CSV, נכון.
מופרדים בפסיקים משתנים.
ערכים דומים.
כמו כן מאפשרים לך לשמור שורה אחת מידע
בקובץ טקסט.
אבל מה החסרון של קובץ CSV לאחסון הנתונים שלך,
למרות שאתה ביעילות תקבל שורות ועמודות מזה?
כן.
>> אתה לא 'יש לי אותו הארגון
יעילות [לא ברור].
>> אתה לא צריך אותו יעילות ארגון.
מה זאת אומרת?
>> ובכן, כמו [לא ברור] יש לי כמו עיקרי [לא ברור].
>> אישור. כן.
>> זה מסד נתונים יחסי אתה יכול לקבל מסדי נתונים מרובים
מקושרים זה לזה במובנים מסוימים מאוד.
>> אישור. טוב.
>> זה [לא ברור] להגדיר CSV.
>> ותן לי לצבוט מינוח קטן.
שולחנות אז מרובים בתוך מסד נתונים, בטח,
ושהולך מעבר למה אתה יכול לעשות רק עם אחד CSV.
אבל באמת ההגבלה עם CSV אני טוען הוא
כי חוסר היעילות של כל זה.
זה מאוד קל לפריסה.
אבל אם אתה רוצה לעשות שאילתה, מה זמן הריצה
של כל שאילתת בחירה בקובץ CSV?
אני אומר שזה [לא ברור] גדול וישן, נכון, לגרום "במקרה הגרוע ביותר,
הם עלו בתחתית מאוד.
גם אם אתה לא מיינת את כל קובץ CSV, אם אתה לא יודע
כי מראש, טוב, אתה עדיין הולך להיות לי
כדי לחפש את כל העניין.
אז, בין הדברים אנחנו הולכים לקבל
מלהשתמש בפועל מסד הנתונים תוך שימוש בשפה
כמו SQL הוא שאנחנו יכולים לבצע שאילתא את זה ואנחנו יכולים מראש
כמעצבי מסד הנתונים לציין מה הם השדות
שכנראה הולכים לי שאלות על כך שאנשים
בMySQL או של מיקרוסופט או אורקל,
מי שהפך את מסד הנתונים אתה משתמש יכול לעשות את כל
של העבודה הקשה של להבין, בסדר,
נתן מיליון של IDS ​​אלה.
כיצד אנו יכולים לעצב - אותם בזיכרון?
איזה סוג של עץ מבנה אולי,
כך שכאשר אתה עושה למעשה לבצע בחירה,
זה משהו שהוא לוגריתמים או לוגריתמים
של לוגריתמים בזמן ולא מ צלל למעשה
למשהו ליניארי.
אז יש לנו הרבה ביצועים ככה.
ואנחנו גם יכולים לאחסן הרבה יותר נתונים בקלות רב יותר "לגרום SQL
שרת מאוחסן בדרך כלל בזכרון RAM למרות שחלקים
זה יכול להיות מאוחסן על דיסק ואתה בטח יודע עד עכשיו
זכרון ה-RAM היא בדרך כלל מהר יותר מאשר דיסקים,
כך שזה דבר טוב.
ואנחנו גם יכולים להתמודד עם מקביליות הרבה יותר טובים.
אם לקח 165 או 161, אתה יודע שאם שני אנשים מנסים
כדי לעשות את אותו הדבר בבת אחת על מערכת,
דברים רעים יכולים לקרות, בדרך כלל.
אז בין התכונות האחרות שאנו יכול לקבל אם אנחנו לעצב השולחנות שלנו
בדרך הנכונה היא תמיכה ואבטחה טובה יותר
כשזה מגיע למקביליות.
אז, שני אנשים בשני חלקים
בעולם משתמש באותו באתר, אם שניהם מנסים
לקנות משהו באותו זמן, על מנת שלא הולך
ללכת בבו זמנית.
איכשהו הם יהיו בהמשכים על ידי מישהו אחר משלנו -
מישהו אחר מלבד את עצמנו.
רצון מסד הנתונים תעשה את זה בשבילנו.
אז כאשר זה צורה הפשוטה ביותר,
SQL מאפשר לנו שאילתה מסדי נתונים יחסיים.
מסדי נתונים יחסיים הוא אחד שיש לו אחד
טבלאות או יותר בזה בדרך כלל.
ואם זה קצת לא מוכר,
אתה באמת יכול לחשוב רק מזה כExcel או מספרים
או גיליונות אלקטרוניים של Google.
זה פשוט יש שורות ועמודות ובדרך כלל החלק העליון של כל
שורות אלה יש לזה שם.
אז זה יכול להיות מזהה טור, שם העמודה
עמודת הכתובת וכן הלאה.
ואז אתה יכול לקבל מספר רב של טבלאות כאלה אם אתה רוצה
כדי להתחיל לפרוס את סוגים שונים של נתונים.
אבל אתם אולי זוכרים לפחות מCS50 שניסינו
כדי לתת לך מבוסס GUI כלי [לא ברור]
כדי לנהל את מסד הנתונים שלך.
זה נקרא phpMyAdmin.
כך שזה רק צירוף מקרים ש זה היה כתוב ב-PHP, באמת,
אבל זה היה מבוסס אינטרנט פשוט מול בסופו למסד נתונים.
ובאמצעות הכרטיסיות השונות וקישורים, אתה יכול להתחיל
כדי להגדיר את מסד הנתונים עבור עצמך.
אבל כלי טוב כדי להתחיל לקבל קצת יותר נוח
עם גם לקוח שורת הפקודה.
לכן, אם שימוש במכשיר CS50 או באמת באמצעות כל מחשב מאקרו
שיש MySQL שורת הפקודה לקוח, אתה יכול גם לעשות את זה בסוג
של בית ספר ישן, כמו זו.
במאמר מוסגר פרויקט MySQL, לפחות בגרסת הקוד הפתוח
זה נקרא עכשיו MariaDB עבור מסיבות שונות, אתה יכול לקרוא
על ויקיפדיה אבל זה אותו התוכנה,
זה אותו התחביר וכן הלאה,
פחות או יותר אותו בסיס הקוד.
וכך, כאשר אני בשלב זה תנחה עכשיו אני יכול לקיים אינטראקציה
עם מסד הנתונים שלי הרבה יותר באופן ידני.
אז דוגמה לכך, תן לי ללכת קדימה
ופשוט לפתוח את חלון מסוף.
הזדמן לי להיות באמצעות CS50 מכשיר, אבל אתה יכול לעשות את זה
על רוב המערכת כלשהי ב שיש לך את הזכות
התקין את התוכנה.
ואני הולך לעשות את MySQL-u לשם המשתמש של ג'ון הרווארד
במערכת המסוימת הזה,-p לסיסמא שאני אקליד
בקצת יותר באופן מאובטח על ידי להכות על Enter.
עכשיו אני תתבקש לעשות זאת.
אני הולך להקליד ארגמן במכשיר CS50
ועכשיו אני רואה בעצם כי אותו המסך.
אבל יש פקודות עכשיו שאנחנו יכולים להתחיל להקליד
כמו להראות מסדי נתונים, ו זה הולך להראות את כולי
של מאגרי המידע שיש לי כבר נוצר במערכת,
פחות או יותר את אותה הרשימה היית רואה בphpMyAdmin.
יש כמה אחר כמו סכימת מידע ובדיקה,
שאם אתה לחטט CS50 Appliance, אנו להסתיר כמה
שולחנות רמה נמוכה אלה
אבל הם כבר יש כל הזמן הזה.
MySQL למעשה יש רמה נמוכה מאפיינים כמו שמות משתמש
וסיסמאות עבור מסד הנתונים עצמו, ולא ליישום שלך
שאתה יכול להיות פועל על גבי זה.
אז מראש, היום, אני יצר כמה מסדי נתונים,
אחד מהם נקרא courses50.
רוב הסיכויים הם שהחלק מכם השתמשו כלי קניות כמובן CS50,
אשר הוא ממשק גדול עבור הקטלוג כמובן של הרשם.
וזה בעצם נחמד מערך נתונים לדבר על 'סיבה,
אחד, אנחנו סוג של כל ברור שמכיר את קורסים
ומדריכים ופגישה מקומות וכל הסוג
דברים רגילים של אוניברסיטה,
אבל זה גם יש לו כמה הזדמנויות מעניינות
לעיצוב.
אז חשבנו שאולי כדאי להשתמש רעיון של קטלוג כמובן
וכלי קניות כמו דוגמא לאורך כל היום כדי למיין
של מסגרת חלק בעיצוב החלטות שאנו צריכים לעשות.
אז בואו נתחיל שם.
נניח שאני בעצם רוצה לייצג פשוטים סופר
כמובן קניות כלים.
והעולם הפשוט אני יכול לדמיין ואחת הוא
שבו יש קורסים ויש מדריכים.
ובואו נניח ל לצורך דיון
שכל קורס יש לפחות שם.
אז בואו נתחיל לשרטט את זה.
אני הולך להשתמש phpMyAdmin רק כאמצעי נוחות,
ולכן אנחנו לא צריכים להקליד את כל השאילתות באופן ידני.
אבל הנה אני כאן בי מסד הנתונים courses50.
אם אינו מכיר את זה, זה יהיה יהיה קל מאוד ברגע שאתה צולל
לפרויקט שלך אם אתה רוצה להשתמש בו.
אני הולך ליצור טבלה בשם קורסים
ואני יכול רק לחשוב של שדה אחד
לעת עתה, את שמו של קורס.
אני הולך קדימה למשל לתת לי עמודה אחת.
עכשיו, כפי שאתה זוכר שאתה מקבל ממשק זה קצת
ככה.
והפוך האחרים בכנות של phpMyAdmin הוא שזה סוג
של מורה עצמי וכי באמצעות dropdowns, תוכל למיין
לראות של מה האפשרי שלך החלטות עיצוב הן.
אז אני הולך לתת לי כל קורס שם.
זה שמו של טור זה.
ומה דעתכם על סוג הנתונים שלה?
רובכם צריך לדעת על לפחות חלק מסוגי נתונים אלה
מהניסיון קודם.
מה מתאים לשם קורס?
שרון?
>> Varchar.
>> בסדר, varchar בי הוא תו משתנה.
ומה עושה את זה אומר יותר מבחינה טכנית?
[הערה לא נשמע]
על אישור. אז זה חוט.
והיבט var זה אומר מה?
משתנה. אבל מה זה אומר?
כן?
[הערה לא נשמע]
בדיוק. אז זה משתנה מספר התווים
במחרוזת עד לחלק מרבי.
אז הנה הראשון שלנו החלטת עיצוב.
אנחנו בעצם צריכים להחליט כמה בתים מקסימאלי
להקצות לכל מחרוזת כזו.
באופן כללי, אתה רוצה סוג של לא לעשות את זה קטן מדי,
לא לעשות את זה גדול מדי "סיבה ברורה
אם קטן מדי אתה פשוט הולך להתחיל קיטוע נתונים
ואתה מאבד את המידע.
ואם זה גדול מדי, אתה פשוט סוג של לספר את מסד הנתונים
לצפות וכדי אופטימיזציה עבור נתונים נוספים
ממה שהוא באמת עשוי לקבל אי פעם.
אז מה הרגשה סבירה מספר לשמו של קורס?
60? אוקיי, אז 60.
זה נראה די סביר
כל עוד הוא שאין חריגים לכך.
באמת אין שלטון חזק, מהיר.
אם להיות כנה, עבור מסיבות היסטוריות הרבה
של אנשים יבחרו 255 "לגרום לשנים שהיו מעין
של ברירת המחדל המקסימלית באמצעות 8 בתים - 8 סיביות כדלפק שלך.
לא הייתי לי יותר [לא ברור] אולי להשתמש בכוחות של 2
אבל זה קצת לא רלוונטי.
אז אנחנו יכולים ללכת עם 60.
זה נראה הגיוני כל כך הרבה זמן
כפי שאנו סופו של דבר לא מתחרטים על זה "לגרום לזה גבול עליון.
עכשיו, נניח את ההפך הוחלט,
תווים אך לא משתנים רק שדה char.
אז שלא כמו C ו-C + +, char זה לא אומר char אחד
ומסדי נתונים ה בדרך כלל אומר מספר קבוע
של תווים במחרוזת.
מה יהיה הפוך ו / או חיסרון שלי בוחר 60
עבור שדה char, במקום varchar?
זה בדיוק מהסוג הראשון החלטה שאתה תצטרך לעשות
כאשר בודקים [הפונטי] החוצה של פרויקט עם השותפים שלך.
כן, שרון שוב.
[הערה לא נשמע]
טוב. אז אם שם הוא פחות
מ -60 אז אתה מבזבז מה הדלתא שהיא
בין 60 ו אורך בפועל.
אז זה פשוט מרגיש בזבזן, יותר בתים ממה שאתה צריך.
אבל למה הוא קיים?
אין ספק שיש איזו כלפי מעלה.
כן?
[הערה לא נשמע]
בטח. אז לפעמים אתה אולי יודע את המספר הקבוע
דמויות כמו 10 ספרות למספר טלפון למשל.
אבל למי אכפת, כמו למה לא רק אומרים 11 בכל מקרה
או מדוע לא לומר 60 בכל מקרה עם varchar?
איזה יתרון שאנו מקבלים על ידי ידיעה ועיצוב
למספר קבוע של דמויות?
[הערה לא נשמע]
אתה על המסלול הנכון.
אז זה אופטימיזציה אבל זה באמת של - כן?
[הערה לא נשמע]
על אישור. טוב. הפוקוס בואו שבחלקו האחרון.
אז לאינדקס.
אז מתברר אם לדעת מראש כי כל
השדות שלך הולכים להיות -60 תווים
אתה באמת יכול לחשוב על זה עמודה במסד נתוני Excel
כבעל מאוד ישר, עזב הצדיק
וקצוות מוצדקים תקין
כי בכל עמודה הוא 60 תווים רחבים.
זה אומר שזה מחרוזת היא 60 דמויות משם
ממחרוזת זו, 60 דמויות מזה
וזה וזה.
אז בדיוק כמו בחזרה כאשר אתה למדתי C, הייתה לך גישה אקראית
בעולם של מערכים, אותו הרעיון כאן.
אם הטור שלך מיוצג שימוש בתווים באורך קבוע בלבד,
אתה יכול למעשה מדד באופן אקראי 60 ו120 או 180
ואתה יכול לקבל באופן פרטני מחרוזות הרבה יותר מהר.
אז אם במקום זאת, היה הטור שלך קצה שמאלי ישר כביכול
אלא זכות מאוד מחוספסת קצה לעמודה
כי אתה עלול יש לי 10 תווים,
15 תווים, 5 תווים.
אז גם את זה הוא איזון.
לפעמים, ורק באמצעות ניסוי וטעייה
וניסויים אתה יכול להבין
מה באמת את השיחה הנכונה הוא אבל אלה הם סוגים
שאלות ש צריך ללכת
במוחה ו / או שלך שולחנות כשזה מגיע זמן
לעצב מסד הנתונים שלך.
לכן, לא בהכרח נכון תענה, אבל אתה צריך
לפחות יש לי כמה משפט או שניים בראש
לגיבוי כל מה החלטה שאתה עושה.
בסדר.
אז בואו נשמור גלילה בהנחיות כאן
שממשק המשתמש של phpMyAdmin.
לכן, ערך ברירת המחדל עבור שם, אני צריך לציין
כי זה צריך להיות לי ערך ברירת מחדל של null?
מה אתה חושב?
יכול כמובן להיות שם ריק?
פשוט מרגיש מוזר, נכון?
אני לא יכול לחשוב על שום קורסים בעילום שם באוניברסיטת הרווארד.
ואולי יש כמה מקרה פינה מעורפל
שבו כמובן מקבל מספר
והפרופסור יש לא בחרתי שם לזה אבל -
אני מתכוון, לעזאזל עם זה,
כמו בואו של אפילו לא טרח תמיכה ש.
הייתי אומר בעניין של מסד הנתונים ונקיים,
בואו לציין שאתה לא יכול יש ערך ברירת מחדל של null.
לחלופין, אנחנו יכולים לעשות משהו כמו קורס ללא כותרת
וזה לא שלא כמו עם Mac OS ו-Windows לעשות
בעת יצירה תיקייה למשל,
אלא שיש שעושה קצת יותר הגיוני
כך שהאדם רואה משהו.
כ אנחנו מדברים מסד הנתונים עורפי ככל הנראה
לקטלוג כמובן.
אז אני לא ממש אפילו אוהב את הרעיון של לתת לו
בשמות כמובן ללא כותרת
מכיוון שזה לא ממש הולך לעזור לאף אחד.
אז בואו נשאיר את זה כמו שאף אחד, מה שאומר שכשאתה מכניס
לתוך מסד נתונים זה, יש לך לתת לכל קורס שם
שמרגיש קצת נקי לי.
בסדר.
אז גלילה נוספת, איסוף.
זה בדיוק יש לעשות עם ערכות תווים ומה לא
אם ראית אי פעם אזכורים של שוודי
בphpMyAdmin זה "לגרום לאנשים
שכתב phpMyAdmin היו שוודי.
האם זה PHP או שזה MySQL?
אחד משתיים, אני שכח כלאחר יד.
אבל זה מסיבות היסטוריות
אבל אתה יכול להביע את כל דמות באנגלית
שאתה יכול עם שוודי כך שזה במידה רבה שאינה בעיה.
CS50 Appliance הוא אף משמש - מוגדר לשימוש ב-UTF-8,
כך שבדרך כלל צריך לא צצים לך.
תכונות.
אז אף אחד מאלה הם באמת רלוונטי כאן.
אני רואה בינארי, לא חתום, zerofill לא חתום,
ועל חותמת זמן נוכחית עדכון.
השדה שחל רק עבור חלק משדה מספרים
או כמה תחומים בזמן.
כך תהיה לנו לדלג על שלגמרי.
Null. יכול תחום זה יהיה בטל?
אז לא. כבר יש לנו סוג כזה של שיחות.
אז אנחנו לא רוצים ערך ברירת מחדל.
אנחנו לא רוצים שזה יהיה ריק.
מה לגבי מדד?
יש ארבע אפשרויות כאן.
מה זה אומר אם לציין
כי שורה זו הולכת להיות מפתח ראשי?
במחשבה לאחור לCS50 או CS165 אם אתה כבר לקח אותו.
[הערה לא נשמע]
בדיוק. אז מפתח ראשי מעצם הגדרתו הוא השדה
שמזהה באופן ייחודי כל שורה בטבלה זו.
ואתה יכול לסמוך עליו לעשות שזיהוי ייחודי.
אז, מה זה אומר אז רק כדי להיות ייחודי?
ובכן, סוג של שני אלה יש סוג
של מתחת השלכות מתחת למכסת המנוע.
אבל בדרך כלל, מפתח הראשי הוא סוג של חוזה שאתה עושה
עם דבר מסד הנתונים.
כשאני עושה שאילתות מחפש קורס,
אני הולך להשתמש בזה תחום מסוים.
ואנחנו נחזור אל למה אנחנו יכולים להיות שני
בחירות כאלה כאן, ראשוני או ייחודי.
ייחודי רק אומר, זה שדה הולך להיות ייחודי
אבל אני לא ממש עושה שום סוג של מחויבות מילוליות כאן
כדי להשתמש בשדה ש לעשות חיפושים שלי
מסיבות שתהיינה תראה ברגע.
אם תציינו במקום למדד, מה זה אומר כדי לציין
שיש לו שדה מדד על זה?
כן?
[הערה לא נשמע]
בדיוק. זה היה מותאם במיוחד לשאילתא.
אז אתה - שרת מסד הנתונים, אורקל, MySQL, מה,
בדרך כלל לעבוד הקסם שלה מאחורי הקלעים ברגע שאתה לחץ על
אותה האפשרות ולאחר מכן לחץ על לשמור וזה יהיה לבנות
עד בדרך כלל מבנה עץ, B-עצים אם ראית
או שמע את אשר הוא עץ קצר מאוד למראה
זה נותן לך נחמד מאוד מאפייני לוגריתמים
בעת חיפוש בנתונים.
אם לא תציין מדד בשדה, מה קורה
להיות הריצה זמן של חיפוש
לשרירותי שם [הפונטי] קורס?
מה זה?
[הערה לא נשמע]
אה, [לא ברור], ליניארי, נכון?
אם זה אין אופטימיזציות העניק למסד הנתונים
ולא חשבת מסד הנתונים איזה סוג
הנתונים לצפות.
הכי טוב שאתה יכול לעשות הוא לבדוק כל מה שכאשר אתה מחפש
עבור ערך כלשהו, ​​במיוחד אם יכול
למעשה להיות כפילויות.
טקסט מלא בינתיים, אנחנו מניף את ידינו לעת עתה.
אבל בדרך כלל, זה הוא סוג של מדד שמאפשר לך
לבצע אופטימיזציה עבור מילת מפתח חיפושים בתחום.
אז זה יכול להיות מועמד טוב
עבור כמו תיאור קורס שבו אתה יכול להיות זוג
סעיפים קטנים ואתה עלול רוצה לעשות התאמות מחרוזת.
טקסט מלא בדרך כלל יאפשר לי אתה עושה את זה די ביעילות.
AI, זה סוג נורא הסבר, אבל אם אנחנו מרחפים
על זה אתה תראה אוטומטי תוספת.
לא ישים גם כאן אבל תוספת אוטומטית שימושית
לשדה כמו של int כי מסד הנתונים ידאגו
מהתהליך של plusing תוספת את זה כל פעם שאתה עושה הכנס.
כך שגם אם שני אנשים פשוטו כמשמעו, לחץ על Submit
באותו הזמן ולנסות כדי ליצור שורה איכשהו
במסד הנתונים, אחד שלהם יקבל אותי המספר,
האחרים יקבל אני מספר 1 בתוספת.
אתה לא צריך לדאוג
על שני מספרים להיות שהוקצה באופן זהה אם היית
לעשות את זה בעצמך בקוד.
בסדר.
אז אני סוג של אוהב בי יש לנו שם שיהיה.
אז בואו לחצו על שמור.
האם זה עיצוב טוב לטבלה במסד נתונים?
וכמו בצד אם חלוד על SQL או שאתה סוג
רק תמיד פונה עיוור עין למה שקורה,
אני יכול שהקלדת בדיוק את זה -
שלושת קווים אלה באותה הפקודה שחור ולבן
בשורת הפקודה לקוח או שאני יכול לעשות
כי בקוד תכנותי.
אז כל מה שהוא עושה עבור phpMyAdmin לי, הוא פשוט הציל אותי המאמץ
לזכור לפעמים תחביר והקלדה על
כמו פקודות מייגע.
בסדר.
אז זה לא מרגיש כמו העיצוב הטוב ביותר, שולחן שדה אחד.
עכשיו יש לנו יכולים דברים כמו פרופסורים
ובמקומות ותיאורים.
אבל אפילו אז, תוך שימוש בשם רק
לזהות קורסים לא מרגיש אידיאלי.
מה בדרך כלל יש אנחנו עשינו בעבר
אם יש לך להשתמש במסדי נתונים לייחודי שורות?
לא באמצעות varchars בדרך כלל.
כן?
[הערה לא נשמע]
כן. אז בדרך כלל מזהה כמובן.
אז, הנפוץ ביותר מתקרב לכאן במיוחד
בעת שימוש במסגרת הוא למעשה רק
להשתמש במספר כמו מספר שלם.
אז תן לי ללכת ולעשות את זה.
ואנחנו יכולים לעשות את זה בכמה דרכים, אך הודעה אם אני זום
בתחתית כאן.
אני הולך לומר להוסיף אחד עמודות בסוף השולחן,
בדרך כלל רק לראייה נוחות אתה שם את המזהים
בתחילת השולחן אף על פי שאין לכך שום אמת
השפעה תפקודית.
אז אני הולך להגיד להוסיף אחד עמודות
בתחילתו של השולחן.
אני הולך ללחוץ על Go, ש נותן לי גב ממשק משתמש זה כאן.
בואו נקרא זיהוי זה.
אם אנחנו חושבים שאנחנו הולכים להיות לא יותר עשה 4 מיליון קורסים
השדה של int הוא בסדר גמור.
אנחנו יכולים גם לכווץ אותו
אבל החלל הוא זול אז למי אכפת באמת.
אבל, אנחנו מנסים לכתוב בפייסבוק עכשיו,
לא יכול להיות דבר רע לצפות ints הגדול
שייתן לנו ints 64 סיביות
אבל אז אתה ממש הכפלת מספר הביטים
שאתה משתמש, איזון כל כך מינורי
אבל משהו לשקול.
עכשיו, זה מבלבל דבר מדור קודם.
ייתכן שאתה זוכר מבאמצעות MySQL
כי בכל עת שאתה מצהיר int שדה שאתה רואה לעתים קרובות מספר
לידו כמו המספר 10.
יש לה ולא כלום עם בגודל של המספר
או מספר הביטים.
כי יש לעשות עם המספר של דמויות הנמצאים בשימוש
לבחינה ויזואלית תצוגה ששדה int
בעת שימוש בחלון מסוף.
אז אנו יכולים לראות כי ברגע.
לכן, אל תלכו שולל על ידי הקלדת מספרים
לשם למרות שזה למעשה מבקש מאתנו
לאחד כאן.
הנה, אני הולך באים ואומר שאינו חתום.
אין שום סיבה לפסולת כל המספרים השליליים שלנו
מאז מסד הנתונים בדרך כלל הולך
להניח חיובי ערכים או null.
מזהה בהחלט לא צריך להיות אפס.
ומה אתה חושב על המדד לשדה מזהה את זה?
בואו נעשה את זה יסודי.
אז מה אם, אם כי, כמו שאני יכול רק לחשוב כמובן CS164 אחד
בהרווארד, ורק אחד כמובן CS50 בהרווארד
וזה די כולל הרבה אמיתי
שיש אולי חריגים [לא ברור] שני סמסטרים
או משהו מוזר כזה.
אבל יותר במהותו, למה זה טוב יותר
כדי להשתמש בזהות נפרד מספרית כדי מזהים באופן ייחודי ולא קורסים
מסתם מחרוזת ייחודית?
כן?
[הערה לא נשמע]
בסדר, מעניין.
אז אם היו לנו סוג של רשומי צלב קורסים.
אז זה דוגמא טובה.
אני לא בטוח שאני היית עושה לפתור אם כי
ידי נותן להם את אותו מספר תעודת זהות אם זה
שבו אתה הולך עם זה.
לא? על אישור. אבל בהחלט מקרה פינה לשקול.
אם יש סוג של - אנחנו צריכים סוג כלשהו
של aliasing פוטנציאלי.
[הערה לא נשמע]
בטח.
[הערה לא נשמע]
זה דוגמא טובה.
שם עשוי להשתנות על פני זמן, סביר לחלוטין.
מה עוד?
[הערה לא נשמע]
מצטער, אומר שוב.
[הערה לא נשמע]
כן, בדיוק.
אז באמת, זה הנימוק המכריע האמיתי הוא
כי באמצעות int 32 סיביות הוא כנראה הולך להיות מהיר יותר
מכמה משתנים שדה char אורך.
במקרה הראשון, הפחית פשוטו כמשמעו, שיתאים בקופה,
שלא לדבר על הרבה יותר טביעת רגל זיכרון קטנה יותר.
במקרה האחרון, אתה הולך לצריך לעשות אתר נופש [הפונטי]
להשוואות מחרוזת ה בעצמם עם יניארי
בגודל של מחרוזת פוטנציאלית.
אז, זה רק נחמד אופטימיזציה,
ובפרט שזה הולך
כדי לאפשר לנו לעשות את מה שנקרא מצטרף באופן יעיל יותר
ברגע.
אז בואו לעשות את זה.
אנו לציין כי זה הוא ראשוני
כי אני לא במיוחד רוצה לטפל או חושבים
על מה המספר הוא של קורס.
תן להם לקחת על מה ערכים שהם רוצים.
אני הולך לומר תוספת אוטומטית אז אני יכול למיקור חוץ את הפרט הזה.
כמו בצד אולי אתה יודע שהרווארד
לפחות יש לה ייחודי מספרים לקורסים.
אין לי שום זיכרון מה זה קורסים.
אני יודע שCS50 של מספר קטלוג הוא 4949,
שרירותי לחלוטין.
אבל יש מוזר מקרי פינה שבאפילו
במזבלת registrarial כמובן נתוני קטלוג,
לפעמים קורסים, ישנים יש קורסים כמו מספר 4.
אבל מבחינה טכנית זה שדה הוא שדה char
שפשוט מתחיל עם 0004.
גם כאן אז, אתה צריך להיות מקפיד על הבחנה
בין דברים כמו מספר קטלוג כמובן
שאולי כמה אנושי רעיון של אורך קבוע, 0004,
ואתה לא צריך לאחסן כי למשל בints.
סוג זה של שדה צריך להיות מאוחסן במקום אחר.
אז בהרווארד, אם היינו מה שהופך כמובן למעשה
כלי קניות, זה כנראה לא מספיק
לקורסי מספר עם רק 1, 2, 3, 4.
אנחנו כנראה הולכים להיות לי
יש שדה אחר התקשר למספר קטלוג,
כי הוא גם אמור להיות ייחודי המבוסס
על מוסכמות אנושיות כאן אבל זה לא הבחירה הטובה ביותר
למזהה ייחודית משום זה יכול להיות באורך משתנה.
זה לא יכול להיות ארבעה תווים, זה יכול להיות חמש.
למעשה, אני חושב שכמה לפני שנים הם עוברים
למטרה 'חמישה תווים יש היו יותר מ 999 קורסים
בסך הכל, או משהו כזה זה, או 9,999 קורסים.
אז, שעשוי להיות דוגמא שם השדה הוא לא עיקרי
אבל זה צריך להיות ייחודי.
וכתובת דואר אלקטרוני עוד אחד.
אולי אתה רוצה שזה יהיה ייחודי
אך לא בהכרח המפתח הראשי שלך.
בסדר.
אז תן לי לדפוק את עוד שולחן הרבה יותר מהר מאשר את זה.
אז אני הולך לקרוא לזה מדריכים אחד ואני הולך
לתת את זה בסך הכל מספר עמודות של שתיים.
אני הולך ללמוד שלי לקח מפעם הקודמת.
אני הולך לקרוא מזהה העמודה הראשונה.
אני הולך לקרוא שם עמודה שנייה.
אני גם הולך לעשות varchar.
אני הולך להניח שלא יש פרופסור שם עוד
מ -60 תווים, אם כי עכשיו זה יכול להיות דוחף אותו
עם שמות ארוכים מסוימים, מיוחד אנשים עם שמות האמצעיים.
זה בסדר להיום.
אז בואו לגלול לכאן.
בואו נעשיתי את זה חתום שוב.
בואו להפוך ראשוני זה.
ואנחנו נאפשר שמות כפולים
במקרה שיש שני ג'ון סמית או משהו כזה.
ועכשיו יש לנו שתי טבלאות.
אז עכשיו, זה מעלה את שאלה איך אני מקשר
במדריך עם הקורס?
אני מרגישה שאני סוג של יש מקדים את המאוחר
כי אם מורה מלמד את קורס,
האינסטינקט הראשון שלי היית למעשה יהיה לחזור
לקורסים מבינים, זה לא היה רעיון טוב.
תן לי בעצם להוסיף עמודה אחת בקצה השולחן,
לחצו על בצע, ואני קורא למדריך הזה.
ואני אעשה את זה varchar ואני אעשה את זה 60.
ואולי אני אשאיר את זה ריק עכשיו
במקרה כמובן יש לא כבר לא חתום במדריך
שלפעמים קורה לפני טווח מתחיל ולחץ על שמור.
איזה מעיצובים אלה אתם מעדיפים?
הראשון שבו יש לנו שולחנה של המורה הנפרד
או השני שבו אנחנו רק להוסיף שדה לקורס?
אז זה מקשר באופן הדוק מורה עם קורס.
[הערה לא נשמע]
על אישור. טוב. אבל תן לי לדחוף בחזרה.
זה פשוט כל כך פשוט כמו שאני יכול פשוט להקליד את שמו של האדם
לטבלה זו, כמו בוודאי שיש לו ערך כלשהו או -?
[הערה לא נשמע]
בסדר.
ובכן, הרשה לי להיות קשה כאן.
אז הרשה לי לומר כי קורס זה הוא CS51
ואני יודע שזה לימד השנה על ידי שני אנשים.
אז, הנרי לייטנר וג'סי טוב אבל -
אז אני פשוט אשים את פסיק בין שתיים, נכון.
אני ממש טוב ב CSV מפעם.
[הערה לא נשמע]
בדיוק, נכון.
ברגע שאתה פונה למשהו כזה,
אשר עלול להרגיש סביר ואתה עלול להרגיש
כזה הוא סוג של חכם.
אני סוג של השאלת אחד רעיון שבו הוא פועל היטב,
ללוות רעיון חדש ו סוג של לשלב אותם.
אתה סוג של להביס לחלוטין הנקודה של שימוש במסד הנתונים
בסיבה הראשונה 'המקום אם אחד מהערכים
של שימוש בו הוא חיפושים מהירים יותר בגלל המדדים השונים
ושולחנות שיכולים להיות בנוי בשבילך
על ידי מנוע מסד הנתונים עצמו.
עכשיו, אם אתה רוצה לחפש לכל אחד מהקורסים
שג'סי מלמד, עכשיו יש לך לעשות מחרוזת תואמת על כל
משדות המדריך,
אשר למעשה אומר ליניארי לחפש שוב בגלל שיש לך
למצוא קבוצה שרירותית זו של שלושה תווים בכל מקום
בתחום המדריכה קדמו
בתוך אולי אחרי על ידי פסיק.
אז זה בהחלט אינו מבשר טוב.
אז תן לי לחזור לשולחן.
תן לי ללכת קדימה קורסים, לבטל את זה.
אני הולך רק כדי ללכת קדימה ושחרר את שדה זה.
ואם אתה רוצה לעשות את זה באופן ידני,
התחביר הוא לוח ALTER קורסים DROP מדריך.
אז בואו נלך קדימה ואומר כן לזה.
ותחזור לרעיון מוקדם יותר
שבו יש לי נפרד שולחן למדריכים.
אבל עכשיו זה מרגיש קצת כמו שאני יכול לשים כמובן
בטבלה של הקורס ומדריך
בשולחן של המורה, אבל אני איכשהו צריך לקשר בין השניים.
ואיך היה לך מציע שנעשינו את זה?
[הערה לא נשמע]
טוב. אז בואו לעשות את זה.
ואתה יכול לקרוא לזה שולחן בכל דבר תורה.
אני הולך בכוונה קורא לזה מה שהרבה
מסגרות הייתם קורא לזה, וביניהם,
Laravel כפי שתראה בקצת.
אני הולך לקרוא לזה כמובן מדגיש מדריך.
שימוש בלשון יחיד בזה מקרה לכל אחת מהמילים
ואת כל האותיות קטנות שוב, וגם עם -
אז בסדר אלפביתי מסודרים משמאל לימין.
זה לגמרי שרירותי, אלא הוא נוטה להיות אמנה
בהרבה מסגרות אלה ב-PHP בשפות אחרות.
כמה טורים אני צריך ב זה מה שאנחנו קוראים להצטרף לשולחן,
להצטרף לשתיים אחרים שולחנות ביחד?
שלוש עמודות?
איזה מהם - מה הם יהיו?
[הערה לא נשמע]
על אישור. טוב. זה עובד.
ואנחנו מבחינה טכנית יכולים לחתוך פינה כאן, אבל הרבה
מסגרות בפרט עדיין היה נותן אפילו שורות אלה
מזהים ייחודיים למרות מבחינה סמנטית השורה
שבאמת אכפת לי או העמודות שאנחנו באמת אכפת לי
עליהם הם שני האחרונים של מה שאתה אמר, מזהה כמובן
ומזהה מדריך.
אז בואו לעשות את זה.
אני אתקשר אל שורה זו רק תעודת זהות, בדיוק כמו שעשינו בעבר.
אבל זה אחד אני הולך לקרוא מזהה כמובן.
זה אחד אני הולך קורא מזהה מדריך.
ואני הולך תציין כי כל
מהם אינם חתומים כי אני רוצה
על מנת למקסם את 4 שלי מגוון int מיליארדים.
אף אחד מהם צריך להיות אפס.
אני הולך לציין כי מזהה עדיין צריכה להיות יסודי.
ושוב, זה הוא רק אמנה,
הרבה מסגרות גם אם אתה לא תמיין
ביסודו של זקוקים מזהה ייחודי עבור השורה,
מתברר שנוח לי הקוד, SQL זה הולך
להיות באופן אוטומטי נוצר עבורנו.
אז אני אשאיר את זה כראשוני.
אבל עכשיו, אני סוג של יש החלטת עיצוב,
כמובן זהות וזיהוי מדריך.
מה אינדקסים אם בכלל הם צריכים לקבל?
אם אני אשאיר שום אינדקסים, מה המשמעות?
מה משמעות?
ביצועים כמו קודם, נכון?
אם אין מדד, הכי טוב שאתה יכול לעשות הוא סוג
של [לא ברור] דרך כל דבר מחפש מספרים.
כך שלא מרגיש חכם.
זה צריך להיות עיקרי?
אז למה לא?
למה לא עיקרי?
[הערה לא נשמע]
מושלם. אז אנחנו מתגלגלים מתוך [הפונטי] ראשוני.
אנחנו כבר בחרנו את זה.
לכן, זה צריך להיות ייחודי?
[הערה לא נשמע]
טוב. אז, אם אתה מניח מדריך אחד לכל קורס,
בסדר גמור.
וזה בהחלט המקרה הנפוץ
אבל אנחנו כבר לשים את אחד דוגמא מוכרת אולי.
CS51 קיבל שני מדריכים כך שאנחנו סוג
של החברה דפוקה במקרה זה.
אם הייתי עושים רק לאפשר מדריך אחד,
אנחנו באמת יכולים לעשות את הדרך עם להצטרף לשולחן לגמרי,
לחזור לגישה הקודמת
ולשים לא שמו של האדם אולי, אבל זהותו של המדריך.
אם אתה יודע כל קורס כפשוט מדריך אחד שאתה יכול להיות פשוט
עמודה אחת.
אבל השוני הוא מה הכניס אותנו לצרות.
בסדר.
לכן, זה צריך להיות ייחודי?
מס 'טקסט מלא אינו מרגיש ישים.
כמו שאמרנו לפני זה
למחרוזת כמו התאמה לתיאור.
אז מה לגבי מדד?
ובכן, מדד הוא כנראה המועמד הטוב ביותר שלנו
המספר לייעל MySQL בחיפושים על זה
או תן לי לפרט, לייעל לחיפושים או מצטרף
כפי שנראה ברגע
כך שהם קצת יותר יעיל
מכל דבר אך ורק ליניארי.
האם אני רוצה אוטומטי מגדיל תחום זה?
אז לא, כי הנכון אלמנט ההורה קיים
בטבלה 'הקורסים.
זה מקום שבי זה הולך לקבל תוספת,
בתוספת כאשר זה בעצם מוכנס.
הנה, כל זה הולך כדי להיות מוכנס באופן ידני
על ידינו ככל הנראה בקוד.
אז בואו פשוט לציין כי הן מזהה כמובן
ויש לי תעודת זהות מאמן אינדקסים.
עכשיו אנחנו נלך קדימה ולשמור.
ועכשיו, רק כדי להראות אתה ההתכתבות
בין מה שנחמד ממשק ידידותי GUI
ואת ממשק שורת הפקודה.
תן לי ללכת ולעשות הבא בשורת הפקודה של MySQL זה.
אני הולך לומר courses50 שימוש
אשר הוא שם השרירותי אני נתתי למסד הנתונים הזה.
ועכשיו, אני אפילו לא זוכר את מה שעשינו.
אז תן לי להקליד שולחנות מופע
ובדרך כלל פסיק יהיה חבר שלך כאן
כדי לסיים את השאילתה.
וזה מה שיש.
אז הנה השורות או ליתר דיוק השולחנות שיש לנו כאן.
עכשיו, אני לא זוכר מה כמובן נראה,
אז תן לי אין לתאר קורסים ועכשיו אני רואה סוג של ASCII
או גרסה של מה phpMyAdmin עושה
ואני רואה שהוא מזהה int.
יש 10 ש.
מה זה אומר?
זה רק אומר שכאשר זה מוצג זה הולך לקחת
עד 10 תווים על חלון המסוף.
האם זה מאפשר ערכים null?
מס זה הוא המפתח הראשי.
זה יכול להיות בעל ערך ברירת מחדל?
מס ושירותים נוסף אשר הוא מיוחד דגלים כמו תוספת אוטומטית.
אז בואו פשוט לעשות את בני זוג הוספות של מהירות כאן.
אני הולך לעלות ל-- בואו נגיד.
בואו לשנות את המצב לשקופית
שבו אני די מראש להכין זה.
זהו סיכום של אז כל שלוש טבלאות אלה.
אני כבר רק באופן ידני הקליד את הפקודה הראשונה.
והנה, הלכתי קדימה ו הקלד את אחרים בשבילך.
זוהי רק דבר סגנוני.
באופן כללי, הרבה אנשים הקלד משפטי SQL בכל כמוסות
ולאחר מכן שמות טבלה ו שמות שדות באותיות קטנות,
ולו רק משום שהיא סוג של דוכנים
מה זה המינוח שלך ומה תחביר מסד הנתונים.
אז הנה יש לנו שלוש שולחנות, קורסים, מדריכים,
ומדריכי קורסים.
בשקופית שעשיתי מראש, לא היה לי השדה מזהה
אבל זה לא ממש דבר רע בכלל.
היינו רואה רק עמודה שלישית שם.
אם הייתי עושה את זה כאן?
אז עכשיו תן לי להציע כי אנחנו עושים חבורה של הוספות.
אז הנה כמה נתונים, אני זום פנימה
אז אני הולך להציע כי בקורסים,
אנו מתמודדים עם שלושה קורסים בלבד.
ואני בחרתי שלושה אלה בגלל שהם נציג
כמה נחמד - יש להם כמה מאפיינים נחמדים.
CS1, CS50, CS51, הם יש מזהי הגדלת
אבל מה שמזהה מה הוא לגמרי לא רלוונטי.
זה פשוט הסדר שבו הם רכב הוכנסו על ידי לי.
מה דעתך על מדריכים?
אז עכשיו, בגלל הנרי ייטנר מלמד גם CS1 וCS51,
זה סוג של כושר משמעות לעיצוב שלנו.
וג'סי מלמד CS51 ומלאן מלמד CS50.
אז עכשיו - או ליתר דיוק, אלה הם רק תעודות זהות הייחודית של האנשים האלה.
וקורסים ומדריכים, - מדריכי קורס, שימו לב כאן.
ID1 גולף, אשר היה הוא CS1 לימד
על ידי המדריכה ID1 שהוא הנרי.
ID2 כמובן, שבו אני חושב שהוא לימד את CS50
על ידי המדריכה ID2, שהוא מלאן.
ואז לבסוף, CS51, ו שמתי לב שיש לנו שתי שורות.
ועכשיו זה למה להצטרף השולחן הוא חזק נלמד
על ידי שני הנרי וג'סי.
אז כל זה טוב ויפה,
אבל אני בקושי יכול זוכר את החלק העליון
של הראש שלי מי הוא מי כאן.
איך אתה יכול להתמודד עם זה בקוד,
מבלי דברים קוד קשים?
ובכן, זה מקום שבו SQL עצמו מתחיל להיות חבר שלנו.
ואני הולך להציע כי אנחנו יכולים להקליד את הדברים הבאים.
אני אעשה את זה ב הפקודה בפועל.
תן לי ללכת קדימה ו להכניס את הדברים האלה.
אז, לטבלת הקורסים בואו לעשות בדיוק את מה שהיו לנו
רגע לפני.
אני הולך קדימה ואומר, בואו הכניסו CS1 וCS50.
בואו נכניס עוד כמה שורות בבת אחת, CS51.
עכשיו, תן לי להמשיך ולשמור.
בסדר, אז אני פשוט יצירה מחדש כמה שיותר מהר
ככל שאני יכול היחסים רק שראינו על המסך.
וכן כאן יש לנו לייטנר, כאן יש לנו מלאן.
בואו לתת את עצמנו שורה אחרת, וטוב.
עכשיו תנו לי לשמור את זה.
ואני עושה אותם במכוון לאותו סדר.
לא, שכחתי לתת לי תוספת אוטומטית זה.
תן לי לתקן את זה במהירות.
אני אסדר את זה ב הקוד באינטרנט.
שלא כמו בצד.
העובדה שאני לא יכול הכנס לייטנר ומלאן
וטוב נכשל, משום שאני לא לציין את מספר תעודת זהות למרות
זה אחד ואני מצפה שכח לבדוק תוספת אוטומטית,
מה שאומר שכולם היו כברירת מחדל מקבל אפס.
אבל אז סותר אשר רכוש שאנחנו כבר צוינו.
המפתח הראשי הופר כך שזה אפילו לא נותן לי לעשות את זה.
אז הרשה לי לתקן את זה.
עכשיו, תן לי לחזור אל בכרטיסייה הוספה כאן ולציין
כי אני רוצה לייטנר, מלאן ו, שורה אחת יותר, טוב.
ועכשיו סוף סוף, רק אחד שקצת קשה
יש לזכור הוא כמובן מדריך.
בואו נכניס עכשיו ID1 הקורס הוא המדריכה ID1
אז זה CS1 והנרי.
ID2 הקורס הוא מדריכה ID2 אשר CS50 ומלאן.
ולאחר מכן עברו אלה שיש לנו לדאוג לו הוא כמובן ID3
אשר CS51, הוא לימד
על ידי מדריכה בקורס 1, שהוא הנרי.
ושלוש כגם לימדו על ידי 3, שהוא טוב.
אז אני מקווה שעכשיו יש לנו מחדש את זה -
לעזאזל, אני עשיתי את אותו הדבר.
מדריכה בקורס צריך תוספת אוטומטית.
בסדר.
אני אעשה את זה מהר יותר הפעם, כמובן 1, כמובן 1, 2, 2.
ועכשיו סוף סוף, אנחנו עושים CS51 שבו יש כמובן ID3 והנרי.
וכמובן ID3 וג'סי.
זה נראה טוב.
על אישור. אז עכשיו, בואו נחזור לחלון המסוף.
אז אם אני מתאר קורסים שנראים את זה.
אם אני רוצה לראות את הקורסים שאני יכול עכשיו לעשות לבחור כוכב מקורסים,
מעי גס למחצה, ועכשיו אנו רואים את הערכים האלה.
ועכשיו, מה עוד אני רוצה לעשות?
בחר כוכב ממדריכים, זה כמו שציפיתי,
ובחר כוכב מקורסים - מדריכה תחתון כמובן.
אז איך אני עכשיו להצטרף טבלאות אלה?
אז היופי של שבחר הערכים מזהה בדרך זו הוא
כי אם אתה חושב על לוקח את השולחן כמובן
והמדריכה טבלה ולאחר מכן החדרה
בין שני אלה בך מוחות המדריכה בקורס
שולחן שאתה יכול סוג של קו את כל עמודות מזהה אלה
כך שאתה למזג אותם לתוך עמודה אחת מסיבית שיש לו את כל
של המידע אכפת לנו.
תחביר SQL לכך לא בהכרח מובן מאליו,
אבל בואו נראה אם ​​אנחנו יכולים לעשות את זה.
כוכב אז בחר מקורסים,
ויש כמה בדרך כפי שאנו יכולים לעשות את זה.
אני הולך על Enter רק כדי סוג של דברים בפורמט יפה,
אבל החץ שהוא רק סימפטום של כלי צד הלקוח,
אין לזה שום לעשות עם SQL עצמו.
כוכב אז בחר מקורסים.
אני הולך להצטרף עכשיו שולחן הקורסים
על שולחן מורה קורס.
איך? בשדה שנקרא כמובן שווה courses.id
מדגיש מדריך מנקדים מה השם
של השדה המתאים כאן כי אני רוצה זוג.
זה לא מזהה.
שלמענם - מה, סליחה?
>> מספר קורס.
אוקיי, תן ​​לי להקטין את התצוגה.
אבל אני רוצה לקחת צעד זה אחד קדימה.
עכשיו אני כבר עשיתי את זה שולחן וזה אחד.
עכשיו אני רוצה למשוך הבחור הזה גם כן.
אז, תן לי עוד יותר להצטרף לכל הדבר הזה
במדריך של שולחן על מה?
קו תחתון כמובן id instructor.instructor
שווה instructors.id.
אז אנחנו יכולים לכתוב שאילתה זו בכמה דרכים.
הסדר שבו עשיתי את זה לא כל כך חשוב.
אני פשוט סוג של עשיתי את זה ב את דעתי משמאל לימין.
אנחנו יכולים לעשות את זה בכמה דרכים שונות
אבל אם יש לי עכשיו מעי גס למחצה ולחץ על Enter,
שים לב שאחזור חדש טבלה זמנית, ערכת תוצאות
כביכול במדבר מסד הנתונים.
ומה יש לי בדבר הזה?
יש לי בתעודת זהות, שם, אחר זהות, שהוא סוג של מבלבלת
לי באותו הרגע, מזהה כמובן,
זהות מאמן, זהות, ושם.
לכן, בסופו של היום יש לנו את הנתונים עכשיו.
אני יכול לראות שCS1 נלמד על ידי לייטנר, CS51 נלמד
על ידי לייטנר וטוב, ו CS50 מועבר על ידי מלאן.
אבל אני קצת עצבני על עמימות זו יצרתי.
מה העמימות אני מרמז?
כן?
[הערה לא נשמע]
יש שלוש עמודות זהות.
אז אנחנו באמת יכולים לתקן את זה ו אנחנו הולכים הולכים בעצם
לדחות למסגרת שלנו סופו של דבר כדי לעזור לנו עם זה,
אבל מסתבר שיש מילת המפתח ב-SQL שנקרא S,
שבו אתה יכול לציין כינוי, שם חדש עבור שדה
כדי שנוכל להימנע מכך עמימות לגמרי.
אבל הבין שאם לא נעשה לטפל בו איכשהו כעם
שמילת מפתח או מסגרת,
יש פוטנציאל זה עמימות אם תנסה
כדי לגשת לשדה מזהה כי ברור שיש אלה
עם שמות כפולים שם.
אז זה להצטרף ואני חושב בעיני רוחך את הדרך הטובה ביותר
לחשוב על זה באמת הוא לקחת שני שולחנות,
מרפד אותם ב דרך שאתה רוצה.
וזה מה שנקרא פנימי להצטרף במובן
שאנחנו משלבים השולחנות כאן.
ישנם סוגים אחרים של מצטרף שאנו עלולים להיתקל
לאורך זמן כמו צירופים חיצוניים,
אבל על פי רוב זה הוא כנראה הנפוץ ביותר
לשחזור נתונים.
מה שעשינו כרגע הוא בדרך כלל מה שנקרא
נרמול הנתונים שלך, כך ש אין כפילות בכל מקום
בשולחנות שלך.
ועל ידי שכפול, הייתי יש פירוש שהגישה הראשונה.
אם הזכרתי לייטנר וטוב במקומות מרובים
במסד הנתונים שלך, זה לא בדרך כלל ההחלטה הטובה ביותר
במיוחד אם השם שלהם כוח לשנות את שעות נוספות או במקרה
נישואים, שם נעורי כוח לשנות את עצמו אתה רק רוצה אחד
מקום הקנונית עבור חלק ערך כמו שם נתונים.
בסדר.
לכן, כדי לסכם, שהיינו לנו כמה החלטות עיצוב לעשות
והחשוב ביותר כנראה מצטמצם לכמה
אפשרויות של מדדים אלה.
אבל תן לי להצביע דבר אחד נוסף גם כן.
אם אני חוזר לphpMyAdmin,
תכונה אחת שאתה לא יכול נתקל לפני הוא
הבא.
אם אני הולך למדריכה בקורס, אני כבר לא לציין כי חלק
של יש את הדברים האלה אינדקסים.
אבל הרשית לי ללכת למבנה כרטיסייה של מדריכה בקורס.
תן לי עכשיו לחץ על אינדקסים ושימו לב את הדברים הבאים.
יש לי שצוין כאן, כי יש מפתח ראשי
בעמודה בשם זהות.
זה קצת מסובך דרך של ציון cardinality
וכן הלאה כמתייחס ל גודלו של השדה בבתים.
אבל עכשיו יש לי גם אחר שדה, זהות כמובן, שהוא -
מזהה כמובן שנעשה מראש וייחודי, אישור.
עשיתי את זה באחד לקדם עבורנו.
אז, למה זה - תן לי לרדת זה לצורך הדיון.
אה, אתה יודע מה עשיתי?
על אישור. אז, קודם לכן, אחד סכנות של שימוש בכלי GUI
ככה, כשהיינו יצירת זו להצטרף לשולחן,
שולחן המורה כמובן, זוכר שצוינתי
כי אני רוצה מדד בתחום זה
ומדד על זה תחום אחר.
תופעת הלוואי של בדיקת שתי קופסות האלה
על אותו המסך הוא כי phpMyAdmin להסיק מזה,
שאני רוצה ולא שתיים אינדקסים נפרדים,
כי אני רוצה להצטרף למדד אשר הוא בדרך כלל רק מועיל
או ביותר כאשר אתה מועיל חיפוש באינו תחום אחד
אבל שני תחומים אלה.
וזה למה שהיו לנו שלהם conjoin שם
אז שמטתי אותו 'גורם ש לא היה מה שהתכוונתי אליו.
במקום זאת, אני הולך לעשות שוב כאן.
אני הולך ללכת לזהות כמובן
ותחת יותר אני פשוט הולך להגיד להוסיף מדד.
ואני מתכוון ללכת תחת זהות מאמן ואומר להוסיף מדד.
ועכשיו אם אנחנו לחצו כאן, תרגיש כי יש לנו שלושה אינדקסים,
אחד עיקרי וכפי שאני נועד אחד לכל
מפתחות הזרים אלה.
ואני קורא לזה זר כי מזהה כמובן במפות השולחן הזה
לאיזה שדה, רק כדי להיות לנקות, בטבלה אחרת.
המפתח הראשי בשם זהות, בטבלה שנקראת קורסים,
ואותה עסקה עבור השני.
אבל עכשיו, הוא מעניין להערים ובאמת טכניקה.
אני פשוט הלכתי קדימה ותן לי לעשות את זה קצת יותר לאט.
באותו המסך, הודעה זה אומר תצוגת יחס כאן.
אני לוחץ על זה ועכשיו אני שם לב יוצא לי לעשות כמה אילוצים.
אז, אחד מupsides גם
של שימוש לא רק מושגית מפתחות זרים ולוחות אחרים
כמו שיש לנו רק על זה שעל ידי הגדרת מדד
עליהם אתה יכול לקבל את עזרה מסד נתונים אפילו לך יותר
להבטיח את תקינותו של תחום זה.
באופן ספציפי, אני יכול עכשיו ציין באמצעות ירידה זו
למטה שהשדה מזהה כמובן
בטבלה זו למעשה מפות לcourses.id.
כמו כן, קו תחתון מדריכה מזהה ממופה לinstructors.id.
עכשיו, למה זה שימושי?
ובכן, שים לב, בצד הימין צד מה שנראה עכשיו.
עכשיו אני יכול ללמד מסד הנתונים שאם הנרי
למשל אי פעם יפרוש והשורה שלו נעלמה
משולחנו של המורה לגמרי ובכך להיות
נמחק, אני יכול דרך זה מדורג גישה להבטיח
כי כל קורסים שהוא מלמד הם כבר לא קשור אליו.
אני יכול ללמד את מסד הנתונים כדי למחוק את השורות
בטבלה זה מה שנקרא להצטרף באופן אוטומטי אם הנרי או אם אחד
הקורסים שלו נעלם.
עכשיו, למה זה משכנע?
כן?
[הערה לא נשמע]
אתה רק צריך לעשות את זה פעם אחת וטווח ארוך יותר, נכון?
זה קל מאוד, אם סוג של אנשים באים והולכים, הקורסים באו
והולכים, יכולים מסד הנתונים שלך פשוט לקבל זרועה בקורסים
ועם סגל שלא רלוונטי עוד לערכת הנתונים.
הנתונים שלך ומתחילים להיות מאוד מבולגן ומלוכלך ומעופש,
וכן כאן אנו יכולים למיין
מלאכוף חלק האילוצים הללו.
כן?
[הערה לא נשמע]
הוא יודע בדרך של זה.
זהו המסך שבו אנו מפרטים הצמדה
בין מפתח הזר ומפתח ראשי.
אז כל השמות מוסכמות רמזתי
קודם לכן הן רק אמנות.
אין משמעות טבועה.
זהו המסך וזה רק מועיל
לאחר שציינת באינדקסים כל אחד מתחומים אלה, כפי שעשינו.
ובשביל זה יש לנו נפתחת כמה דברים למשל
אם כמובן נמחק אתה יכול בעצם למנוע מחיקה כי
מקורה אם יש היא שורה בטבלה זו
על ידי רק אומר, הגבל.
במילים אחרות הנרי לא יכול לפרוש
עד שלנתק אותו מCS51 וCS1.
אז זה דבר טוב.
אבל זה יכול לעורר שגיאות בקוד שלך
אם אתה לא צופה כי, או שאנחנו יכולים להיות מפל,
מפל דומה לאוהב גיליונות סגנון מדורג
ומדורג מפל אומר שאם -
אם הנרי יפרוש כל כך - על ידי מקבל נמחק
כך גם השורה שלו כאן לקבל נמחק.
אין פעולה לא אומרת כלום או null הוא סוג של שימושי אם אתה סוג
מרוצה קצת תיעוד היסטורי של הנרי שלמד CS51,
אבל אתה רק רוצה שדה זה ל להיות null כך שהשורות שם
אבל זה לא עוד הקשורים בו.
אז אלו הם חזקים מאוד טכניקות שאתה יכול
וצריך להשתמש בלמרות בעניין במיוחד
להציל אותך מעצמך.
אז תן לי לעשות אזכור של כמה פרטים האחרונים כאן,
חומרים שבי שעשוי להיות מועיל
כפי שאנו מתכננים לעיצוב מסד הנתונים.
יש לך גם בחירה מעל מנוע מסד הנתונים
שאתה משתמש בקוד שלך.
אם אתה מכיר של CS161 לך אולי -
או אפילו 61, אתה בדרך כלל יכול להיות מוכר עם מערכות קבצים.
ויש דברים כמו, NTFS ו HFS +
וX2FS4 [הפונטי] ו 3 וכן הלאה.
יש דרכים שונות אחסון הנתונים על שולחן.
כמו כן נמצאים שם דרכים לאחסון נתונים שונות
במסד נתונים כברירת מחדל לפחות במכשיר
עם הגרסה העדכנית ביותר של MySQL.
אנחנו כבר משתמשים מנוע מסד הנתונים שנקרא, NoDB,
אשר תומך כמה תכונות נחמדים.
אבל עוד אחד נפוץ הוא גם MyISAM התקשר ועוד
זה יכול להיות שימוש הוא זיכרון, מה שאומר שלא לשים שום דבר
בדיסק, רק לשמור דברים לזכרו.
ברוב המקרים אתה כנראה לא ישתבש רק מתחיל
עם NoDB, אבל לכל פרויקטים שנוטים לערב שיעורים גבוהים
של הכנסה למשל, כמו הרבה רישום מהיר,
מאות דברים לשנייה או אלפי דברים.
בכל פעם שיש לך הרבה דברים שקורים
באתר אז זה מיני
החלטות רמת נמוכה יותר מתחיל להסתבך.
תכונת טקסט מלאה למשל עובד רק בMyISAM
כך שיש לו משמעות.
אבל אתם אולי זוכרים את זה, בואו לפחות להניע למה אכפת לנו
על NoDB בפרט.
תנאי מרוץ בדרך כלל מתייחס למה?
בסדר, זה הוא רמיזה לדוגמה כמה
מכם אולי שמע ב שנים האחרונות אם 161 או 50
שבו יש לך שותף לחדר, שניכם מאוד אוהבים חלב,
אחד מכם מקבל הבית ראשון פותח המקרר אין חלב,
לסגור את ההליכה על פני המקרר רחובות לCVS ולקבל
בתור כדי לקנות קצת חלב.
בינתיים, השותף שלך מגיע לכאן.
היא גם אוהבת חלב.
פתח את המקרר ו מבין אין חלב.
הנה היא אז הולכת לאחסן, אולי CVS האחר.
הרצה קדימה כמה דקות לאחר מכן אתה חוזר ועכשיו שניהם
של יש לך קנה חלב.
אחד מהם הוא עכשיו הולך לקלקל כי אתה לא
כמו חלב שהרבה מדובר בבעיה, נכון?
מכיוון ששניכם נבדקו המדינה של כמה משתנים
וקבלתי החלטה על בסיס על זה אף על פי שהמדינה
של משתנה שהיה ביסוד בתהליך של להיות שונה,
כל זה יהיה באיטיות על פני כמות הזמן שלוקח
כדי להגיע ומCVS.
אז מה הוא סוג של אמת טפשה פתרון לבעיה של העולם הזה?
השאירו פתק, נכון?
זה קרה בפעם האחרונה.
תמיד להשאיר פתק או לנעול אותו הדבר, פשוטו כמשמעו.
ואני אומר מנעול, כי אם אתה לוקח או לקח CS161,
נעילה היא יסוד רעיון בעולם מסוג זה.
אז תנאי גזע יכולים להתעורר גם בעולם בסיס הנתונים
ואתה אולי זוכר אולי מ CS50 לממן אם לקח 50,
הקוד הזה שאנחנו בעצם נתנו אתם במפרט
באותו הזמן, כך ש הניתוח נקרא אטומי כל כך.
אם אתה רוצה, בזה מקרה, לקנות מניה של מניות
ויש לו המניות, כי סמל בפרט מסוים.
אמרו לכם להשתמש בקוד כמו זה, כי בדרך של זה
בעדכון מפתח כפול תחביר, אשר נבנה
לתוך MySQL אתה ביעילות עושה גם בעלון
או בעדכון לאחר עושה בחר לראות
אם המניה כבר נמצאת שם.
במילים אחרות, האנלוגי ב העולם של קניית המניה
חלב והמקרר יכול להיות, ראשון,
לפני קניית חלקו של גוגל אולי כדאי לך לבחור
מבסיס הנתונים כל מניותיה של גוגל כי דוד מחזיק
כדי לראות אם הוא בבעלות אפס או יותר.
ברגע שאתה רואה אם ​​הוא בבעלותה אפס או יותר יש לך
ולאז לעשות את הדברים הבאים.
או שאתה צריך לעשות להוסיף
אם יש לו היסוד 'אפס אין שום בשורה לדוד ובכל זאת,
או שאתה צריך לעשות עדכון אם לפחות בתאוריה אתה רוצה
יש שורה אחת לכל משתמש.
הבעיה היא בחירה מספר זה של מניות
ולאחר מכן עדכון או החדרה יכולה להיות מופרעת
על ידי מישהו אחר באחר מסוף מחשב מנסה לקנות
או למכור את חלק שלו של דוד מניות של מניות אם
למטרות טובות או מין מטרות זדוניות.
זה כמו ללכת לחנות כאשר השותף שלך חוזר
ובודק את המצב של משתנה.
אז תחביר זה בזמן שהיה סוג של מתאים
לCS50, נמנע ה בעיה לגמרי.
וזה פשוט עושה את כל זה קסם של נעילה בשבילך,
אבל עכשיו עם סוגים אלה פרויקטים לקורס זה
שסביר להניח שיהיה כרוך בערכות נתונים מורכבות יותר,
אתה לא יכול להשיג תמיד אטומי הזה.
כל מה שקורה בבת אחת או בכלל לא
ללא הפרעה כך באלגנטיות.
וכך MySQL, אחר מנוע מסד הנתונים,
דברים תמיכה שנקראים מנעולים,
לפיה ניתן לומר מנעול זה שולחן כך שרק טיפול אחד
ובאופן כללי אחד רק משתמש יכול לגעת בו בכל נקודת זמן
כדי לקרוא או לכתוב ו אז אתה יכול לפתוח אותו.
זוהי דוגמה מאחד מאזכורו של MySQL,
שבו אם יש לך כמו בנק חשבון שאתה מנסה
לנכות כסף מ ולאחר מכן להוסיף כסף ל.
אולי אתה רוצה לוודא כי הן
מהדברים האלה יקרו יחד
כך שאין שום טעויות מתמטיות
ואין הפסדים אחד כסף, איכשהו.
הבעיה עם מנעולים אם כי במסד נתונים הוא
שזה בדרך כלל אומר השולחן כולו נעול,
מה שאומר שאם יש לך מאה אנשים שמנסים
לעשות עסקים עם הבנק שלך באינטרנט באותו הסכום
של זמן רק אחד שלהם יכולים ללכת בכל פעם.
שהוא טיפש, במיוחד בשרתים של ימינו
שיש להם שמונה כמובן, 16 כמובן, יש כמות עצומה
של זיכרון, אין סיבה להמשכים כל
העסקות שלך אם אלה לקוחות רק הולכים
כדי לקיים אינטראקציה עם השורות שלהם.
אז NoDB מאפשר לך לעשות דברים אינטליגנטיים יותר
וזה בדרך כלל יהיה הגישה שאתה לוקח בקוד,
כפי שאתה משתמש במשהו קרא את העסקה.
ואתה עושה את זה בדרך כלל בקוד ה-PHP,
קוד רובי, פייתון, לא משנה מה.
אבל קוד SQL זה משמש סופו של דבר היא זו,
בדרך כלל.
התחל עסקה אז אתה תציין שתיים או יותר שאילתות
שברצונך ביצוע לגמרי
ללא הפרעה או בכלל לא.
יכול אפילו להיות שיש כמה בחר הצהרות ב
או מוחק אותו או עדכונים.
אבל הדבר נחמד הוא ש מסד הנתונים יהיו מספיק חכמים
כדי לוודא שזה יהיה רק לנעול את השורות שהם למעשה
מעורב בזה עדכונים או לחלופין, בוחר או מוחק.
אז אם יש לך אלפי שורות ואתה נוגע רק שלושה
מהם, רק שקבוצת משנה של הטבלה יהיה נעול
מה שאומר ש99 אחרים אלה לקוחות יכולים לגעת שורותיהם
מבלי להיות בהמשכים והאט על ידך.
בינתיים, זה הכי נחמד היבט לעסקות.
הם עסקות ב לחוש כמו 161 על מערכת קבצים,
הם עסקות
מה שאומר שאתה יכול לגלגל אותם בחזרה, תוכל לבטל אותם.
זה כמו הפקודה או לשלוט F של מסדי נתונים.
אם אתה מגלה חלק דרך כל
פעולת נתונים השונות שלך, לירות, משהו משתבש.
אתה ממש לבצע רול שאילתת SQL שונה בחזרה
וכל מגמתם - כל הדוחות שהוצאו להורג
לאחר שאמר התחלה עסקה נעלמת
כאילו מעולם לא קרה,
שהוא מדהים דבר חזק.
ואלה הם סוגים של דברים בוודאי ב50 סוג
של לטאטא מתחת לשטיח ו אתה פשוט סוג של להניח
שהכל יהיה בסדר.
אבל ברגע שאתה מתחיל לחשוב על פרויקטים בתחום נדל
ומשתמשים ואמיתיים שלמותו של מסד הנתונים שלך,
אלה הם סוגים של החלטות עיצוב
כי הם הולכים להיות חשובים.