# מסד נתונים

סכמה של מסד הנתונים של מדיה ויקי
מנהל מסד נתונים Hsql
תוכנת PhppgAdmin לניהול מסד נתונים
מסך ניהול של מסד נתונים MySQL
**מסד נתונים** (באנגלית: **Database** – דַּאטָה־בֵּייס, או בראשי תיבות **DB**, "בסיס נתונים") הוא אמצעי המשמש לאחסון מסודר של נתונים במחשב, לשם אחזורם ועיבודם. מסד נתונים מאוחסן באמצעי אחסון נתונים, בדרך כלל על גבי דיסק קשיח, המאפשר גישה ישירה לנתונים. הגישה למסד הנתונים נעשית באמצעות תוכנה ייעודית – מערכת לניהול מסד נתונים (DBMS – Database Management System). מסד הנתונים בנוי לפי מודל לאחסון הנתונים, כמו מנגנונים פנימיים למיון ולחיפוש.

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

המודל הנפוץ ביותר היום, הוא המודל הטבלאי שמכונה גם **יחסי**. במודל זה מסד הנתונים בנוי מטבלאות, כאשר כל טבלה מכילה מידע על ישות מסוימת (לדוגמה, לקוחות במערכת בנקאית). בכל טבלה יש רשומות (שורות), כאשר כל רשומה מתייחסת למקרה ספציפי (למשל לקוח מסוים). לכל רשומה בטבלה יש **מפתח ראשי** שמזהה באופן ייחודי את הרשומה. הקשר בין הרשומות בטבלאות שונות נעשה באמצעות שדה **מפתח זר** כאשר מספר הפעמים בו יכול להיות משויך המפתח לרשומה ספציפית בטבלה האחרת מגדיר את ריבוי הקשר (יחיד לרבים – רבים לרבים וכו'). שליפת מידע ופעולות עדכון במסד נתונים טבלאי נעשות באמצעות שאילתות, לרוב בשפת SQL, המהווה ממשק שמאפשר גישה לנתונים מבלי להתייחס לאופן שמירתם במסד הנתונים.

## סוגים שונים של מסדי נתונים

### חלוקה לפי פעילות

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

### חלוקה לפי סוג

* מסדי נתונים אקטיביים (Active Databases).
* מסדי נתונים עתיים (Temporal Databases).
* מסדי נתונים שיתופיים (Cooperative/Federated Databases).
* מסדי נתונים מבוזרים (Distributed Databases).
* מסדי נתונים הסתברותיים (Probabilistic Databases).

## מרכיבי מסד הנתונים

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

אוסף כל השדות המתארים את האזרח הוא ה**רשומה** (record) של אותו אזרח. לכל רשומה יש **מפתח ראשי** (primary key), המשמש לזיהוי חד-משמעי שלה. מפתחות משניים משמשים לאיתור מהיר של רשומות ולקישור בין רשומות. ברשומת האזרח, מספר הזהות משמש כמפתח ראשי, ושם המשפחה והשם הפרטי משמשים **כמפתח משני**. מפתח המורכב משילוב של כמה שדות קרוי **מפתח מורכב**.

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

מפתח או אינדקס הוא שדה שמוגדר ככזה. כמעט כל שדה יכול להיות מוגדר כשדה מפתח (למעט שדה בינארי ושדה מזכר), אבל רק שדה אחד בכל טבלה יכול להיות מוגדר כמפתח ראשי, שאר המפתחות יהיו מוגדרים כ**מפתחות זרים** או **מפתחות משניים**. שדה מפתח הוא שדה שהתוכנה יוצרת בעבורו מפתח פנימי ממוין של כל הערכים באותו שדה. תפקידיו של המפתח הם: להאיץ את העבודה עם הרשומה, במיון, בחיפוש ובשליפה של ערכים, וכן למנוע הזנת ערכים זהים במפתח שהוגדר ללא כפילות. כאשר אין שדה שניתן לייחס לו זיהוי חד-ערכי לרשומה, נוהגים להוסיף לרשומה שדה מלאכותי שיכיל מספר חד-ערכי רנדומלי.

## מנגנונים במערכת לניהול מסד נתונים

קטלוג מערכתבקטלוג רשום המידע אודות מסד הנתונים. כמו הגדרת הרשומות והשדות, שמותיהם וסוגיהם, ברירות המחדל וחוקי האימות של השדות. המפתחות הראשיים והזרים של כל רשומה. מהם הכללים של אימות הייחוסים. הרשאות של משתמשים ופעולות שמותר להם לבצע. כל המידע הזה מאוחסן בטבלאות מערכת אינטגרליות של מסד הנתונים.
Query Optimizerרכיב במסד הנתונים האחראי לתכנון ביצוע השאילתות במסד הנתונים והמבצע מיטוב שאילתות.
Storage Managerמנגנון המנהל את האחסון הפיסי של הנתונים על גבי הדיסק.
Cache Managerמנגנון המנהל את השימוש בזיכרון מטמון. ההחלטה אילו פריטים להכניס למטמון מתבססת בדרך כלל על היקף השימוש. לדוגמה טבלה אשר נמצאת בשימוש רב תוכנס למטמון על מנת לקצר את זמן הגישה למידע שבה.
יומן האירועיםמנגנון הרושם את כל העדכונים המבוצעים בתוכן של מסד הנתונים כדי לתמוך בהתאוששות ושחזור של מסד הנתונים במקרה של תקלה בנתונים הנובעת מהפסקה של תנועה או של בעיה אחרת. במקרה של תקלה ניתן לשחזר את הנתונים אחורה למצב שהיה לפני התחלת התנועה, אפשרות נוספת היא לבצע שיחזור לפנים, באמצעות שיחזורו מאמצעי גיבוי קדימה אל המצב המתבקש.
מנגנון בקרת המקביליות (Concurrency Control)מנגנון זה אחראי לביצוע התקין של תנועות במסד הנתונים (Transactions). מנגנון בקרת המקביליות אחראי לקיום תכונות ACID במסד הנתונים. תנועה (טרנזקציה) היא אבסטרקציה של אוסף פעולות קריאה וכתיבה אטומיות לאובייקטים במסד הנתונים. היסטוריה מגדירה יחס סדר חלקי בין תנועות הרצות במקביל במסד הנתונים. כאשר שתי תנועות שונות ניגשות לאותו אובייקט ייתכן מצב של חוסר עקביות במסד הנתונים כתוצאה מכך ששתי התנועות מתנגשות. שתי תנועות נקראות מתנגשות כאשר לפחות אחת מהן מבצעת פעולת כתיבה לאותו אובייקט. מנגנון בקרת המקביליות דואג שביצוע התנועות יהיה נכון ושקיף למשתמש. אחת מהמנגנונים הנפוצים לבקרת מקביליות הוא מנגנון הנעילות (Lock Based Mechanism). האלגוריתם הנפוץ ביותר נקרא 2PL  ‏(Two Phase Locking). חיסרון בשימוש במנגנון נעילות כגון 2PL הוא האפשרות להגיע למצב של קיפאון (Deadlock). מנגנונים מבוססי נעילות נוספים שבשימוש הם: STRICT 2PL ו Conservative 2PL. כמו כן ישנם מנגנוני בקרת מקביליות המשתמשים בתגיות זמן (Timestamps) ומנגנונים מבוססי ולידציה.
מנגנון שכפול (Replica Control)מנגנון המאפשר ליצור כמה מופעים של מסד הנתונים באתרים שונים ולבצע סינכרון בין הנתונים שבהם באופן שכל שינוי במסד נתונים אחר מועבר לכל היתר. באמצעות מנגנון השכפול אפשר להעביר גם שינוי הגדרות של מסד הנתונים לכל הבסיסים האחרים.
## מסדי נתונים נפוצים

### מודל רשתי

* ADABAS

### מודל היררכי

* IMS/DB

### מודל טבלאי

* MySQL
* Microsoft SQL Server
* אורקל
* Access
* DB2
* PostgreSQL
* אינפורמיקס
* Sybase Database
* SQLite
* Firebird
* Teradata

### מודל העצמים

* PostgreSQL

### NoSQL

* MongoDB
* אפאצ'י קסנדרה
* RavenDB

## ראו גם

* אינדקס
* תוכנה - מונחים
* מסד נתונים גרפי
* CAP theorem

## לקריאה נוספת

* רז הייפרמן, **בסיסי נתונים טבלאיים ושפת SQL**, הוצאת הוד-עמי.
* מבוא למאגרי נתונים – רם קדם
* **Database System Concepts,** Avi Silberschatz Henry F. Korth S. Sudarshan**,** McGraw-Hill

## קישורים חיצוניים

* מסדי נתונים באינטרנט, באתר אית"ן
* ארגון ומפתוח של מאגרי מידע (האו"פ)
* הרצאות בקורס בסיסי נתונים (בעברית), באתר אוניברסיטת בן-גוריון
* מילון למונחי ארגון נתונים | 2002 | השלמות 2014 | באתר האקדמיה ללשון העברית
* מסד נתונים, באתר אנציקלופדיה בריטניקה (באנגלית)
* מסדי נתונים, דף שער בספרייה הלאומית
* מסד נתונים, באתר MathWorld (באנגלית)