JavaRush /בלוג Java /Random-HE /אנו מנתחים מסדי נתונים ושפת SQL - "פרויקט ג'אווה מא' עד ת...
Roman Beekeeper
רָמָה

אנו מנתחים מסדי נתונים ושפת SQL - "פרויקט ג'אווה מא' עד ת'"

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

מסד נתונים: מה זה

“Java-проект от А до Я”: разбираем базы данных и язык SQL - 2מסד נתונים (להלן DB) הוא מקום שבו מאוחסנים נתונים מובנים , שניתן להשיג באמצעות שפת שאילתה. מסדי נתונים יכולים לא רק לאחסן, אלא גם לעבד ולשנות מידע בהיקפים גדולים. כהערה: נסה לשנות במהירות קבוצת ערכים ב-Excel על סמך כמה קריטריונים. עקרונית, שום דבר לא מסובך. לא כמו בעולם האמיתי הלא-דיגיטלי שלנו. לדוגמה, שינוי שמות של נתיבים, רחובות, ערים. אם הכל היה וירטואלי ונכנס למסד הנתונים, זה היה מנורמל, זה היה כמה זוטות. כפי שהוא, מדיות אחסון רבות סובלות מכיוון שאינן יכולות להשתנות באופן אוטומטי. בהקשר זה, SQL עבור מסדי נתונים היא שפה שמסד הנתונים מבין ומגיב בהתאם. נניח, שינוי שמה של העיר לא יהיה קשה; שינוי שמה של דנייפרופטרובסק לדניפרו ייראה בערך כך:
UPDATE city SET name = “Днипро” WHERE id = 1231;
כל הבקשות הבאות למערכת כבר ייצרו את השם שאנחנו צריכים.

מדוע נדרשים מסדי נתונים?

כפי שכבר אמרתי, באמצעות מסדי נתונים ניתן לאחסן נתונים. אבל מה זה הנתונים האלה? כדי להבין שימוש בדוגמה מהחיים האמיתיים, נוכל לדבר על יישום כלשהו. למשל, על אותו בוט טלגרם. אנחנו רוצים לדעת כמה אנשים משתמשים בבוט. כיצד ניתן ליישם זאת? באפליקציית ג'אווה רגילה, ניתן ליצור אלמנטים ייחודיים רבים - סט, אשר יאחסן את הכינוי או הצ'אט מזהה של המשתמש. זה יעבוד? רָצוֹן. בדיוק עד להפסקת אפליקציית ג'אווה, ומיד עם הפעלתו מחדש, סט האלמנטים הייחודיים יהיה ריק. כלומר, הנתונים שהיו מאוחסנים באפליקציה הפועלת פשוט נעלמו. מה אתה יכול לעשות בנידון? אתה יכול להעביר את האחסון של מצב המערכת (נתונים) מיישום Java למקום אחר. אתה יכול לאחסן את זה בפורמט CSV בקובץ רגיל במחשב שלך. אתה יכול לעשות זאת בשורה אחת בקובץ נפרד. אתה יכול לעשות זאת ולאחר מכן להחליף נתונים אלה לפני שיישום Java נעצר. למרות שהערובה שההקלטה תצליח רחוקה מלהיות קרוב ל-100%, כי אפשר פשוט לשלוף את כבל החשמל של השרת וההקלטה לא תתרחש. לגישה זו יש חיסרון משמעותי: אין פונקציונליות להשגה, צבירה וחיפוש מידע ברמת הקובץ. כן, כמובן, אתה יכול לקרוא קובץ וליצור עבורו אובייקטים, אבל תצטרך לשאוב את כל הנתונים לאפליקציה בכל פעם. ויכולים להיות הרבה מהם, למשל, כמה גיגה-בייט. ניתן להימנע מכך על ידי אחסון נתונים במסד נתונים. אֵיך? דרך טבלאות ויחסים ביניהם. על זה מבוססים כל מסדי הנתונים היחסיים.

SQL: שפה שמסדי נתונים מבינים

ישנן מערכות ניהול מסדי נתונים (להלן DBMS) והשפה שהם מבינים היא SQL. SQL היא שפת תכנות למניפולציה וניהול של מסדי נתונים. כדי להבין איך זה עובד, בואו נסתכל על האיור: “Java-проект от А до Я”: разбираем базы данных и язык SQL - 3המשתמש שולח שאילתות SQL ל-DBMS, ה-DBMS מבין מה צריך לעשות, עושה את זה, ואם הבקשה הייתה להשיג נתונים, אז מחזיר אותם. לכן, כמפתחים, עלינו לשלוט בשפת השאילתות של SQL. אולי תחשוב, "הו, שפה אחרת. בעזרת השם, אני בקושי מבין כאן את ג'אווה, ואתה מיד מציע לי שפה אחרת". זה לא נכון: SQL הומצא כשפת מפרט ל-DBMS כך שרואה חשבון שרחוקים מאוד מבסיסי נתונים ותכנות בכלל יוכלו לכתוב בשפה זו. זה אומר שלמד את זה לא יהיה כל כך קשה. העיקר הוא תרגול-תרגול-תרגול. היום תהיה תיאוריה, אבל המאמר הבא יעסוק בפרקטיקה. מכיוון שמסד נתונים יחסי הוא קבוצה של טבלאות-מערך דו-ממדיות ויחסים ביניהם, העבודה תעבוד סביבם. אם נדבר על דוגמה, נוכל להראות שתי טבלאות - "מדינות" ו"ערים" וכיצד הן מחוברות. “Java-проект от А до Я”: разбираем базы данных и язык SQL - 4בשלב זה, חשוב לנו להבין שהרשומות בטבלה הן נתונים על אובייקט כלשהו מעולם הג'אווה. לדוגמה, ניתן לתאר את שתי הטבלאות הללו ב-Java כך:
public class Country {
   private Long id;
   private String name;
}

public class City {

   private Long id;
   private String name;
   private Country country;
   private Integer population;
}
ובכן, זה לא יפה, הא? מסד הנתונים יכול לאחסן כל מספר של טבלאות. במקרה שלנו יש שניים מהם.

מבנה השולחן

אני חושב שכולם נתקלו בטבלאות אקסל בצורה כזו או אחרת, ואתם מבינים את המונחים שורה ועמודה . בהקשר של מסדי נתונים מדברים יותר על רשומות ושדות: “Java-проект от А до Я”: разбираем базы данных и язык SQL - 5כך יוצא שכל אובייקט של המחלקה City הוא רשומה בטבלה במסד הנתונים.

מפתח ראשי

“Java-проект от А до Я”: разбираем базы данных и язык SQL - 6לעתים קרובות קורה שלשדות בבסיסי נתונים יש אותם ערכים. למשל, רשתות חברתיות, שבהן ניתן למצוא יותר מאדם אחד לפי שם, שם משפחה ואפילו פטרוניום. ומסדי נתונים יחסיים דורשים שדה ייחודי שניתן להשתמש בו כדי לגשת לרשומה. זה נקרא המפתח הראשון או המפתח הראשי. בדרך כלל, השדה ID(id) משמש כמפתח כזה - זה קיצור של מזהה. זו הסיבה שאתה צריך להוסיף שדה מזהה לכל טבלה .“Java-проект от А до Я”: разбираем базы данных и язык SQL - 7

מפתח חיצוני

בדוגמה שלנו, שדה כזה נמצא בטבלה City, המשתמשת במפתח מ-Country. וזה עובד כך: כל עיר מכירה מזהה מידע ייחודי למדינה שלה, ואם ניקח אותו וניצור שאילתה במאגר, נקבל מידע מקיף על המדינה. כפי שניתן לראות בתמונה, יש קשר בין שתי טבלאות: “Java-проект от А до Я”: разбираем базы данных и язык SQL - 8העיקרון של מפתח זר מוצג כאן.

אילו סעיפים יש ב-SQL?

אגב, במהלך ראיונות הם נשאלים לעתים קרובות אילו פעולות יש ב-SQL:
  • DDL (Data Definition Language) היא קבוצה של אופרטורים שמשנים/יוצרים טבלאות, המבנה שלהן ועוד. כלומר, יצירת טבלה, מחיקתה, יצירת/מחיקת שדות בטבלאות; יצירת מפתח ראשי חדש וכן הלאה;
  • DML (שפת מניפולציה של נתונים) היא קבוצה של אופרטורים המנהלים שינוי נתונים. כל אלו הן פעולות שמשנות נתונים במסד הנתונים: הוספה, קבלת, שינוי ומחיקה;
  • DCL (שפת בקרת נתונים) היא אמצעי לאישור זכויות משתמש לביצוע פעולות. פעולות למתן גישה וזכויות למשתמש ספציפי כדי שיוכל לבצע פעולות DDL/DML.

אילו סוגי נתונים קיימים ב-SQL

טבלאות יכולות לאחסן ולעבד סוגים מסוימים של נתונים. הכל כאן יהיה דומה למה שאנו משתמשים בג'אווה. בואו נדבר על העיקריים שבהם. יש רק שלושה מהם, נוסיף אחרים לפי הצורך ו/או הרצון: “Java-проект от А до Я”: разбираем базы данных и язык SQL - 9כפי שניתן לראות מהתמונה, אלו הם:
  • INT - ערכי מספר שלמים. משמש עבור מזהה ייחודי ועבור מספר שלם פשוט;
  • VARCHAR הוא המחרוזת שלנו ;
  • DATE הוא LocalDate שלנו.
עד כאן הכל פשוט, נכון? סוגי שדות מצוינים בעת יצירת הטבלה. ברור שלא ניתן יהיה לכתוב ערך מסוג אחר לשדה.

מה הם אופרטורים של SQL

אופרטור הוא פקודה נפרדת שמבצעת פעולה כלשהי. אופרטורים מורכבים ממשפטים, אשר בתורם מורכבים ממילות מפתח המשמשות בשאילתות. בואו נסתכל על דוגמה: “Java-проект от А до Я”: разбираем базы данных и язык SQL - 10יותר מעניין כאן, כבר נבנתה כאן שאילתה. מה הם עושים שם? זה פשוט, זה אומר: "קח שלושה שדות (שם, גיל ותאריך נוצר) מטבלת הלקוחות, בחר רק את הרשומות שבהן השם שווה לרומי."

סיכום

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

שיעורי בית

כדי להוסיף עניין לסדרת המאמרים הזו ב-JRTB, יהיו שיעורי בית מעת לעת. לדוגמה, ללא המשימה של היום, המאמר הבא יהיה הרבה יותר קשה להבנה, כי יהיה שם הרבה תרגול. לכן, המשימה היא להתקין את MySQL DBMS במחשב שלך ולהיכנס למסד הנתונים דרך הקונסולה או דרך פתרונות אחרים. תודה לכולכם שקראתם, נתראה בקרוב!

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

הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION