المشاركات

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

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

الوسوم
اظهر المزيد

مقالات ذات صلة

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

إغلاق