الخلاصة والمصادر
الخلاصة
- 1. SQL، CRUD: أربع جمل (INSERT/SELECT/UPDATE/DELETE) تعمل على مجموعات صفوف لا على صف بصف؛ عاين الصفوف بـ SELECT بنفس شرط WHERE قبل أي تعديل أو حذف، واستخدم HAVING لتصفية المجموعات و WHERE لتصفية الصفوف، واحذر من NULL.
- 2. SQL، الربط والعلاقات: المفتاح الأجنبي يربط الابن بالأب، و JOIN يعيد تجميع ما فصله التصميم؛ ضع شروط المطابقة في ON لا في WHERE مع LEFT JOIN، وفعّل PRAGMA foreign_keys وتجنّب NOT IN مع NULL.
- 3. SQL، تصميم قواعد البيانات والتطبيع: كل معلومة في مكان واحد: القيمة الذرّية (1NF)، المفتاح كله (2NF)، ولا شيء غير المفتاح (3NF)؛ طبّق ON DELETE المناسب لمعنى العلاقة واكتب القواعد كقيود.
- 4. بايثون وقواعد البيانات: برنامج التشغيل (MySQLdb) يرسل SQL بعلامات
%sولا يحفظ شيئًا قبلcommit؛ والـORM (SQLAlchemy) يربط الجدول بصنف والصف بكائن، لكنه يكتب SQL عنك ولا يعفيك من قراءته، احذر N+1، وافتح جلسة قصيرة لكل وحدة عمل.
قاموس المصطلحات
| المصطلح | التعريف | الجزء |
|---|---|---|
| CRUD | الحروف الأولى لأربع عمليات أساسية على البيانات: Create (INSERT)، Read (SELECT)، Update (UPDATE)، Delete (DELETE) | 1 |
| Constraint (القيد) | قاعدة تفرضها القاعدة نفسها على كل صف: NOT NULL و UNIQUE و CHECK و DEFAULT و PRIMARY KEY؛ عند انتهاكها يُلغى الأمر ويرجع خطأ | 1 |
| NULL | تعني «لا توجد قيمة / غير معروف»، لا صفرًا ولا نصًّا فارغًا؛ أي مقارنة معها تنتج NULL، ولذلك نفحصها بـ IS NULL | 1 |
Placeholder (?) | علامة في جملة SQL تُمرَّر قيمتها منفصلة عن النص فيعاملها المحرّك كبيانات لا كشيفرة، وهي الحماية الأساسية من حقن SQL | 1 |
| Type Affinity | مرونة الأنواع في SQLite: النوع المعلن للعمود «تفضيل» لا قيد صارم، إلا في الجداول المعلنة STRICT | 1 |
| Aggregate / GROUP BY / HAVING | دالة تجميعية (COUNT/SUM/AVG/MIN/MAX) تختصر صفوفًا في قيمة؛ GROUP BY يقسّم الصفوف مجموعات، و HAVING يصفّي المجموعات بعد التجميع بينما WHERE يصفّي الصفوف قبله | 1 |
| Primary Key / Foreign Key | Primary Key يعرّف الصف بتفرّد داخل جدوله؛ Foreign Key في جدول ابن يشير إلى Primary Key في جدول أب، وهو أساس الربط وسلامة العلاقات | 2 |
| Referential Integrity | ضمان ألّا يشير مفتاح أجنبي إلى صف أب غير موجود؛ في SQLite يتطلب PRAGMA foreign_keys = ON على كل اتصال | 2 |
| JOIN (INNER / LEFT) | ربط صفوف جدولين بشرط ON: INNER يُبقي المتطابق فقط، و LEFT يُبقي كل صفوف الأيسر مع NULL حيث لا مقابل (RIGHT و FULL متاحان منذ SQLite 3.39.0) | 2 |
| Cartesian Product / CROSS JOIN | قرن كل صف بكل صف من جدول آخر بلا شرط؛ ينتج m × n صفًّا، وهو ما يحدث عند نسيان شرط الربط | 2 |
| Junction Table (الجدول الوسيط) | جدول يمثّل علاقة متعدد-إلى-متعدد بمفتاح أجنبي لكل جانب ومفتاح أساسي مركّب، مثل order_items | 2 |
| Anti-join | نمط يجد صفوف الأب التي لا مقابل لها: LEFT JOIN … WHERE child.id IS NULL أو NOT EXISTS | 2 |
| Subquery (الاستعلام الفرعي) | SELECT داخل SELECT: قيمة مفردة، أو قائمة لـ IN، أو EXISTS؛ والمترابط (Correlated) يشير إلى الاستعلام الخارجي ويُعاد حسابه لكل صف | 2 |
| ON DELETE (CASCADE / SET NULL / RESTRICT) | السلوك المحدَّد لما يصيب الصفوف التابعة عند حذف الأب: حذفها، أو تصفير مفتاحها، أو منع الحذف | 2 |
| Functional Dependency | «A يحدّد B» (A → B): كل قيمة لـ A تقابلها قيمة واحدة فقط لـ B؛ الأساس الذي يُبنى عليه كشف التكرار والتطبيع | 3 |
| Normalization (1NF/2NF/3NF) | تفكيك جدول مُسطّح إلى جداول مترابطة لإزالة التكرار: 1NF قيم ذرّية، 2NF لا اعتماد على جزء من المفتاح، 3NF لا اعتماد على عمود غير مفتاحي | 3 |
| Anomaly (الشذوذ) | مشكلة التكرار الثلاث: تناقض عند التعديل، عجز عن إدراج حقيقة مستقلة، وفقدان معلومات أخرى عند حذف صف | 3 |
| Candidate / Surrogate Key | المرشّح: أي مفتاح صالح (يُحمى بـ UNIQUE إن لم يُختر أساسيًا)؛ الاصطناعي: رقم يولّده النظام بلا معنى خارجي وثابت لا يتغيّر | 3 |
| Cardinality (العدد) | عدد الصفوف المسموح بها على طرفَي العلاقة: واحد-لواحد، واحد-لمتعدد، متعدد-لمتعدد | 3 |
| Denormalization | تكرار معلومة عمدًا لتسريع القراءة، وثمنه إبقاء النسخ متطابقة يدويًا؛ يُبدأ دائمًا من تصميم مطبّع | 3 |
| Lossless Decomposition | تفكيك يمكن إعادة تجميعه بالربط ليعطي الجدول الأصلي بالضبط، فلا يضيع شيء ولا يظهر صف وهمي | 3 |
| ER Diagram | مخطط يصوّر الكيانات وخصائصها وعلاقاتها وأعدادها قبل كتابة الجداول | 3 |
| Driver (برنامج التشغيل) | مكتبة تتحدث مع خادم القاعدة وتنفّذ جمل SQL (مثل MySQLdb)، وتتبع عقد PEP 249 | 4 |
| Cursor | كائن من الاتصال يُنفَّذ به الاستعلام وتُقرأ منه الصفوف | 4 |
| Placeholder (علامة معامل) | رمز (%s في MySQLdb) يُوضع مكان القيمة ثم تُمرَّر القيم منفصلة ليهرّبها برنامج التشغيل | 4 |
| SQL Injection | إدخال نص يغيّر معنى الاستعلام لأنه لُصق فيه؛ يُمنع بتمرير القيم كمعاملات | 4 |
| Transaction (معاملة) | مجموعة تعديلات تُثبَّت معًا بـ commit أو تُلغى معًا بـ rollback | 4 |
| ORM | طبقة تربط الجدول بصنف والصف بكائن وتولّد SQL نيابة عنك | 4 |
| Engine | كائن يُنشأ مرة واحدة من عنوان القاعدة ويدير حوض اتصالات | 4 |
| Session (الجلسة) | مساحة عمل تتتبّع الكائنات وتكتبها للقاعدة داخل معاملة | 4 |
| flush | إرسال SQL المعلّق داخل المعاملة دون تثبيتها | 4 |
| N+1 problem | استعلام للقائمة واستعلام إضافي لكل عنصر بسبب التحميل الكسول | 4 |
| مستند | كائن يشبه JSON يحمل الشيء كاملًا. | 5 |
| التضمين | وضع بيانات مرتبطة داخل المستند نفسه. | 5 |
| cache-aside | اقرأ من الذاكرة المؤقتة، وعند الفقد من القاعدة ثم خزّن. | 5 |
مصادر هذا الدرس
مرتّبة بالنوع. ابدأ بالتوثيق الرسمي إذا تبي المرجع الدقيق، وبالمقال أو الفيديو إذا تبي الشرح أولًا.
توثيق رسمي2
خلّصت الدرس؟
سجّل الدخول ليُحفظ تقدّمك.