في المقالة
السابق تم الحديث عن فخ الهوة أو الفجوة (Chasm Trap) واستكمل الحديث في هذه المقالة عن فخ أخر
يجب الحذر منه.
تنويه: ستحقق هذه المقالة فائدة اكبر في حال معرفتك بالعلاقات بين الجداول ولغة SQL لذا ننصح بمراجعة دروس في قواعد البيانات
وكمراجعة بسيطة
يوجد 4 علاقات بين الجداول هي على النحو التي:
1.
علاقة واحد الى واحد (One
to One) مثل
جدول الموطنين وجدول جوازات السفر فلكل مواطن جواز سفر واحد والعكس.
2.
علاقة واحد الى متعدد (One
to Many) مثل
جدول الموظفين وجدول الرواتب.
3.
علاقة متعدد الى واحد (Many
to One) مثل
جدول الموظفين وجدول الإدارات.
4.
علاقة متعدد الى متعدد (Many
to Many) مثل
جدول البضائع وجدول المبيعات.
فخ المروحة (Fan Trap):
تظهر هذه
المشكلة مع العلاقة واحد الى متعدد (One To Many) إذا كانت 3 مستويات أو أكثر بحيث تكون
عبارة عن جدول يرتبط بجدول بالعلاقة واحد الى متعدد (One To Many) ثم يرتبط بجدول ثالث بالعلاقة واحد الى
متعدد (One To Many). تصبح المجاميع في الجدول أو الجداول التي
في المنتصف خاطئة.
مثال:
جدول العملاء (Customers)
وجدول الطلبات (Orders) وجدول تفاصيل الطلبات (OrderDetails)
العلاقة بين جدول
العملاء (Customers) وجدول الطلبات (Orders) واحد الى متعدد (One
to Many) والعلاقة
بين وجدول الطلبات (Orders) وجدول تفاصيل الطلبات (OrderDetails)
واحد الى متعدد (One to Many).
والبيانات على
النحو التالي:
جدول العملاء (Customers)
CustomerID
|
CustomerName
|
1
|
Fahad
|
2
|
Nasser
|
جدول الطلبات (Orders)
CustomerID
|
OrderID
|
OrderValue
|
1
|
34
|
2
|
1
|
35
|
2
|
1
|
36
|
2
|
2
|
37
|
4
|
2
|
38
|
4
|
2
|
39
|
4
|
جدول تفاصيل
الطلبات (OrderDetails)
OrderID
|
OrderQuantity
|
34
|
20
|
34
|
5
|
34
|
5
|
35
|
20
|
36
|
20
|
37
|
40
|
38
|
40
|
39
|
40
|
39
|
5
|
39
|
5
|
39
|
5
|
عند محاولة عرض
البيانات في جدول واحد تظهر المشكلة كما هو موضح في هذه الصورة
كما هو واضح
الارقام الخاطئة في حالة الدمج في المربع الأحمر. وعند فصل البيانات تظهر الأرقام
الصحيحة في المربع الأخضر.
هذه الأخطاء
واضحة في قاعدة البيانات لكن ما هو الوضع عند عرضها في برامج تصوير البيانات (Data Visualization)
ولقد تم اختبارها على 2 منها هي Tableau – Power BI وظهرت النتائج التالية:
Tableau:
يوجد في Tableau
حالتين لجلب البيانات إما Live وهي الربط المباشر مع قاعدة البيانات أو Extract
وهي تحمل البيانات في نفس ملف ولا حاجة للربط المباشر مع قاعدة البيانات. ولقد عرض
Tableau
البيانات مع الأخطاء في كلتا الحالتين حتى عند فصل البيانات وليس فقط عند الدمج كما
هو في الصورة التالية:
Power BI:
أستطع Power BI
في كلتا الحالتين Direct Query وهي الربط المباشر مع قاعدة البيانات وImport
وهي حفظ البيانات في نفس الملف من عدم الوقوع في Fan Tarp عند الدمج ولكن أظهر الأرقام الخطأ عند
جلبها عن طريق جملة SQL بشكل مباشر وهي على النحو التالي:
SELECT A.[CustomerID]
,sum(B.OrderValue) SumOrderValue
,sum(C.OrderQuantity) SumOrderQuantity
FROM [Fan Trap].[dbo].[Customers] A
join [Fan Trap].[dbo].Orders B on (A.CustomerID=B.CustomerID)
join [Fan Trap].[dbo].OrderDetails C on (B.OrderID=C.OrderID)
group by A.CustomerID
الاستنتاجات:
·
في التجربة السابقة يظهر التقدم التقني في Power BI
أكثر من Tableau
الا أنه مازال يتمتع بمميزات أكثر من Power BI ولم يصل Power BI الى مرحلة النضج الكامل ولكن سيصل لها
قريبا.
·
فخ المروحة (Fan Trap) يمكن أن تحميك منه بعض البرامج الحديثة الا
أنه مازال خطير عند استخدام جمل SQL.
·
يوجد عدة حلول لهذا الفخ اختر ما يناسب حسب الحاجة
يمكن البحث عنها في الانترنت.
·
الحماية في أفضل حالتها هي الالمام بهذا الفخ
وليس الاعتماد على التقنية الحديثة خاصة في الوقت الراهن.
·
الالمام بقواعد البيانات السطحي دون التعمق فيها
ربما يقودك لمثل هذه المشاكل.
·
مراعاة الهندسة البرمجية لقواعد البيانات التي
أنت بصدد تحليلها أمر أساسي ومهم.
في الختام كانت
مفاجأة لي اختلاف القدرات بين برامج تصوير البيانات (Data
Visualization) في
التعامل مع البيانات لذا يجب عدم الثقة المفرطة في نتائجها والأفضل اختبار الأرقام
والنتائج عبر أكثر من طريقة. الامر الاخر سرت العادة أن يقوم مبرمج النظام بتجهيز
جمل SQL
لمحلل البيانات أو بناء View لاستخراج البيانات وخاصة عند طلب البيانات من
جهة خارجية لذا دائما أطلب مخطط العلاقات ERD (Entity Relation Diagram) مع جمل SQL للتأكد من خلوها من المشاكل.

لا يوجد تعليقات
أضف تعليق