מסד נתונים יחסי

[[איור המדגים את הקשר בין שלוש טבלאות במסד נתונים יחסי: לטבלת ההזמנות (Orders) יש קישור לטבלת מוצרים (Parts), ולטבלת המוצרים יש קישור לטבלת הספקים (Supplier)]]
מסד נתונים יחסי, מסד נתונים רלציוני (באנגלית Relational DataBase או RDB, ומערכת הניהול שלו: RDBMS), או מסד נתונים טבלאי, הוא מודל נפוץ של מסד נתונים (בסיס נתונים) שדחק הצידה את המודלים שקדמו לו: מסד נתונים רשתי ומסד נתונים היררכי והיווה סטנדרט למסדי נתונים במשך עשרות שנים עם שליטה מוחלטת בשוק מסדי הנתונים, עד להתפתחות תחום ה-NoSQL (משנת 2009).

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

מסד הנתונים הטבלאי הוצג לראשונה בשנת 1970 במאמרו החלוצי של אדגר קוד מחברת IBM בשם A Relational Model of Data for Large Shared Data Banks.

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

אוסף כל השדות המתארים את האזרח הוא הרשומה (record) של אותו אזרח, ואוסף הרשומות של כל האזרחים הוא טבלה (table).

דוגמה לטבלת אזרח:

{| border=2
|-bgcolor=#ccccff
| מספר תעודת זהות || שם משפחה || שם פרטי || תאריך לידה || שם האב
|-
| 05674856 || כהן || לאה || 20.08.77 || ישראל
|-
| 06777777 || אמזלג || רות || 12.10.99 || שלמה
|-
| 02775877 || יעקובוביץ || דנה || 06.12.57 || יהושע
|}

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

==מפתחות==
לכל רשומה יש מפתח ראשי (primary key), המשמש לזיהוי חד-משמעי שלה. לכל רשומה יכול להיות רק מפתח ראשי אחד, שערכיו חייבים להיות ייחודיים ואסור שיהיו ריקים.

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

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

==יחסים בין הטבלאות==
מסד נתונים מכיל בדרך כלל טבלאות רבות, המקושרות באמצעות מפתחות. לתרשים שמבטא את כל הקשרים בין הטבלאות השונות קוראים דיאגרמה, מבנה חשוב בהגדרת מסד הנתונים הוא "תרשים קשרי ישויות" (ERD – Entity Relationship Diagrams) שבו מתארים את כל הטבלאות והיחסים שהם מקיימים. תרשים זה נעשה בדרך כלל בשלב הניתוח והתכנון של המסד ומהווה בסיס למימוש.

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

טבלת ילדים שמתייחסת לטבלת אזרח

{| border=2
|- bgcolor=#ccccff
| מספר תעודת זהות של האם || שם משפחה || שם פרטי || תאריך לידה
|-
| 05674856 || כהן || דוד || 20 באוגוסט 2000
|-
| 05674856 || כהן || עדי || 12 באוקטובר 2003
|-
| 05674856 || כהן || קרן || 12 באוקטובר 2005
|}

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

==יישומים מסחריים של המודל הטבלאי==
* DB2
* dBase IV
* InterBase
* Microsoft Access – גרסת אנסי 89,92
* Microsoft SQL Server – גרסת אנסי 92
* MySQL
* Oracle
* PostgreSQL
* Sybase
* Informix
* SQLite
* Firebird

==ראו גם==
* נירמול מסד נתונים
* מסדי נתונים - מונחים
* תוכנה - מונחים

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

==קישורים חיצוניים==
* E. F. Codd, [https://web.archive.org/web/20070612235326/http://www.acm.org/classics/nov95/toc.html A Relational Model of Data for Large Shared Data Banks]
* 

*
קטגוריה:מבני נתונים
קטגוריה:מסדי נתונים