
CreditCards העמודה StudentID מסוג int היא המפתח הראשי, בלי מספור אוטומטי. אין צורך בטבלת association, כי לכל תלמיד כרטיס אחד לכל היותר. תלמיד בלי כרטיס אשראי, למשל מי ששילם בהעברה, פשוט לא מופיע בטבלה.StudentID בטבלת התלמידים אל StudentID בטבלת הכרטיסים. המרצה שכח בהתחלה להגדיר מפתח ראשי ותיקן זאת. בוחרים Cascade ב-Delete וב-Update, כי כשתלמיד נמחק אין סיבה לשמור את הכרטיס שלו.הטקסט המלא של הדקות הראשונות בהרצאה «יצירת קשר יחיד-ליחיד ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
סוגי הקשרים שראינו עד עכשיו היו one to many יחיד לרבים זה בעצם רוב המקרים שיש קשר עבורם וראינו גם many to many כקשר קונספטואלי שבנינו אותו על ידי טבלת association שמחוברת לשתי טבלאות אחרות אין קשר פיזי כזה באמת בדטאבייס אלא רק קשר רעיוני אבל יש עוד סוג קשר והקשר הזה זה one to one בואו נראה למה אנחנו צריכים קשר one-to-one ומה זה.
בואו נלך לטבלת התלמידים. נציג כאן את טבלת התלמידים ונסתכל רגע מה המידע שיש לכל תלמיד. לכל תלמיד יש שם פרטי, שם משפחה, אימייל, באיזה עיר הוא גר, ואני רוצה לשמור עוד נתונים לכל תלמיד.
והנתונים שאני רוצה לשמור זה נתון שאני רוצה אחד ויחיד לכל תלמיד, כזה בדיוק כמו שלכל תלמיד אני רוצה רק אימייל אחד, זה לא משנה ואם יש לו הרבה אימיילים.
אני רוצה את האימייל המרכזי שלו. שם פרטי אחד, שם משפחה אחד, עיר אחת. כמו שאני רוצה כאן פרטים שהם פעם אחת עבור התלמיד, אני רוצה גם את כרטיס האשראי שלו.
אבל אני רוצה כרטיס אשראי אחד ויחיד לתלמיד. אני לא רוצה שני כרטיפי אשראי. תן לי כרטיס אשראי אחד, זה הכרטיס האשראי המרכזי שלך. יכול להיות שיש לך שלושה כרטיפי אשראי, אין בעיה.
אני רוצה אחד. אתה רוצה, תעדכן אותו בהמשך לאחד אחר. אני רוצה רק אחד. אם אני רוצה רק כרטיס אשראי אחד, הגיוני שאני אשמור אותו בטבלת התלמידים, כי כל פריט פה עבור תלמיד מופיע פעם אחת.
יש לו שם פרטי אחד, יש לו שם משפחה אחד, יש לו אימייל אחד, הוא גר בעיר אחת, אני רוצה כרטיס אשראי אחד.
אז הגיוני שפה יהיו את הפרטים של הכרטיס אשראי. אבל זה לא יהיה נכון לעשות את זה. למה? יש לזה כמה סיבות. דבר ראשון, כרטיס אשראי לא בנוי מנתון בודד, זה לא רק המספר של הכרטיס.
לכרטיס אשראי יש מספר כרטיס, יש לו תוקף, זה כבר נתון נוסף, יש לו security number, זה המספר מאחורה או מקדימה, נקרא cvv, security number של הכרטיס.
יכול להיות עוד נתונים, אולי אנחנו רוצים את הסוג שלו, אם זה ויזה או וואטאבר. אז קודם כל יש פה כמה נתונים שאנחנו רוצים על הכרטיס, זה דבר ראשון שאנחנו צריכים להבין.
אני לא רוצה יותר מדי ערכים פה באותה הטבלה של תלמידים שבכלל קשורים לכאילו ישות אחרת, כרטיף אשראי. סיבה נוספת, ככל שהטבלה גדולה יותר מבחינת העמודות, כך הפעילות שלה תהיה יותר איטית.
תהיה יותר איטית. טבלה לא אמורה להיות מאוד מאוד גדולה מבחינת כמה עמודות יש לה. אז כמובן 10 או 20 עמודות זה לא כזה הרבה, עדיף לנו מעט יותר עמודות מאשר טבלה עצומה בגודלה.
השיקול הכי מרכזי כאן זה security. ברגע שאתם מתעסקים עם כרטיסי אשראי, כרטיס אשראי זה מידע רגיש, הרבה יותר משם פרטי או שם משפחה של תלמיד. אם אנחנו שמים את המידע הזה באותה הטבלה של התלמידים, כל מי שיש לו גישה לטבלת התלמידים, פתאום יש לו גישה גם לכרטיסי אשראי.
ואנחנו יכולים לאשר גישה לטבלה על ידי כל מיני מקורות ולמנוע גישה לטבלאות אחרות. איש ה-DBA, דאטאבייס אדמיניסטרטור, מי שאחראי על הדאטאבייס ובונה אותו, יכול להגדיר גישות לטבלאות ולהגיד, אוקיי, אני נותן איזושהי גישה מסוימת, בוא נניח אנשי השיווק ולרכזת ולמנהלים יש גישה
לטבלת התלמידים. אבל אני לא רוצה לתת לרכזת גישה לכרטיסי אשראי של התלמידים. זה אני רוצה לתת רק למחלקת הכספים שגובים את הכספים כל חודש.
רק להם תהיה גישה ספציפית לטבלה אחרת ששומרת לי את כרטיסי האשראי. טוב, אז בואו נייצר עוד טבלה מיוחדת עבור המידע הרגיש הזה של כרטיסי אשראי ורק לחלק מהארגון תהיה גישה אליהם. שוב, את האפשור לגשת אנחנו לא הולכים לבצע כרגע, זה כבר הנושא של security.
אנחנו רק רוצים לראות את ה-relation ביניהם. אז אני רוצה לייצר פה טבלה עבור כרטיפי אשראי של תלמידים. איך אני אומר שכרטיף אשראי שייך לתלמיד?
אני לא צריך טבלה נוספת בשביל זה. אני לא צריך association table, כי כרטיף אשראי גם ככה שייך לתלמיד אחד ויחיד. תלמיד אחד, אמרנו כבר שאני רוצה רק כרטיף אשראי אחד שלו.
כל מה שאני צריך לעשות זה המפתח הראשי שלי יהיה student ID. רגע, אבל כבר יש לי מפתח ראשי כזה בטבלת התלמידים. אין שום בעיה, סטיודנט איי-די יכול להיות המפתח הראשי גם בטבלת הקרדיט קארדס שלנו.
בואו נגדיר כאן שהוא אינטג'ר, אבל הוא לא מספור אוטומטי רץ, חובה שהוא יהיה. בואו נגדיר כאן שיש לנו קרדיט קארד נאמבר, זה כמובן יהיה וורצ'אר, מקסימום כרטיס אשראי יכול להכיל 16 תווים, לפי דעתי, מספר, בואו נגדיר 16. לא הגיוני שתביאו לי כרטיף אשראי, אבל אל תביאו לי את המספר שלו, אין דבר כזה.
ואליד 2 הוא בעצם ואליד עד תאריך תפוגה, זה יהיה וורצ'אר, ולפי דעתי 5, סוגריים 5, כי אני בעצם