الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

SQL Relational DataBase Table

مغلق
بدأه جوليا في 26 مارس 2007 · 12 رد · 1,463 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته ...

لدي الجداول التالية :

post-62586-1174915916_thumb.jpg

أحاول هنا إنشاء علاقات بين الجداول ، حيث عمود الـ ID لكل جدول هو Primary Key....

1 . أنشئت علاقة بين جدولي : الـ Category و الـ SubCategory

حيث الـ CategoryName في جدول الـ Sub Category هو FK

و عند حدوث عملية الـ Delete فسوف يتخذ الإجراء ... NO ACTION

و عند حدوث عملية الـ Update فسو يتخذ الإجراء .... CASCADE

2. أنشئت علاقة بين جدولي : الـ Product و الـ Sub Category

حيث الـ SubCategoryName في جدول الـ Product هو FK

و عند حدوث عملية الـ Delete فسوف يتخذ الإجراء ... NO ACTION

و عند حدوث عملية الـ Update فسو يتخذ الإجراء .... CASCADE

3. أنشئت علاقة بين جدولي : الـ Product و الـ Category

حيث الـ CategoryName في جدول الـ Product هو FK

و عند حدوث عملية الـ Delete فسوف يتخذ الإجراء ... NO ACTION

و عند حدوث عملية الـ Update فسو يتخذ الإجراء .... CASCADE

لكن العملية الأخيرة تم رفضها .... و عند التغير الأجراء الخاصة بعملية الـ Update الى NO ACTION

يتم قبول العملية ...

لكن ذلك سوف يسبب عدم التكامل في بيانات القاعدة ...

حيث عند التحديث في جدول الـ Category.... لن يسبب ذلك التحديث لأسماء الـ Category في جدول الـ Product.

فما هو الإجراء الأفضل التي يتوجب علي إتباعه ؟؟

، تحياتي.

#2

أهلين جوليا ،

بالنسبة للمشكلة بتمنى تعيدي النظر في التصميم

أولا : بنصحك تنقلي رقم الـ Category and SubCategory و ليس NAMES

ثانيا : تحذفي رقم CategoryId من جدول الـ Product

و هيك بتحلي المشكلة

المشكلة جدا بسيطة و الـ Sql معه حق

لإنه تعديل على الجدول الأول سيؤثر على الثاني و الثالث

و هذا التأثير الناتج على الجدول الثاني سؤثر على الثالث

و هون المشكلة صار عندك Cycle Updates

سلام

#3

Desigen

يا الهي !! .... عندما رأيت اسمك .. تذكرت مآساة عظيمة للـ upsizing wizard .... الله يبعدنا عنها !

حسنا ،، حسنا ...

بالنسبة للحقول لأسماء الـ Category و الـ SubCategory في القاعدة الأصلية استخدمت الـ ID ، لكن هنا في المثال قد وضعتها سهوا من السرعة ... فاعذرني على هذا الخطأ الغير مقصود.

أما بالنسبة للمشكلة الإجراءات .... معك حق ... المشكلة التي تظهر لي هي : Cycle update ...

و حذف عمود الـ CategoryID من جدول الـ Product ... هو أمر مممتاز .... سوف يقلل من عبء البيانات المخزنه .... و يؤدي الهدف المطلوب لعملية الـ Normalization.

______

هنالك مشكلة أخرى واجهتني ...لجدول رابع ....

يوجد في جدول Product حقلين مختلفين لاستخدامات مختلفة ، يحملان قيم من المفتاح الرئيسي للجدول الرابع..

في هذه الحالة يتطلب مني أجراء علاقتين بين حقلي الـ Product و الجدول الرابع ، و بذلك تحدث مشكلة الـ Cycle update.

كيف يمكنني تلافي هذه المشكلة ؟؟

، شكري الجزيل لما تقدمت به من حلول مذهلة و رائعة .

، تحياتي و تقديري لك.

#4

بالنسبة للمشكلة مثل ما فهمت إنه عندك جدول رابع و به مفتاح رئيسي

و عندك جدول الـ المنتجات فيه حقلين من الجدول الرابع

إذا كان يلي فوق صحيح ، فلماذا تكررين العلاقة

بس خذيه مرة واحدة

عموما ، أرجوا انك توضحي شوي زيادة

إذا بتقدري بمخطط ERD مع " شروط العمل "

لحتى نفهم العلاقة بين الجدول الرابع و جدول الـ منتجات

سلام

تم تعديل هذه المشاركة بواسطة Desigen في 27 مارس 2007 في 09:29

#5

أهلا بك مرة أخرى ... Desigen....

تكرار الحقلين لإستخدامات مختلفة كما ذكرت ... على كل حال ... سوف اعرض المشكلة كما طلبت لكي تتضح أكثر ..

post-62586-1175000114_thumb.jpg

العلاقات التي تم إنشائها:-

  • علاقة بين جدول الـ Product و جدول الـ Country

حيث يرتبط فيها حقل الـ CountryID مع حقل الـ Made In

بالنسبة لإجراء الـ Update= CASCADE

  • علاقة بين جدول الـ Product و جدول الـ Country

حيث يرتبط فيها حقل الـ CountryID مع حقل الـ Export To

بالنسبة لإجراء الـ Update= NO ACTION

عندما اجري تعديل على جدول الـ Counrty ، يتم تحديث أيضا حقل الـ Made In في جدول الـ Product.

و لكن المشكلة لا يتم تحديث لحقل الـ Export To في جدول الـ Product ...

و السبب يعود أني لا استطيع في العلاقة رقم (2) ، إجراء Update من نوع CASCADE

حيث تظهر لي مشكلة الـ Cycle Update

، اعتذر على الفوضى في طرح تفاصيل المشكلة في التعقيب السابق ، و كما أشكرك مجددا على الاقتراح المذهل الذي عرضته .

، تحياتي لك.

#6

هلق في عندك مشكلة صغيرة بالتصميم

إذا افترضت الجملة التالية : يتم تصنيع المنتج في بلد واحد فقط

فحسب شغلك هذا الموضوع صحيح

لكن إذا افترضت إنه يتم تصدير المنتج لأكثر من بلد

فهون في عنا مشكلة

الحل ، بتعملي جدول خاص بالتصدير Export

و يحتوي الجدول على معلومات مثل ( رقم المنتج ، رقم البلد الهدف ، كمية الطلب ، تاريخ الطلب ...... )

بس بدك تنتبهي إنه في علاقة On Update Cascade بين جدول المنتجات و التصدير

و لا يوجد هكذا علاقة بين الجدول البدان و جدول التصدير

لحتى لا يصير عنا Cycle Updates

و عموما بتوقع ما هيصير تغييير كثييير على جدول البلدان يعني Updates

بإنتظار ردك

سلام

#7

سلام ... :D

المشكلة المطروحة هنا ...هي مثال للمشكلة الحقيقية التي اواجهها ..

بمعنى أن اسماء الحقول الي وضعتها هي افتراضية ....

كي تبين أن المقصود بمعنى كل حقل من هذين الحقلين مختلف ..

و لكنهما يأخذان قيم من حقل واحد ... يتم اجراء تعديلات عليه ...

و أي تعديلات على هذا الحقل ... يجب أن يحدث بالتالي تعديل على الحقلين التابعين له...

أي باختصار انشاء جدوال آخر .... غير ملائم لي..

سوف انتظر تعليقك التالي ... و في حالات قصوى سوف الجأ الى كتابة مثال ثالث لكي تتضح الصورة بشكل ادق.

، تحياتي.

#8

هلق أنا حاولت حل هيك مشكلة ما طلع بإيدي شي

إذا بدك وضحيلي شو بدك

بالنهاية لازم نعرف قاعدة البيانات و قواعد العمل المطلوب تحقيقها

لكي ننجح في الموضوع

لكن أتوقع لا يمكن تطبيق يلي عم تقولي عليه " لن يقبل Sqal هذا الأمر "

سلام

#9

سلام ... :D

يجب أن تهدأ قليلا ...

هذه هي الجداول :-

post-62586-1175014431_thumb.jpg

كما يتضح لديك لدي جدولين :

1- جدول المنتجات

2- جدول الوحدات

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

مثلا .. عند شراء شركة لمنتج الآيس كريم .. لن تشتري مغلف واحد فقط .. و لكن علبة من الآيس كريم.

و نحن هنا نحتاج لمعرف سعر الوحدة الواحدة ... أي سعر المغلف... لغرض التسويق...

و كما قلت أنت لا يمكن تطبيق عملية التحديث وفق ما أريد ...

ما يدور بذهني الآن ... حلان ..

الأول :

أما استغني عن حقل الـ size unit و هذا سوف يحدث في أسوأ الأحوال.

الثاني:

انشاء جدول ثالث لوحدات الوحدة الواحدة ... و جعل الجدول الحالي لوحدات المنتج ككل ...

مع العلم ان القيم التي سوف يحويها هذان الجدوال هي متشابهه.

حسنا.... :huh:

يا ترى هل قفزت فكرة ثالثة في ذهنك ؟؟

أم سوف نكتفي بما يدور بمخيلتي!.

، شكرا لاهتمامك و تفانيك في إيجاد الحل.

، تقديري لك.

#10

هلق بعد تفكير في الموضوع ، و صراحة فتت بالحيط لإنه ما فهمت شو الإختلاف بين

Size , Qty

لكن بالنهاية فهمت العلاقة بين الجدولين

سؤالي ، أليست الحجوم ، و طرق التوزيع محددة ؟؟

يعني بالنهاية لكون صريح أكثر معك ، هذا الجدول Unit Table

لازم يتم ادخال الوحدات بعد بناء قاعدة البيانات فورا

لسبب ، أنها أشياء معروفة و لا يمكن تغيرها

يعني ما هتجي الشركة تقول لك خليني أعمل وحدة جديدة

و هي : وحدة و نصف !!

لا وجود للنص ، شو بدك تعطيه للزبون أيس كريم و نص !!

إذا في شي خبريني

سلام

#11

سلام ...

1.الفرق بين الـ size و الـ qty ، هو :

size= السعة للمنتج (كم قطعة يحتوي ،أو كم جرام يتسع ..الخ).

qty= الكمية المتوفرة في المصنع (كم كرتون ،أو كم كيلو ..الخ ).

2.نعم الواحدات ثابتة ، و ليس هنالك عمليات تحديث عليها إلا ما ندر .

3.لا ، ليس هنالك مشكلة أخرى .

، تحياتي.

#12

ما في مشاكل

#13

ممممممم بعد يوم منحوس ضربت فيه واحد سكران هارب من الشرطة بالسيارة والله ستر ما مات خلوني ارجع للكمبيوتر يمكن انسى اللي صار

هلأ انا حاولت افهم مشكلتك يا جوليا و ردود الاخ Desigen و وصلت لاقتراح بخصوص مشكلة جدولي Countries و Products

انا بعتقد انه يمكن عمل جدول جديد نسميه مثلا CountriesProducts و يكون به Candidate Key عبارة عن

CountryId من جدول الدول و ProductId من جدول المنتجات و يكونا معا هما ال Primary Key بحيث لا يكون تكرار لقيمها

في حال كون العلاقة 1-1 بالإضافة للحقلين MadeIn و ExportTo

أما في حال احتمال تكرار قيم معينة طبعا حسب ال Business Requirements للمشروع يمكنك تصميم جدول CountriesProducts

على هذا الشكل:

Id

CountryId

ProductId

MadeIn

ExportTo

حيث يكون ال Id هو المفتاح و بالتالي هناك مجال لتكرار وجود الدولة مع المنتج

ملاحظة: يمكن تسـأليني ليش نحنا أضفنا ال CountryId و الحقلين MadeIn و ال ExportTo رغم انهم يحملون قيمة مفتاح الدولة؟

مممممممم بعتقد انك قلتي رح تغيري بأي وقت قيمة هالحقول و بالتالي بيضل رقم الدولة الاصلية كمرجع داخل الحقل countryId

بتمنى هالشي يكون هو طلبك او عالاقل يوضحلك الطريق لانو عن جد انا مخي مقفل اليوم كلو

You can fly while you can touch the sky

هذا الموضوع مغلق.

مواضيع مشابهة