מה זה מסד נתונים (Database)?
מסד נתונים (database) הוא אוסף מאורגן של נתונים שנשמר במחשב, כך שתוכניות יכולות למצוא, להוסיף, לשנות ולמחוק אותם במהירות ובבטחה. מנהלת אותו תוכנה שנקראת מערכת לניהול מסדי נתונים (DBMS), כמו PostgreSQL, MySQL, SQLite או MongoDB.
עודכן ב-24 בספטמבר 2026
כשנכנסים לאתר, האתר צריך למצוא את החשבון שלכם מבין מיליוני חשבונות אחרים, לבדוק את הסיסמה ולטעון את ההגדרות שלכם, והכול תוך כמה אלפיות שנייה. הוא לא פותח קובץ טקסט וקורא אותו שורה אחרי שורה. הוא שולח בקשה כמו SELECT * FROM users WHERE email = 'ana@example.com' למסד נתונים, ומסד הנתונים קופץ ישר לשורה הנכונה בעזרת אינדקס, בדומה למפתח שבסוף ספר.
איך מסד נתונים עובד
שני חלקים עובדים יחד. מסד הנתונים הוא הנתונים, מאורגנים במבנה קבוע. המערכת לניהול מסדי נתונים (DBMS) היא התוכנית ששומרת את הנתונים בקבצים, שומרת על העקביות שלהם ועונה לבקשות. PostgreSQL, MySQL ו-SQLite הן מערכות DBMS; רשימת הלקוחות שלכם היא מסד הנתונים.
במסד נתונים רלציוני, הנתונים נמצאים בטבלאות. לכל טבלה יש עמודות (שם, מדינה, נקודות) ושורות (אחת לכל משתמש). בקשה עוברת את השלבים האלה:
- התוכנית שלכם שולחת שאילתה, בדרך כלל כתובה ב-SQL (Structured Query Language).
- ה-DBMS מנתח את השאילתה ומתכנן איך לענות עליה: אילו טבלאות לקרוא והאם אינדקס יכול לדלג על רוב השורות.
- הוא קורא את הנתונים מהדיסק בדפים בגודל קבוע (4,096 בייטים כברירת מחדל ב-SQLite, 8 KB ב-PostgreSQL), ומחזיק בזיכרון דפים שמשתמשים בהם לעתים קרובות.
- הוא מסנן, ממיין ומשלב שורות, ואז מחזיר את התוצאה.
Python מגיעה עם SQLite, כך שאפשר להריץ כאן מסד נתונים אמיתי:
Kenji 340
Omar 340
Ana 120
users: 4 average points: 222.5
התוכנית אף פעם לא אומרת איך לחפש. היא מתארת את התוצאה שהיא רוצה, וה-DBMS מחליט איך להשיג אותה. זה ההבדל העיקרי בין לשאול מסד נתונים לבין לכתוב לולאה על רשימה.
סוגי מסדי נתונים
| סוג | שומר נתונים כ | דוגמאות | שימוש טיפוסי |
|---|---|---|---|
| רלציוני (SQL) | טבלאות של שורות ועמודות, מקושרות במפתחות | PostgreSQL, MySQL, SQLite, Oracle, SQL Server | משתמשים, הזמנות, תשלומים: רוב האפליקציות |
| מסמכים | מסמכים דמויי JSON | MongoDB, Firestore, CouchDB | רשומות שהשדות שלהן משתנים מאחת לשנייה |
| מפתח ערך | ערך שנשלף לפי מפתח אחד | Redis, DynamoDB | מטמון, סשנים, מונים |
| עמודות רחבות | שורות עם עמודות גמישות שמפוזרות על שרתים רבים | Cassandra, HBase | כמויות כתיבה גבוהות מאוד |
| גרף | צמתים והקשרים ביניהם | Neo4j | רשתות חברתיות, המלצות |
| סדרות זמן | מדידות עם אינדקס לפי זמן | InfluxDB, TimescaleDB | מדדים, קריאות של חיישנים |
| וקטורי | רשימות של מספרים (embeddings) | pgvector, Pinecone, Milvus | חיפוש דמיון לתכונות AI |
כל מה שאינו רלציוני מקובץ לעתים קרובות תחת השם NoSQL. מסדי נתונים רלציוניים נשארים ברירת המחדל לרוב האפליקציות, כי טבלאות, אילוצים ו-SQL מכסים היטב מגוון רחב של בעיות. מוצרים רבים גם משלבים סוגים: PostgreSQL שומר מסמכי JSON, ו-pgvector מוסיף לו חיפוש וקטורי.
טרנזקציות: הכול או כלום
העברת כסף מאנה לבן דורשת שני שינויים: להוסיף לבן, להוריד מאנה. אם התוכנית קורסת ביניהם, כסף מופיע משום מקום. טרנזקציה מקבצת שינויים כך שכולם נשמרים או שאף אחד מהם לא נשמר. כאן השינוי השני שובר כלל (יתרה לא יכולה לרדת מתחת לאפס), ולכן מסד הנתונים מבטל גם את הראשון:
transfer 30 done
{'ana': 20, 'ben': 30}
transfer 40 failed: CHECK constraint failed: balance >= 0
{'ana': 20, 'ben': 30}
ה-40 של בן נוספו ואז נלקחו בחזרה, כך שהסכומים עדיין מסתדרים. מסדי נתונים רלציוניים מבטיחים לטרנזקציות ארבע תכונות, שנקראות ACID: אטומיות (הכול או כלום), עקביות (כללים כמו CHECK תמיד מתקיימים), בידוד (שני משתמשים שמריצים טרנזקציות בו זמנית לא רואים את העבודה החלקית זה של זה) ועמידות (ברגע ששינוי נשמר, הוא שורד קריסה או הפסקת חשמל).
מסד נתונים מול גיליון אלקטרוני מול קובץ
| קובץ טקסט או CSV | גיליון אלקטרוני | מסד נתונים | |
|---|---|---|---|
| גודל | מה שהתוכנית שלכם יכולה לטעון | 1,048,576 שורות בגיליון ב-Excel | מיליארדי שורות |
| הרבה כותבים בו זמנית | לא | מוגבל | כן, עם נעילות וטרנזקציות |
| מציאת רשומה אחת | קוראים את כל הקובץ | סינון או חיפוש | חיפוש באינדקס |
| כללים על הנתונים | אין | אימות אופציונלי | טיפוסים, אילוצים, מפתחות זרים |
| שאילת שאלות | כותבים קוד בעצמכם | נוסחאות | SQL או API לשאילתות |
גיליון אלקטרוני הוא כלי טוב לאדם אחד שמסתכל על כמה אלפי שורות. ברגע שכמה תוכניות או משתמשים כותבים נתונים בו זמנית, או שהנתונים צריכים לציית לכללים, מסד נתונים הוא הכלי הנכון.
איך מסדי נתונים מגינים על הנתונים
DBMS כותב כל שינוי ליומן לפני שהוא נוגע בקובצי הנתונים (write-ahead log), כך שאחרי קריסה הוא יכול להריץ שוב או לבטל עבודה שלא הסתיימה. PostgreSQL יכול לשמור checksum על כל דף של 8 KB ולדווח על כשל checksum כשדיסק כושל מחזיר נתונים פגומים. משתמשים והרשאות קובעים מי רשאי לקרוא או לשנות אילו טבלאות, ושכפול (replication) שומר עותקים על שרתים אחרים. תוכניות חייבות גם להעביר קלט של משתמשים כפרמטרים, כמו מצייני המקום ? שלמעלה, ולעולם לא להדביק אותו לתוך טקסט ה-SQL, כי כך קורות מתקפות SQL injection.
תפיסות שגויות נפוצות
- "SQL הוא מסד נתונים." SQL היא השפה. PostgreSQL, MySQL ו-SQLite הם מסדי נתונים שמבינים אותה.
- "NoSQL פירושו בלי SQL בכלל." בדרך כלל קוראים את המונח כ-"not only SQL", ולכמה מסדי נתונים NoSQL יש שפות שאילתה שנראות כמו SQL, למשל CQL של Cassandra.
- "מסד נתונים הוא תמיד שרת גדול." SQLite הוא קובץ יחיד שתוכנית פותחת ישירות, בלי שום שרת. הוא רץ בתוך כל טלפון Android ו-iOS.
- "נתונים במסד נתונים בטוחים לנצח." מסד נתונים מגן מפני קריסות, לא מפני מישהו שמריץ
DELETEבטעות. עדיין צריך גיבויים.
לאן ממשיכים מכאן
קורס SQL מלמד שאילתות מה-SELECT הראשון. התיעוד של SQLite מכסה את הצעדים הבאים: מה זה SQLite, יצירת טבלה, אינדקסים ומניעת SQL injection. כדי לראות איך הנתונים מסודרים בדיסק, קראו מה זה בייט, וchecksum מסביר איך מזהים דפים פגומים.