PracticU

יצירת טבלת בסיס ב-SQL

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › יצירת טבלת בסיס ב-SQL
מילון מושגים:
מפתח ראשי - עמודה או צירוף עמודות שמזהים באופן ייחודי כל שורה בטבלת מסד נתונים.
מפתח זר - עמודה בטבלה שמפנה למפתח הראשי בטבלה אחרת, ובכך יוצרת קשר בין הטבלאות.
GUID - מזהה ייחודי גלובלי: מספר ארוך שנוצר כך שהסיכוי לכפילות שלו זניח, ומשמש לזיהוי אובייקטים.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.
SQL Server - מערכת ניהול מסדי נתונים יחסיים של מיקרוסופט, הנשלטת בשפת T-SQL.
HTML - שפת הסימון שבה בונים את מבנה ותוכן דפי האינטרנט, באמצעות תגיות שמגדירות כותרות, פסקאות, קישורים ועוד.
CSS - שפת עיצוב שקובעת את המראה של דפי אינטרנט: צבעים, גופנים, מיקום וסידור הרכיבים.
JavaScript - שפת תכנות שרצה בעיקר בדפדפן ומוסיפה אינטראקטיביות לדפי אינטרנט. רצה גם בצד השרת באמצעות Node.js.

יצירת טבלת בסיס ב-SQL
בונים את הטבלאות הראשונות במסד College: טבלת תלמידים וטבלת קורסים. תוך כדי כך ההרצאה מסבירה איך מגדירים מפתח ראשי אוטומטי, מה המוסכמות לשמות, ומהי טבלת בסיס.
השלבים העיקריים
1. שמות: שם הטבלה ברבים (Students, Courses), והמפתח הראשי הוא שם הטבלה ביחיד עם הסיומת ID, למשל StudentID. ב-MSSQL נהוג לכתוב מילים מחוברות עם אות גדולה בתחילת כל מילה, בלי קו תחתון.
2. מפתח ראשי: לא מומלץ להשתמש בתעודת זהות או במספר רכב. המפתח הראשי משוכפל כמפתח זר בטבלאות אחרות, ותעודת זהות היא מידע רגיש, תופסת תשעה תווים והופכת את המערכת לפחות מאובטחת. נהוג שהדאטאבייס יצור קוד לבד, ברוב המקרים ערך מספרי, ואפשרות אחרת היא guid.
3. הגדרה: בוחרים טיפוס int, מסמנים Set Primary Key (בכפתור או במקש ימני), ולא מסמנים Allow Nulls. ב-Properties של העמודה מגדירים Identity Specification, Is Identity ל-yes. Identity Seed הוא המספר שמתחילים ממנו ו-Identity Increment הוא הגודל של כל צעד. ברוב המקרים משאירים 1 ו-1. אם Seed הוא 10 ו-Increment הוא 5, הרשומות יקבלו 10, 15, 20.
4. שאר העמודות של Students: FirstName ו-LastName מסוג nvarchar. ה-n מאפשר גם עברית, וה-var נותן אורך דינמי כך שמחרוזת קצרה לא תתפוס רווחים מיותרים. תלמיד חייב שם, ולכן לא מאפשרים Null. Email הוא nvarchar(150) שמותר בו Null, כי תלמיד יכול שלא לתת אימייל.
5. שמירה: שומרים וכותבים את השם Students ברבים. כדי לראות את הטבלה ב-Object Explorer צריך Refresh. כדי לחזור לעיצוב: מקש ימני על הטבלה ו-Design.
6. צפייה ועריכה: Select Top 1000 Rows מציג מידע בלי אפשרות לשנות, ו-Edit Top 200 Rows מאפשר גם לערוך. בדוגמה הוכנסו שלושה תלמידים (Bart, Lisa ו-Homer Simpson), וה-ID נוצר אוטומטית ולא ניתן לשנות אותו ידנית.
7. מספר השורות המוצגות: בכלי Options, SQL Server Object Explorer, אפשר לשנות את מספר השורות של Select ושל Edit. ערך 0 מציג הכל, ולא מומלץ בטבלה גדולה.
8. טבלת Courses: CourseID כמפתח ראשי אוטומטי, Name מסוג nvarchar שחייב להיות מלא, ו-Hours מסוג tinyint, שגם הוא חובה. הוכנסו קורסים כמו HTML for beginners ב-12 שעות, CSS is fun ב-20 שעות, JavaScript for Experts ב-40 שעות ו-The Amazing C-Sharp ב-50 שעות.
כללי שמות
עבור אנשים כמו תלמידים, לקוחות או ספקים לא נותנים עמודה אחת Name, כי לא ברור באיזה סדר השם הפרטי ושם המשפחה, ואי אפשר לחפש לפי כל אחד מהם. מפרידים ל-FirstName ו-LastName, ולפעמים גם MiddleName. לדברים כמו מוצרים וקורסים אפשר Name.
מהי טבלת בסיס
Base Table היא טבלה שמחזיקה את המידע הראשי והמרכזי של האפליקציה, שיכול לגדול עם הזמן: תלמידים, מרצים, חומרי עזר, מוצרים, לקוחות או ספקים. יהיו עוד סוגי טבלאות, וההרצאה הבאה עוברת לאחד מהם.
אחרי ההרצאה אפשר לבנות טבלת בסיס עם מפתח ראשי מספרי שנוצר אוטומטית.
השיעור הבא בקורס: יצירת טבלת רשימה ב-SQL

פרקי ההרצאה: יצירת טבלת בסיס ב-SQL

  1. 00:00

    בניית טבלת תלמידים

  2. 01:16

    בחירת סוג המפתח הראשי

  3. 02:11

    למה לא תעודת זהות כמפתח

  4. 02:46

    מספור אוטומטי על ידי הדאטאבייס

  5. 03:38

    הגדרת Identity

  6. 04:14

    Seed ו-Increment

  7. 05:13

    הגדרת עמודות מחרוזת

תמלול ההרצאה: יצירת טבלת בסיס ב-SQL

הטקסט המלא של הדקות הראשונות בהרצאה «יצירת טבלת בסיס ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:27

    אני בונה טבלת תלמידים אני אקרא לה סטיודנטס ברבים ולא סטיודנט יחיד כי היא מכילה הרבה סטודנטים. אם אני רוצה לבנות טבלה שמתארת חתולים, אז אני אקרא לה קיטנז ברבים ולא קיטן ביחיד.

  3. 00:42

    אז אם הטבלה הזאת מתארת תלמידים, העמודה שמחזיקה את המפתח תמיד תהיה שם הטבלה ביחיד, סטיודנט ביחיד, עם סיומת ID, מפני שזה קוד של תלמיד בודד.

  4. 00:57

    אפשר להגדיר ID בצורה כזאת, ברוב המקרים ב-MSSQL אנחנו מתחילים את העמודות ואת הטבלאות בעוד גדולה. מילים מחוברות, לא נהוג להשתמש ב-underline.

  5. 01:08

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

  6. 01:25

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

  7. 01:38

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

  8. 01:51

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

  9. 02:01

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

  10. 02:14

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

  11. 02:30

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

  12. 02:51

    אני לא רוצה לטפל בזה, אני רוצה להכניס ערך ושהדאטאבייס ייצר לי. יש שתי שיטות, שיטה אחת שהדאטאבייס ייצר ערך מספרי, ושיטה אחת שהדאטאבייס ייצר ערך מכרוזתי.

  13. 03:04

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

  14. 03:17

    לכן, מה שאנחנו מגדירים כאן זה אינטג'ר, הנה הוא. מה שאנחנו רוצים זה להגדיר את העמודה הזאת כמפתח ראשי אז יש לנו כאן את האייקון הזה set primary key או שאפשר מקש ימני אותו דבר set primary key הנה אנחנו רואים פה סימן קטן קטן קטן כזה של מפתח אבל עדיין לא אמרנו לדאטה בייס לייצר מספר

  15. 03:42

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

  16. 04:01

    עבור מפתח ראשי חייב להיות ערך, והנה זה פה. identity specification is identity, אני מחליף אותו ל-true, ל-yes. ויש לנו כאן seed, זה מאיפה, מאיזה מספר אנחנו רוצים שהוא יתחיל, ו-increment זה כמה אנחנו רוצים שהוא יגדל כל פעם שהדאטאבס ייצר מספר חדש.

  17. 04:24

    אם הייתי אומר לו 10 ותגדל ב-5 אז המספר הראשון שהדאטאבס ייצר לנו יהיה 10. אם אנחנו נכניס רשומה נוספת, תלמיד חדש אז ה-ID שלו יהיה 15, תלמיד חדש יהיה 20 וכדומה.

  18. 04:38

    ברוב המקרים משאירים את זה 1-1. זאת אומרת 1, 2, 3, 4 תג'נרט לי כל פעם מספור אוטומטי רץ ועולה ב-1. הגדרנו כרגע את המפתח הראשי.

  19. 04:50

    יש לנו פה עוד עמודה על ה-onals, האם אני מחייב שיכניסו ערך או האם וואלה ברגע שמכניסים לי תלמיד חדש לא חייבים לתת לי את הערך כמובן אם זה מפתח ראשי אסור לסמן עלה או נעל אז בואו נראה מה עוד יש לנו בטבלת התלמידים בוא נניח first name זה כמובן לא יהיה מספר זה יהיה מחרוזת אז אני אגדיר אותו כn var char 50 למה n כי אני רוצה גם שיהיה אפשרות להכניס בעברית למה var

  20. 05:21

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

  21. 05:32

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

  22. 05:43

    לא, אני לא רוצה. תלמיד במכללה, לא הגיוני שהוא יירשם לי במכללה ויגיד, לא בא לי לתת לכם את השם הפרטי שלי, אין דבר כזה.

  23. 05:50

    אז אני לא מסמן עלה אונל. בואו נגדיר last name nvarchar,

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: שמירת זמנים ותאריכים ב-SQL

ההרצאה הבאה: יצירת טבלת רשימה ב-SQL

הרצאות קשורות מקורסים אחרים

  • יצירת Controller בסיס
  • טבלת Temporal
  • יצירת Docker Image מאפס - ללא בסיס
  • בדיקות טבלת החלטה

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI