Skip to main content
Global

4.4: تصميم قاعدة بيانات

  • Page ID
    168379
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    تصميم قاعدة بيانات

    لنفترض أن الجامعة تريد إنشاء قاعدة بيانات لتتبع المشاركة في نوادي الطلاب. بعد إجراء مقابلات مع العديد من الأشخاص، يتعلم فريق التصميم أن تنفيذ النظام هو إعطاء رؤية أفضل لكيفية تمويل الجامعة للأندية. سيتم تحقيق ذلك من خلال تتبع عدد الأعضاء في كل نادي ومدى نشاط الأندية. يقرر الفريق أن النظام يجب أن يتتبع الأندية وأعضائها وفعالياتها. باستخدام هذه المعلومات، يحدد فريق التصميم أنه يجب إنشاء الجداول التالية:

    • الأندية: سيتتبع هذا اسم النادي ورئيس النادي ووصفًا موجزًا للنادي.
    • الطلاب: اسم الطالب والبريد الإلكتروني وسنة الميلاد.
    • العضويات: سيربط هذا الجدول الطلاب بالأندية، مما يسمح لنا بانضمام أي طالب إلى أندية متعددة.
    • الأحداث: سيتتبع هذا الجدول وقت اجتماع الأندية وعدد الطلاب الذين حضروا.

    الآن بعد أن حدد فريق التصميم الجداول التي سيتم إنشاؤها، يحتاجون إلى تحديد المعلومات المحددة التي سيحتفظ بها كل جدول. يتطلب هذا تحديد الحقول التي ستكون في كل جدول. على سبيل المثال، سيكون اسم النادي أحد الحقول في جدول الأندية. سيكون الاسم الأول والاسم الأخير حقلين في جدول الطلاب. أخيرًا، نظرًا لأن هذه ستكون قاعدة بيانات علائقية، يجب أن يحتوي كل جدول على حقل مشترك مع جدول آخر واحد على الأقل (بمعنى آخر: يجب أن يكون لديهم علاقة مع بعضهم البعض).

    لإنشاء هذه العلاقة بشكل صحيح، يجب تحديد مفتاح أساسي لكل جدول. هذا المفتاح هو معرف فريد لكل سجل في الجدول. على سبيل المثال، في جدول الطلاب، قد يكون من الممكن استخدام الأسماء الأولى للطلاب لتعريفهم بشكل فريد. ومع ذلك، فمن المرجح أن يشارك بعض الطلاب الاسم الأخير (مثل مايك أو ستيفاني أو كريس)، لذلك يجب تحديد حقل مختلف. قد يكون عنوان البريد الإلكتروني للطالب اختيارًا جيدًا للمفتاح الأساسي نظرًا لأن عناوين البريد الإلكتروني فريدة. ومع ذلك، لا يمكن تغيير المفتاح الأساسي، لذلك قد يعني ذلك أنه إذا قام الطلاب بتغيير عناوين بريدهم الإلكتروني، فسيتعين علينا إزالتها من قاعدة البيانات ثم إعادة إدراجها - وهذا ليس اقتراحًا جذابًا. الحل الذي نقدمه هو إنشاء قيمة لكل طالب - معرف المستخدم - والتي ستكون بمثابة مفتاح أساسي. سنفعل ذلك أيضًا لكل نادي من نوادي الطلاب. هذا الحل شائع جدًا وهو سبب امتلاكك للعديد من معرفات المستخدمين!

    يمكنك رؤية تصميم قاعدة البيانات النهائي في الشكل أدناه:

    Behaviorism_1.gif
    الشكل\(\PageIndex{1}\): تدفق تصميم البيانات. الصورة بقلم ديفيد بورجوا، دكتوراه مرخصة بموجب CC BY 4.0

    مع هذا التصميم، ليس لدينا فقط طريقة لتنظيم جميع المعلومات التي نحتاجها لتلبية المتطلبات، ولكننا نجحنا أيضًا في ربط جميع الجداول معًا بنجاح. إليك ما قد تبدو عليه جداول قاعدة البيانات مع بعض نماذج البيانات. لاحظ أن الغرض الوحيد من جدول العضويات هو السماح لنا بربط العديد من الطلاب بنوادي متعددة.

    Behaviorism_1.gif
    الشكل\(\PageIndex{2}\): الجدول: النوادي. الصورة بقلم ديفيد بورجوا، دكتوراه مرخصة بموجب CC BY 4.0
    Behaviorism_1.gif
    الشكل\(\PageIndex{3}\): الجدول: الطلاب. الصورة بقلم ديفيد بورجوا، دكتوراه مرخصة بموجب CC BY 4.0
    Behaviorism_1.gif
    الشكل\(\PageIndex{4}\): الجدول: العضويات. الصورة: بقلم ديفيد بورجوا، تم ترخيص الدكتوراه بموجب CC BY 4.0

    التطبيع

    عند تصميم قاعدة بيانات، فإن أحد المفاهيم المهمة التي يجب فهمها هو التطبيع. بعبارات بسيطة، يعني تطبيع قاعدة البيانات تصميمها بطريقة:

    • يقلل من تكرار البيانات بين الجداول، مما يسهل عملية التخطيط
    • يقوم بإخراج البيانات غير المتسقة.
    • يتم تخزين المعلومات في مكان واحد فقط.
    • يمنح الجدول أكبر قدر ممكن من المرونة.

    في تصميم قاعدة بيانات الأندية الطلابية، عمل فريق التصميم على تحقيق هذه الأهداف. على سبيل المثال، لتتبع العضويات، ربما كان الحل البسيط هو إنشاء حقل الأعضاء في جدول الأندية ثم إدراج جميع أسماء الأعضاء. ومع ذلك، فإن هذا التصميم يعني أنه إذا انضم الطالب إلى ناديين، فسيتعين إدخال معلوماته مرة ثانية. بدلاً من ذلك، حل المصممون هذه المشكلة باستخدام جدولين: الطلاب والعضويات.

    في هذا التصميم، عندما ينضم الطالب إلى النادي الأول، يجب علينا إضافة الطالب إلى جدول الطلاب، حيث يتم إدخال الاسم الأول واسم العائلة وعنوان البريد الإلكتروني وسنة الميلاد. ستؤدي هذه الإضافة إلى جدول الطلاب إلى إنشاء معرف الطالب. سنضيف الآن إدخالًا جديدًا للإشارة إلى أن الطالب عضو معين في النادي. يتم تحقيق ذلك عن طريق إضافة سجل بمعرف الطالب ومعرف النادي في جدول العضويات. إذا انضم هذا الطالب إلى نادٍ ثانٍ، فلن نضطر إلى تكرار اسم الطالب وبريده الإلكتروني وسنة ميلاده؛ بدلاً من ذلك، نحتاج فقط إلى إدخال إدخال آخر في جدول العضويات الخاص بمعرف النادي الثاني ومعرف الطالب.

    كما أن تصميم قاعدة بيانات نوادي الطلاب يجعل من السهل تغيير التصميم دون تعديلات كبيرة على الهيكل الحالي. على سبيل المثال، إذا طُلب من فريق التصميم إضافة وظائف إلى النظام لتتبع مستشاري هيئة التدريس للأندية، فيمكننا تحقيق ذلك بسهولة عن طريق إضافة جدول مستشاري الكلية (على غرار جدول الطلاب) ثم إضافة حقل جديد إلى جدول الأندية للاحتفاظ برقم مستشار الكلية.

    أنواع البيانات

    عند تحديد الحقول في جدول قاعدة البيانات، يجب أن نعطي كل حقل نوع بيانات. على سبيل المثال، حقل سنة الميلاد هو عام، لذلك سيكون رقمًا، بينما سيكون الاسم الأول نصًا. تسمح معظم قواعد البيانات الحديثة بتخزين العديد من أنواع البيانات المختلفة. يتم سرد بعض أنواع البيانات الأكثر شيوعًا هنا:

    • النص: لتخزين البيانات غير الرقمية الموجزة، والتي تقل عمومًا عن 256 حرفًا. يمكن لمصمم قاعدة البيانات تحديد الحد الأقصى لطول النص.
    • الرقم: لتخزين الأرقام. عادة ما يتم تحديد عدد قليل من أنواع الأرقام المختلفة، اعتمادًا على حجم أكبر عدد.
    • نعم/لا: نموذج خاص لنوع بيانات الأرقام يبلغ طوله (عادةً) بايت واحدًا، مع 0 لـ «لا» أو «خطأ» و 1 لـ «نعم» أو «صحيح».
    • التاريخ/الوقت: يمكن تفسير نموذج خاص لنوع بيانات الرقم كرقم أو وقت.
    • العملة: نموذج خاص لنوع بيانات الأرقام يقوم بتنسيق جميع القيم باستخدام مؤشر العملة ومنزلتين عشريتين.
    • نص الفقرة: يسمح نوع البيانات هذا بنص أطول من 256 حرفًا.
    • الكائن: يسمح نوع البيانات هذا بتخزين البيانات التي لا يمكن إدخالها عبر لوحات المفاتيح، مثل صورة أو ملف موسيقى.

    تكمن أهمية تحديد نوع البيانات بشكل صحيح في تحسين تكامل البيانات وموقع التخزين المناسب. يجب أن نحدد نوع بيانات الحقل بشكل صحيح، ويخبر نوع البيانات قاعدة البيانات بالوظائف التي يمكن تنفيذها باستخدام البيانات. على سبيل المثال، إذا أردنا إجراء وظائف رياضية مع أحد الحقول، يجب أن نخبر قاعدة البيانات أن الحقل هو نوع بيانات رقمية. لذلك إذا كان لدينا حقل لتخزين سنة الميلاد، يمكننا طرح الرقم المخزن في هذا الحقل من العام الحالي للحصول على العمر.

    يجب أيضًا تحديد تخصيص مساحة تخزين للبيانات المحددة. على سبيل المثال، إذا تم تعريف حقل الاسم الأول كنوع بيانات نصي (50)، فسيتم تخصيص خمسين حرفًا لكل اسم أول نريد تخزينه. ومع ذلك، حتى إذا كان الاسم الأول يتكون من خمسة أحرف فقط، فسيتم تخصيص خمسين حرفًا (بايت). على الرغم من أن هذا قد لا يبدو مشكلة كبيرة، إذا كان جدولنا يحتوي على 50,000 اسم، فإننا نخصص 50* 50,000 = 2,500,000 بايت لتخزين هذه القيم. قد يكون من الحكمة تقليل حجم الحقل، حتى لا نضيع مساحة التخزين.