What are databases for?
أي برنامج في الدنيا بياخد Input وبيعمل Processing ويطلع Output، بس كل ده بيحصل في الذاكرة. بس لما البرنامج يقفل، الداتا بتروح.
علشان كده في برامج مش محتاجة تخزن الداتا (زي الآلة الحاسبة)، وفي برامج لازم نخزن فيها الداتا (زي تسجيل الكورسات). لو الداتا متخزنة جوه التطبيق (in memory) هتضيع لو السيرفر وقف أو لو التطبيق Stateless (زي الـHTTP request).
عشان كده لازم يكون عندنا مكان دائم لتخزين الداتا، وده دور قواعد البيانات (Databases).
Before Begin
Data vs Information
- الـData: دي شوية بيانات بنجمعها.
- الـInformation: بتكون النتيجة لما نعمل Processing على الـ Data.
مثال: تاريخ الميلاد يعتبر Data، ولو عملت Processing عليه هيطلع لك العمر وده Information.
File as Storage (File Based System)
زمان الناس كانت بتخزن الداتا في Files نصية، وده كان سهل وبسيط.
- كانوا بيفصلوا البيانات في Files باستخدام:
- الـDelimited Files: يتم فصل كل قيمة بفاصلة (comma) أو نقطة.
- الـFixed Width Files: بيثبتوا عدد البايتس لكل قيمة.
ميزة انك تخزن في Files ان الموضوع دا رخيص جدًا.
عيوبها
- صعوبة الوصول للداتا: القراءة والكتابة والتحديث بيأخد وقت.
- البحث بيطول: لازم تقرا الفايل من الأول لآخر.
- الـData Redundancy: ممكن يحصل تكرار للبيانات لو فيه نسخ مختلفة.
- عدم وجود علاقات: الملفات متقفلة على نفسها ومفيش Integrity بينهم.
- الـData Administration: صعب تتحكم في مين يعدل ومين يستخدم الداتا.
- الـEfficient Data Access: الوصول للداتا مش فعال.
- الـConcurrent Access: مشكلة لو أكتر من شخص حاولوا يعدلوا في نفس الوقت.
- الـCrash Recovery: لو حصل كراش، الداتا بتروح.
- الـData Security: لو مسحوا الفايل، الداتا راحت.
- الـReduced Application Development Time: مش بتوفر الوقت لإنك مش بتفكر في استرجاع الداتا بعد العطل.
Database vs Spreadsheet
- الـSpreadsheets (زي Excel):
بتخزن البيانات في جداول بسيطة ومترابطة، لكنها مصممة لمستخدم واحد ومحدودة في الحجم. - الـDatabases:
بتدعم تخزين كميات كبيرة من البيانات وبتسمح بوصول متعدد مع أمان أعلى.
Database
- الـDatabase هو تجميع (Collection) للبيانات متربطة ببعض.
- بيتم نمذجة (model) جزء من العالم الحقيقي (زي الطلاب، الكورسات).
- القاعدة دي ممكن تكون بأحجام وتعقيدات مختلفة.
- النظام المسؤول عن إدارة الداتا دي اسمه Database Management System (DBMS)، واللي بيشتغل كـ Layer بين الـ Database والبرنامج.
- بنقدر نعمل عليها برضو CRUD Operations
Types of Databases
كل مؤسسة محتاجة نوع قاعدة بيانات حسب استخدام الداتا. مثلاً:
Relational Databases
- متقسمة كجداول (tables) من أعمدة وصفوف. تعتبر الأكفأ في الإدارة.
Object-Oriented Databases
- بتمثل الداتا على هيئة Objects.
Distributed Databases
- موزعة على أكتر من موقع (زي Distributed Systems).
Data Warehouses
- مخزن مركزي للداتا للتقارير والتحليل السريع.
NoSQL Databases
- بتخزن الداتا غير المنظمة، وغالبًا بتكون مستخدمة في تطبيقات الويب المعقدة.
Key-Value Databases
- مثال: Redis, Memcached
Graph Databases
- بتخزن الداتا كـ Entities وعلاقات بينهم.
OLTP Databases
- مصممة لمعالجة المعاملات السريعة والتحليل.
Open Source Databases
- النظام مفتوح المصدر؛ ممكن يكون SQL أو NoSQL.
Cloud Databases
- موجودة على السحاب، سواء تقليدية أو Database as a Service (DBaaS).
Multimodal Databases
- بتجمع بين أكتر من نموذج لتخزين الداتا.
Document/JSON Databases
- بتخزن الداتا بشكل JSON مش على هيئة جداول.
Self-Driving Databases
- بتعتمد على الذكاء الاصطناعي للتحديثات والصيانة والأمان تلقائياً.
Database is ACID
- Atomicity: المعاملات بتكون ذرية؛ لو معاملة فشلت، بيكون كأنها ما حصلتش.
- Consistency: لازم الداتا تلتزم بالقواعد اللي انت محددها.
- Isolation: التعامل مع عمليات متعددة بنفس الوقت بيكون وكأنهم اتنفذوا واحدة ورا التانية.
- Durability: الداتا بتفضل محفوظة حتى لو حصل عطل في السيرفر.
Database Management System (DBMS)
الـ DBMS هو البرنامج اللي بيساعدك تدير قاعدة البيانات؛ بيتيح لك إنشاء، صيانة والوصول للداتا بسهولة وكفاءة. هو الـ Layer اللي بين الـ Database والـ Application Program.