فخ المروحة (Fan Trap)

0
في المقالة السابق تم الحديث عن فخ الهوة أو الفجوة (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 للتأكد من خلوها من المشاكل. 

لا يوجد تعليقات

أضف تعليق