![]() |
|
برنامج شخصي للتخزين - نسخة قابلة للطباعة +- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum) +-- قسم : منتديات دلفي الأخرى (https://delphi4arab.net/forum/forumdisplay.php?fid=4) +--- قسم : برامج دلفي من عمل الأعضاء (https://delphi4arab.net/forum/forumdisplay.php?fid=27) +--- الموضوع : برنامج شخصي للتخزين (/showthread.php?tid=10761) |
RE: برنامج شخصي للتخزين - sofiane201 - 29-04-2020 قاعدة البيانات تحتوي على جداول مترابطة بينها غالبا وكل جدول يحتوي على سجلات وكل سجل يجمع معلومات عن الصنف الذي يمثله الجدول. مثلا AgmczDB >> فيها جدول Client تسجل فيه معلومات عن كل زبون, غير صحيح ان تنشئ جدول باسم احد الزبائن مثلا PHP كود : CREATE TABLE Ahmad(...) بل تجمعهم في جدول واحد PHP كود : CREATE TABLE Client(id integer not NULL,RE: برنامج شخصي للتخزين - Delphi4Us - 29-04-2020 بمعنى اخر انا اريد ان استعلم عن اسماء وتاريخ ميلاد كل الاعضاء سوف اكتب PHP كود : select name,date from Tablename هل يمكنك ان تتخيل جملة الاستعلام التي ستكتبها انت لالف شخص والف جدول مع ملاحظة اننا لم نتطرق الى الجداول المترابطة بعد يعني انشاء جدول لكل عضو لايقدم اي حلول او تسهيلات بالوقت الذي يمكنك استخدام جدول واحد وانت مرتاح . RE: برنامج شخصي للتخزين - Agmcz - 29-04-2020 أولا شكرا للجميع... أخي Delphi4Us عندما قلت (ليس منه فائدة بل انه يضر بقاعدة البيانات وتركيبتها...) أردتك أن توضح الضرر الذي سيقع لقاعدة البيانات وتركيبتها؟ عموما للتوضيح أكثر البرنامج للتخزين لنفرض أنني أعمل بناء وأريد أن أسجل كل الأعمال التي أقوم بها لـ (أحمد, عمر, خالد) وأقوم بعرض التسجيلات على حدة لكل من (أحمد, عمر, خالد) لقد قمت بذلك بإنشاء جدول لكن من (أحمد, عمر, خالد) وبما الفكرة لم تعجبكم ماهي أفضل الطرق التي يجب أن أتبعها للقيام بذلك؟ RE: برنامج شخصي للتخزين - S.FATEH - 29-04-2020 السلام عليكم قم باشاء جدول Client PHP كود : create table client(بالنسبة لكل زبون تضيف سجل PHP كود : insert into client(id_client, nom)values(1, 'أحمد');اذا اردت عرض الاعمال كما قلت ليكن لدينا جدول الاعمال Jobs PHP كود : create table jobs(لاحظ في جدول الاعمال لدينا id_client بالتالي قمت بالربط جدول الزبائن مع جدول الاعمال للحصول على عمل كل زبون تقوم باستخدام الـ SQL بالربط بينهما PHP كود : select client.nom, jobs.job from client inner join jobs on (client.id_client = jobs.id_client); اذا اردت عرظ المتعلق فقط بزبون عمر PHP كود : select client.nom, jobs.job from client inner join jobs on (client.id_client = jobs.id_client)ملاحظة لم اجرب الاكواد وضعتها للشرح فقط هذه هي الطريقة التي تعمل بها قواعد البيانات العلائقية RE: برنامج شخصي للتخزين - Agmcz - 30-04-2020 تمام أخي S.FATEH تم تطبيق ماذكرت بنجاح يبدوا ان العملية أكثر سلاسة هكذا. RE: برنامج شخصي للتخزين - Agmcz - 30-04-2020 عند إستعمال inner join يتم ربط الجدولين مع بعض PHP كود : select * from Jobs inner join Clients on (Jobs.Id_client = Clients.Id_client) where Clients.id_client =2 يتم حذف الزبون من الجدول client المربوط مع jobs فستعملت الإستعلام التالي لحل المشكل PHP كود : select * from Jobs where id_client =2 فما الفرق بين الإستعلام الأول والثاني علما أنهما يعرضان نفس النتائج؟ RE: برنامج شخصي للتخزين - S.FATEH - 01-05-2020 السلام عليكم (30-04-2020, 10:07 PM)Agmcz كتب : وبعد حذف أي سجل من الجدول jobs عند حذف client يتم حذف جميع الـ jobs و ليس العكس لا يمكن ان يوجد عمل بدون وجود client لكن يمكن ان يوجد client و ليس لديه اي عمل ! يسمى هذا الامر Referential Integrity و يمكن اظافته لقاعدة البيانات ان كانت تدعمه ON DELETE CASCADE يتم حذف جميع الابناء من جدول الابناء عند حذف الاب من جدول الاباء ON UPDATE CASCADE يتم تحديث قيمة الحقل الغريب عند التحديث في الجدول الرئيسي PHP كود : ALTER TABLE JOBS ADD CONSTRAINT FK_1 FOREIGN KEY (ID_CLIENT) REFERENCES CLIENT (ID_CLIENT) ON DELETE CASCADE ON UPDATE CASCADE; (30-04-2020, 10:07 PM)Agmcz كتب : الاستعلامين بالطريقة التي كتبتهما غير متكافئان و لا يعطيان نفس النتيجة الاستعلام الاول تحصل على جميع السجلات من الجدولين و الثاني غير ذلك الاستعلام الاول لديك ربط بين الجدولين يمكن ان تحصل على اسم الـ client من جدول الـ client و العمل الخاص به job من جدول الـ jobs الاستعلام الثاني لا يمكن الحصول على اسم الـ client من جدول الـ client تتعامل فقط مع جدول الـ jobs RE: برنامج شخصي للتخزين - Agmcz - 01-05-2020 وعليكم السلام أخي حمل المرفق وتأكد بنفسك إضغط الأزرار بالترتيب Insert Client Insert Job Select1 Delete وألقي نظرة على جدول Client في القاعدة وأخبرني هل أنا محق أم لا RE: برنامج شخصي للتخزين - S.FATEH - 01-05-2020 السلام عليكم عند اجابتي لم اطلع على المرفقات اطلعت فقط على ردك اخي... اذا كان لديك جدول PHP كود : client(id_client, nom) PHP كود : select * from client PHP كود : select id_client, nom from client نفس الشيئ
اذا كان لديك جدول jobs مع الجدول السابق
PHP كود : Jobs(id_job, job, id_client) PHP كود : select * from client inner join jobs on (client.id_client = jobs.id_client) PHP كود : select client.id_client, client.job, jobs.id_job, jobs.job, jobs.id_client from client inner join jobs on (client.id_client = jobs.id_client) نفس الشيئ
بالنسبة للمرفقات يمكن ان يكونا نفس الشيئ لكنهما ليسا نفس الشيئ !!! 5≠2
![]() RE: برنامج شخصي للتخزين - Agmcz - 01-05-2020 أعتقد أنه هناك سوء فهم يمكن أنا لم أعرف كيف اصيغ الكلام كي تفهمني فعند وضعي الرد التالي إقتباس :عند إستعمال inner join يتم ربط الجدولين مع بعضفعند إستعمال الإستعلام الأول و تنفيذ ADOQuery1.Delete; يحذف سجل من jobs وزبون من clients أما عند إستعمال الإستعلام الثاني و تنفيذ ADOQuery1.Delete; يحذف سجل من jobs فقط أعلم أن الإستعلام الثاني يقوم بتحديد الجدول jobs فقط فعند تنفيذ ADOQuery1.Delete; فبطبيعة الحال عند الحذف لن يتأثر جدول Clients كيف أستعمل الإستعلام الأول مع ADOQuery1.Delete; بشرط أن لا يحذف زبون من جدول Clients ردك إقتباس :الاستعلامين بالطريقة التي كتبتهما غير متكافئان و لا يعطيان نفس النتيجة الاستعلام الاول تحصل على جميع السجلات من الجدولين و الثاني غير ذلكأعلم أن الإستعلامين غير متكافئين فلا يمكن أن نقول 5 = 2 لكن بما أنني أقوم بعرض في DBGrid الحقلين (id_job, job) فقط فيمكن أن نقول 5 = 2
|