اذهب إلى المحتوى

لوحة المتصدرين

  1. Ail Ahmed

    Ail Ahmed

    الأعضاء


    • نقاط

      8

    • المساهمات

      1211


  2. Mustafa Suleiman

    Mustafa Suleiman

    الأعضاء


    • نقاط

      4

    • المساهمات

      13266


  3. محمود عوف2

    محمود عوف2

    الأعضاء


    • نقاط

      2

    • المساهمات

      134


  4. Mansour Hussen

    Mansour Hussen

    الأعضاء


    • نقاط

      2

    • المساهمات

      232


المحتوى الأكثر حصولًا على سمعة جيدة

المحتوى الأعلى تقييمًا في 09/16/24 في كل الموقع

  1. السلام عليكم ده الكود import pandas as pd import sqlite3 from sklearn.model_selection import train_test_split import tensorflow as tf import keras connect = sqlite3.connect("Data-Heart-Disease/heart.db") heart = pd.read_sql("SELECT * FROM heart" , connect) x = heart.drop(['target'] , axis=1) y = heart['target'] x_traing , x_test , y_traing , y_test = train_test_split(x , y ,test_size=0.25,random_state=44,shuffle=True) kearsmodle = keras.models.Sequential([ keras.layers.Dense(8, activation='tanh'), keras.layers.Dense(128,activation='tanh'), keras.layers.Dense(64,activation='tanh'), keras.layers.Dense(1,activation='sigmoid'), ]) myoptimizer = tf.keras.optimizers.experimental.AdanW( learning_rate=0.001, weight_decay=0.004, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False, clipnorm=None, clipvalue=None, global_clipnorm=None, use_ema=False, ema_momentum=0.99, ema_overwirte_frequency=None, jil_complite=True, name="AdamW", ) kearsmodle.compile(optimizer=myoptimizer,loss='binary_crossentropy',metrics=['accuracy']) #Trinag trinag_modle = kearsmodle.fit(x_traing,y_traing, validation_data=(x_test,y_test), epochs=100, batch_size=1000, verbose=1, callbacks=tf.kears.callbacks.EarlyStopping( patience=10, monitor='val_accuracy', restore_best_weights=True, )) print(trinag_modle) انا لم بشغل الكود ده بيظهر الاخطاء ده from tensorflow.python.util._pywrap_checkpoint_reader import CheckpointReader SystemError: initialization of _pywrap_checkpoint_reader raised unreported exception انا مش فهم اي الخطاء ده
    4 نقاط
  2. مرحباً ان جربت مكتبه @react-pdf/renderer لكن لا تدعم عربي import { Document, Page, renderToStream, StyleSheet, Text } from '@react-pdf/renderer'; import { NextResponse } from "next/server"; // Register font // Font.register({ // family: "Cairo", // src: "http://fonts.gstatic.com/s/cairo/v1/uOhP6W00Hd6dR_axcPy22Q.ttf", // }); // Define styles const styles = StyleSheet.create({ rtlText: { fontFamily: "Cairo", backgroundColor: "red", direction: "rtl", textAlign: "center", }, }); // Define the PDF document const Invoice = () => ( <Document> <Page> <Text style={styles.rtlText}>مرحبًا بك في @r</Text> </Page> </Document> ); // API route handler export async function GET(request) { try { const pdfStream = await renderToStream(<Invoice />); return new NextResponse(pdfStream, { headers: { "Content-Type": "application/pdf", "Content-Disposition": `inline; filename="invoice.pdf"`, }, }); } catch (e) { return new NextResponse("Failed to generate PDF", { status: 500 }); } }
    2 نقاط
  3. 2 نقاط
  4. السلام عليكم. هل يمكنني إنشاء إمتداد جوجل google chrome extension بلغة الجافاسكريبت react | node | next وكيف ذلك. شكرا.
    1 نقطة
  5. السلام عليكم ورحمة الله وبركاته اولا انا الان احاول تعلم حل المشاكل واحاول زيادة مستوي تقدمي في جافاسكريبت فقمت بحل تحديات برمجية من علي منصة كودرهب واستطعت حل حوالي 90 تحدي ولكن بعض التحديات اجد انه لا اعرف حلها ابدا فاريد مساعدة علي تحدي معين وهو تحويل الارقام الي نصوص مثلا من الرقم 1 الي الرقم 999 كل رقم يتحول الي نصه باللغة الانجليزية 20 = twenty 100 = one hundred 220 = two hundred twenty قد فكرت في طريقة حلها ولكن التي قد اعتقدت انها تعمل وهي ان استعمل لكل رقم نص معين واستخدم ال for loop وال if statement علي كل رقم ولكن هذا لاغير معقول لانه سياخذ وقت طويل جدا
    1 نقطة
  6. عليك إعادة تعيين كلمة مرور المستخدم يدويًا في phpMyAdmin، في جدول المستخدمين حدد المستخدم الذي تريد إعادة تعيين كلمة المرور الخاصة به. انسخ كلمة مرور مشفرة جديدة تم إنشاؤها باستخدام Bcrypt (بواسطة أداة عبر الإنترنت أو دالة PHP مثل password_hash()). والصق كلمة المرور المشفرة الجديدة في عمود كلمة المرور للمستخدم المحدد ثم احفظ التغييرات.
    1 نقطة
  7. I am spending big chunks of my days learning low-level stuff, but I am wondering now if it's wrong because if i do the low level learning first I will eventually just forget it, so should I focus on building stuff first and getting comfortable with it and then trying to obtain the low level knowledge I am passionate about? because I seriously have no income source currently. Thank you for reading this.
    1 نقطة
  8. تحدي تحويل الأرقام إلى نصوص Number to Words من التحديات الكلاسيكية التي تساعد على فهم الخوارزميات والتفكير البرمجي، وفي البداية يقع الغالبية في خطأ وهو التفكير في المشكلة ككل بدلاً من تقسيمها إلى أجزاء أبسط والعمل على حلها، كالتالي: الأرقام من 1 إلى 9 هنا الحالة مباشرة، حيث تستطيع استخدام if/else أو switch لتعيين نص لكل رقم. الأرقام من 10 إلى 19 تلك الأرقام لها أسماء خاصة (ten, eleven, twelve... nineteen). الأرقام من 20 إلى 99 هنا نبدأ باستخدام مضاعفات العشرة (twenty, thirty, ... ninety) ونضيف إليها الأرقام من 1 إلى 9 إذا لزم الأمر. الأرقام من 100 إلى 999: نستخدم اسم المئة (one hundred, two hundred, ...) ونضيف إليه تحويل الجزء المتبقي من الرقم (من 1 إلى 99). لتنظيم الكود وجعله قابل لإعادة الاستخدام، من الأفضل إنشاء دالة لكل حالة من الحالات السابقة. في البداية دعك من جودة الكود، الهم هو تنفيذ المطلوب، ومع الوقت ستتحسن جودة الكود لديك.
    1 نقطة
  9. يمكن ذلك بالطبع ستجد ٌقالب للمشروع كمثال هنا لبدء التطوير مباشرًة من خلال Next.js. next-chrome-starter والفكرة تتمحور حول ملف ملف البيان manifest.json الخاص بإضافات جوجل كروم، حيث يحدد بيانات تعريف الإضافة، مثل الاسم، الإصدار، الوصف، و أيضًا الأذونات التي تحتاجها الإضافة للعمل، مثل الوصول إلى علامات التبويب أو تخزين البيانات. { "manifest_version": 3, "name": "MyChromeExtension", "version": "1.0", "description": "A Chrome extension built with Next.js", "background": { "service_worker": "background.js" }, "action": { "default_popup": "index.html" } } وملفات JavaScript التي سيتم تشغيلها في الخلفية أو في صفحات الويب، وللعلم يجب إنشاء ذلك الملف في مجلد public في مشروع Next.js. والملفات التالية أيضًا: Background Scripts ملفات JavaScript تعمل في الخلفية بشكل مستمر لمعالجة المهام طويلة الأمد وإدارة حالة الإضافة وتتواصل مع أجزاء أخرى من الإضافة باستخدام واجهات برمجة تطبيقات كروم (Chrome APIs). Content Scripts ملفات JavaScript يتم حقنها في صفحات الويب التي يزورها المستخدم للتفاعل مع صفحات الويب، مثل تعديل محتوى الصفحة (DOM) أو تنفيذ إجراءات أخرى. Popup and Options Pages توفر واجهة المستخدم للتفاعل مع الإضافة، وهنا نستخدم Next.js لتبسيط تطوير الواجهات من خلال ميزات مثل العرض من جانب الخادم (SSR) وواجهات برمجة التطبيقات (API routes).
    1 نقطة
  10. عذرا ولكن الا يعني هذا اني ايضا ساسترجع كل رقم علي حدة من الكائن لاني اريد وضعها بنصية فهذا يعني اني ايضا ساستخدم العديد من السطور لارجاع قيمة الرقم وكيف افعل هذا بدون ال if statement
    1 نقطة
  11. ال tensorflow ما كنش اصل متثبيت في البيئة الفتراضية وكمن الkeras و numpy كانو محتاجين فعلان انهم يتحديثو الف شكرااا لحضرتكم جدا بس الكود ده فيه مشكله وبيظهر الخظاء ده myoptimizer = tf.keras.optimizers.experimental.AdamW( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ AttributeError: module 'keras.api.optimizers' has no attribute 'experimental'
    1 نقطة
  12. الخطأ الذي يظهر لديك مرتبط بمكتبة TensorFlow، وقد يكون ناتجًا عن مشاكل في التثبيت أو عدم التوافق بين إصدارات TensorFlow و Keras أو التبعيات المرتبطة. لحل هذا المشكلة، تأكد من أنك تستخدم أحدث إصدارات TensorFlow و Keras. يمكنك تحديث المكتبات باستخدام الأوامر التالية: pip install --upgrade tensorflow keras إذا استمر الخطأ بعد التحديث، قد تحتاج إلى إعادة تثبيت TensorFlow بشكل كامل: pip uninstall tensorflow pip install tensorflow و تأكد أن البيئة التي تعمل فيها لا تحتوي على تعارضات بين المكتبات. يمكنك إنشاء بيئة افتراضية جديدة وتجربة تشغيل الكود فيها: python -m venv myenv myenv\Scripts\activate pip install tensorflow keras pandas scikit-learn كل امر على حدى
    1 نقطة
  13. هذه المشكلة غالبا بسبب مشكلة في الإصدارات التى لديك . وغالبا هى بسبب مكتبة numpy لذلك يرجى تنفيذ الأوامر التالية : pip install numpy --upgrade pip install tensorflow --upgrade pip install keras --upgrade يمكنك تنفيذ كل أمر على حدى وتجربة البرنامج وانظر أى مكتبة تحديثها أدى إلى حل المشكلة
    1 نقطة
  14. تحقق من أن لديك أحدث إصدار من TensorFlow ويكون متوافق مع إصدار بايثون لديك، يمكنك تحديثه باستخدام الأمر التالي: pip install --upgrade tensorflow إن استمرت المشكلة قم بإلغاء التثبيت ثم أعد تثبيته من خلال: pip uninstall tensorflow pip install tensorflow إذا كنت تستخدم GPU، تأكد من تثبيت CUDA و cuDNN بشكل صحيح ومتوافق مع إصدار TensorFlow كما أنصحك بإنشاء بيئة بايثون افتراضية جديدة وثبّت فيها جميع المكتبات المطلوبة هذا يمكن أن يساعد في تجنب تعارضات الإصدارات.
    1 نقطة
  15. حاول تحديث الحزم التالية لديك لأحدث إصدار: pip install numpy tensorflow keras --upgrade ومن الأفضل لو قمت بإنشاء بيئة إفتراضية خاصة بذلك المشروع وتثبيت الحزم الخاصة به لكي لا يحدث تعارض بين إصدارات المشاريع المختلفة.
    1 نقطة
  16. ياخي عاطف نسيت كلمة المرور لا استطيع دخول للنظام لكن ادخل لي phpmyadmin وجدت كلمة مرور مشفره عملت user جديد في جدول user وشفرت كلمة مرور عن طريق Bcrypt لكن لايمكنني دخول
    1 نقطة
  17. استرجاع ما قمت بتعلمه ليس كتعلم البرمجة من البداية حيث أنه هناك بعض الخطوات التي يفضل القيام بها لإسترجاع أكبر قدر ممكن مما تعلمته وهي كما بالتعليق التالي أما بالنسبة لافضل طريقة لتعلم البرمجة فلا يوجد إجابة مباشرة لمثل هذا السؤال حيث لكل شخص الطريقة الأفضل للتعلم وما يناسبك لا يناسب غيرك ولكن هناك عدة نصائح يمكن اتباعها لتحقيق أقصى استفادة من دروسك كما بالإجابات التالية
    1 نقطة
  18. يعتبر __name__ كمتغير خاص يستخدم لتحديد ما إذا كان الملف الذي يحتوي على الكود يتم تنفيذه كبرنامج رئيسي أم أنه تم استيراده كملف وحدة في برنامج آخر، حيث عندما تقوم بتشغيل ملف بايثون مباشرة، يتم تعيين قيمة __name__ إلى "__main__"، و هذا يعني أن الملف يتم تنفيذه كبرنامج رئيسي، أما إذا تم استيراد الملف كملف وحدة في برنامج آخر، فإن __name__ تأخذ قيمة اسم الملف.يمكنك استخدام هذا المبدأ لتحديد الكود الذي يجب تنفيذه فقط عندما يكون الملف هو البرنامج الرئيسي، وليس عند استيراده كوحدة، وهذا مفيد لتنظيم الكود وجعل الوحدات البرمجية أكثر مرونة. # mymodule.py def hello(): print("Hello, world!") if __name__ == "__main__": hello() عند تشغيل mymodule.py مباشرة، سيتم طباعة "Hello, world!" لأن __name__` سيكون "__main__". لكن إذا قمت باستيراد mymodule.py` في ملف آخر، فإن hello() لن يتم استدعاؤها تلقائيا لأن __name__ لن تكون "__main__" بل ستكون "mymodule".
    1 نقطة
  19. يمكنك استخدام عدة طرق، و إحدى الطرق الشائعة هي استخدام ميثود __new__ لضمان أنه يتم إنشاء كائن واحد فقط من الفئة مهما تم استدعاؤها بهذا الشكل: class Singleton: _instance = None # متغير يخزن النسخة الوحيدة def __new__(cls): if cls._instance is None: cls._instance = super(Singleton, cls).__new__(cls) return cls._instance # اختبار Singleton singleton1 = Singleton() singleton2 = Singleton() # التحقق من أن الكائنين هما نفس النسخة print(singleton1 is singleton2) # ستطبع True هنا في الكود new هي ميثود خاصة يتم استدعاؤها قبل إنشاء الكائن، وتستخدم هنا لضمان أن النسخة الوحيدة من الفئة يتم إرجاعها كل مرة، أما cls._instance فهو متغير فئوي يخزن النسخة الوحيدة من الكائن، إذا كانت None، يتم إنشاء الكائن، وإلا يتم إرجاع النسخة الموجودة. بهذا الشكل، يتم التأكد من أن أي محاولة لإنشاء كائن جديد من الفئة ستعيد النسخة نفسها الموجودة بالفعل.
    1 نقطة
  20. إن تركك لشئ ما مدة طويلة بالطبع سينسيك الكثير حوله ولن تستطيع تذكر أشياء كثيرة بخصوص هذا . أما في البرمجة فالأمر يعتمد على ما كنت وصلت إليه سابقا . فإذا كنت قبل الإنقطاع قد ذاكرت جيدا وكانت نسبة إستيعابك للأمور كبيرة فستجد أن المراجعه سهلة بإذن الله وسريعه والطريقة الأفضل في هذه الحالة هي مراجعة التلخيصات إذا كنت قمت بهذا سابقا أما إذا لم تكتب أى تلخيصات فيمكنك مشاهدة دروس حو البرمجة سريعا أو المراجعة من المصادر التي ذاكرت منها سابقا . و يجب عليك أهم شئ أولا مراجعة الأساسيات و محاولة الإستذكار وبعد ذلك يمكنك إنشاء مشاريع صغيره بنفسك لتساعدك في المراجعة بشكل جيد و إذا كنت قد كتبت مشاريع سابقة يمكنك إعادىها دون النظر إليها إلا حين الإنتهاء من المشروع ومقارنة المشروعين وأنظر إلى طريقة كتابتك للكود سابقا وحاليا لتعرف مدى القصور لديك والأجزاء التى تحتاج مذاكرة مرة أخرى منك. أما الشعور بالضياع والتشتت فهذا أمر طبيعى جدا ولكن لا يجب عليك الإستسلام له فبعد المراجعة و التطبيق ستجد أن الأمور أصبحت أسهل و أفضل إن شاء الله فتعلم أى شئ من البداية يكون صعبا فى بادئ الأمر لهذا لا تقلق. أما بخصوص المصادر فيمكنك مشاهدة الدروس التى تريدها على اليوتيوب أو يمكنك الإشتراك في دورة دورة تطوير واجهات المستخدم هنا في الأكاديمية حيث ستساعدك لتصبح مطور واجهات مستخدم أو يمكنك قراءة الدروس والمقالات هنا في الأكاديمية أو موقع موسوعة حسوب حيث ستجد الكثير من الشروحات للدروس في العديد من لغات البرمجة : https://wiki.hsoub.com/الصفحة_الرئيسية https://academy.hsoub.com/programming/
    1 نقطة
  21. مرحبًا، انقطاعك عن شيء ما ينسيك تفاصيله و يقلل المرونة التي كانت لديك فيه. هذا ينطبق على كل شيء بما فيها البرمجة. و لكن الانقطاع لا ينبغي أن يؤدي إلى نسيان الأفكار و طريقة التفكير اللازمة للقيام بالأمور، بالتالي سيكون من الأسهل إعادة التعلم. بناء على ذلك من الجيد أن تبدأ بالمراجعة من مصادر لا تفترض أن لغة البرمجة (التي تريد إعادة تعلمها) هي أول لغة لك، هذا يسرع عملية إعادة التعلم حيث أن هذا النوع من المصادر لا تقوم بإعادة شرح الأفكار البسيطة العامة للبرمجة مثل التعابير الشرطية و الحلقات و ما إلى هنالك، فقط تقوم بشرحها بشكل سريع فكل ما يهمك هو استعادة هذه المعلومات و ليس تعلمها من الصفر. أما فيما يخص تطوير الواجهات، فأفضل طريقة هي أن تقوم بإعادة الاطلاع على مشاريع قديمة قمت بإنشاءها، من ثم إنشاء موقع مشابه من الصفر حتى تستعيد المرونة في ذلك. تحياتي.
    1 نقطة
  22. سنتحدث في هذا المقال عن مفهوم العلاقات بين جداول قاعدة البيانات، وما أنواع هذه العلاقات وكيف تتمثل وما هو أثرها على العمل. ما هي العلاقات بين الجداول عند إنشاء جداول في قاعدة البيانات، فإن الظاهر لنا أننا نقوم ببناء جداول منفصلة وغير مترابطة، ولكننا في الواقع العملي نحتاج لربط هذه الكيانات المنفصلة بحيث تُبنَى علاقات تحكم البيانات الموجودة في هذه الجداول، وتحكم طريقة التعامل مع هذه البيانات. تنشَأ العلاقة بين جدوليْن عندما يُربط عمودان فيهما مع بعضهما عن طريق وجود قيود مطبقة على العمودين، بحيث يكون قيد المفتاح الرئيسي على عمود في الجدول “الأب” وقيد المفتاح الأجنبي على العمود في الجدول “الابن”، وعادة يكون اسم العمودين واحدًا في كلا الجدولين. مثلا، لحفظ عناوين الأشخاص نستطيع إنشاء جدول باسم Address ونربطه بجدول الأشخاص Persons بعلاقة تحكم البيانات الموجودة في الجدولين، بحيث يكون لكل شخص في الجدول Persons عنوان واحد مرتبط به في الجدول Address. يُربَط الجدولان عن طريق عمود باسم Person_Id في كلا الجدولين. مثال آخر، لو أردنا أن نتابع عملية استعارة الكتب في مكتبة، فإننا سننشئ جدولًا باسم Borrowed_Books (كُتُب مُعارة) ونربطها بالجدول Persons عن طريق العمود Person_Id. يستطيع الشخص الواحد - في هذا النوع من الربط - أن يستعير أكثر من كتاب. في هذا المثال، لو أننا حفظنا بيانات الأشخاص والكتب المستعارة في جدول واحد، ستظهر لنا مشكلة تكرار البيانات Data Redundancy لأننا سنكرّر بيانات الشخص لكل كتاب يستعيره. ماذا نستفيد من بناء العلاقات بين الجداول؟ التخلص من مشكلة تكرار البيانات عن طريق فصلها وحفظها في أكثر من جدول، فمشكلة تكرار البيانات هي عدو مستخدمي قواعد البيانات ومسؤوليها، لأنها تتسبب بزيادة حجم قاعدة البيانات بقدر كبير وبسرعة، وترفع السرعات المطلوبة لتنفيذ الاستعلامات، وتجعل من موضوع صيانة قاعدة البيانات كابوسا مقلقا. الحفاظ على دقة وسلامة البيانات في قاعدة البيانات، فمع وجود العلاقات بين الجداول، سوف تضمن مثلا عدم وجود كتاب مُعار ليس له شخص استعاره، أو عنوان وهمي ليس له صاحب، وقس على ذلك العديد من الأمثلة. استخراج البيانات من أكثر من جدول بكفاءة وسرعة عن طريق بناء جمل ربط استعلامية تطلب المعلومات من أعمدة مختلفة في جداول مختلفة، وإخراج النتيجة بطريقة مفيدة ومرتبة. أنواع العلاقات توجد أربعة أنواع من العلاقات بين الجداول كالتالي: علاقة واحد إلى واحد (One-to-One). علاقة واحد إلى كثير أو علاقة كثير إلى واحد (One-to-Many / Many-to-One). علاقة كثير إلى كثير (Many-to-Many). علاقة المرجعية الذاتية (Self Referencing). علاقة واحد إلى واحد لنفترض أن الجدول Persons لديه البنية والبيانات التالية: Person_ID First_Name Last_Name Age Address 101 Ibrahim Mohammed 31 12 Main St, Doha 102 Mohammed Khaled 25 Gaza, Middle Center نستطيع أن نضع بيانات العنوان في جدول منفصل ونسميه Address وتكون بنية الجدوليْن كالتالي. الجدول Persons: Person_ID First_Name Last_Name Age Address_Id 101 Ibrahim Mohammed 31 1 102 Mohammed Khaled 25 2 الجدول Address: Address_ID Address 1 12 Main St, Doha 2 Gaza, Middle Center لاحظ أنه أصبح لدينا عمود بنفس الاسم Address_Id في كلا الجدولين. لبناء العلاقة بين الجدولين، طبّقنا قيد المفتاح الأجنبي على العمود Address_Id في الجدول Persons بحيث يأخذ قيمه من العمود Address_Id في الجدول Address والمطبق عليه قيد المفتاح الرئيسي. أصبحت لدينا الآن علاقة بين الجدولين، وفي حال كان كل عنوان في الجدول Address يقترن فقط بشخص واحد في الجدول Persons فعندها نسمي هذه العلاقة واحدًا إلى واحد. يجب التنويه إلى أن هذا النوع من العلاقات غير مستخدم كثيرا، فالجدول الأول الذي يحتوي العنوان وبيانات الشخص يفي بالغرض في أغلب الأحيان. نستطيع تمثيل العلاقة بالشكل التالي: لاحظ أن وجود العلاقة اختياري، فمن الممكن أن يكون لدينا سجل في الجدول Persons دون عنوان له في الجدول Address وهذا مرتبط بعدم تطبيق قيد القيمة غير الفارغة على العمود Address_Id. في حال طُبِّق قيد غير القيمة غير الفارغة على العمود، فهنا تصبح العلاقة واجبة بين الجدولين، ولا يمكن أن نُنْشئ سجلًّا في الجدول Persons إلا بإدخال قيمة موجودة للعمود Address_Id وهو في مثالنا هذا غير منقطي نوعا ما. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن علاقة واحد إلى كثير أو علاقة كثير إلى واحد هذا النوع من العلاقات هو الشائع بين أنواع العلاقات بين الجداول في قاعدة البيانات، لوجود تطبيقات كثيرة عليه، فمثلا: الطالب (واحد) يستطيع أن يدرس أكثر من مساق (كثير). الطبيب يعالج ويتابع حالة مريض واحد أو أكثر. طلبية الشراء تحتوي على أكثر من عنصر. الشخص يستعير أكثر من كتاب. وقس على ذلك العديد من الأمثلة. لنفترض وجود جدول للزبناء Customers بالهيكلية التالية: Customer_ID Customer_Name 1 Ibrahim Mohammed 2 Mohammed Ahmed نستطيع ربط جدول الزبناء السابق بجدولٍ للطلبيات Orders بعلاقة واحد إلى كثير، لتعبر العلاقة عن الطلبيات التي قام بها العملاء وقيمة كل طلبية وتاريخها. يمكن أن تكون هيكلية الجدول Orders كالتالي: Order_ID Customer_ID Order_Date Order_Value 997 101 1/5/2017 100 998 102 21/4/2016 150 999 101 21/4/2015 1500 تسمح هذه العلاقة للعميل بأن يطلُب طلبيةً أو أكثر، ويمكن ألا تكون له أية طلبية. ولكنّ كل طلبية في الجدول Orders ستكون تابعة لعميل واحد. ونستطيع تمثيل هذه العلاقة بالشكل التالي: علاقة كثير إلى كثير في علاقة كثير إلى واحد، تكون العلاقة مبنية على أن يكون أحد أطرافها “واحدًا”، مثل طالب واحد، عميل واحد، طلبية واحدة، وفي الطرف الثاني “كثير”. نحتاج أحيانا أن يكون طرفا العلاقة كثيرين. فمثلا، قد تكون لدينا طلبية تحتوي أكثر من عنصر، ونفس العنصر يكون متواجدًا في أكثر من طلبية. في هذه الحالة نحتاج لوجود جدول إضافي لبناء العلاقة، فمثلا تكون هيكلية جدول Orders كالتالي: Order_ID Customer_ID Order_Date Order_Value 997 101 1/5/2017 100 998 102 21/4/2016 150 999 101 21/4/2015 1500 وهيكلية جدول Items كالتالي: Item_Id Item_Name Item_Description 201 Hard Disk 1 1 Tera SSD Hard 202 Mouse Microsoft Optical Mouse 203 LCD 42 42” LCD نستطيع بناء علاقة كثير إلى كثير بين الجدولين السابقين بإضافة جدول ثالث يحلّ مكان الرابط وغرضه الوحيد هو بناء هذا النوع من العلاقات. نطلق عليه مثلا الاسم Orders_Items، ويكون بالهيكلية التالية: Order_Id Item_Id 997 201 997 202 999 201 999 202 999 203 998 203 يمثّل الشكل التالي علاقة كثير إلى كثير كما تظهر في الجدول Orders_Items: علاقة المرجعية الذاتية يُبنى هذا النوع من العلاقات عندما نريد أن نبني علاقة بين جدول ونفس الجدول، وأوضح مثال على هذا النوع من العلاقات هو جدول الموظفين الذي يحتوي على عمود رقم الموظف المسؤول، حيث يمكن ربط كل موظف بموظف آخر (مدير أو مسؤول) من نفس الجدول. فمثلا، لو كان لدينا جدول باسم Employees خاص بحفظ بيانات الموظفين، ستكون هيكليته على النحو التالي لتطبيق علاقة مرجعية ذاتية عليه: Employee_ID Employee_Name Manager_Id 100 Ibrahim Elbouhissi 101 Khaled Saber 100 102 Yasmeen Hadi 100 103 Duaa Yousef 101 104 Sami Saber بعلاقة المرجعية الذاتية، من الممكن أن يكون للموظف مسؤولًا أو لا يكون، ومن الممكن أن يكون الموظف مسؤولا عن موظف أو أكثر، ويمكن تمثيل العلاقة بالشكل التالي.
    1 نقطة
×
×
  • أضف...