ما هي طرق الكشف برمجيًا للعلاقات العديدة إلى العدد في RDMBs؟

StackOverflow https://stackoverflow.com/questions/3901961

سؤال

أنا مشغول حاليًا في صنع Python orm الذي يحصل على جميع معلوماته من RDBMS عبر التأمل (سأذهب مع XRecord إذا كنت سعيدًا بها من نواح أخرى)-بمعنى ، فإن المستخدم النهائي يخبر فقط الجداول/المشاهدات انظر إلى ، ويقوم ORM بكل شيء آخر تلقائيًا (إذا كان الأمر كذلك يصنع أنت في الواقع تكتب شيئًا وأنت لا تبحث عن أشياء غريبة ومغامرات خطيرة ، إنها خطأ).

الجزء الرئيسي من ذلك هو اكتشاف العلاقات ، شريطة أن يكون لقاعدة البيانات جميع القيود ذات الصلة في المكان وليس لديك أي اتفاقيات تسمية على الإطلاق - أريد أن أكون قادرًا على عمل ORM مع قاعدة بيانات صنعها أي DBA المجنونة التي لديها خاصة به طرق العرض حول ما يجب تسمية الأعمدة والجداول مثل. وأنا عالق في العديد من العلاقات.

أولاً ، يمكن أن يكون هناك مفاتيح المركب. ثم ، يمكن أن يكون هناك علاقات MTM مع ثلاثة طاولات أو أكثر. ثم ، قد يكون لجدول MTM الوسيط الخاص به البيانات بصرف النظر عن المفاتيح - بعض البيانات الشائعة في جميع الجداول التي تربطها معًا.

ما أريده هو طريقة لاكتشاف برمجيًا أن الجدول X عبارة ، يجب أن تؤثر على نفس السمة في ب). هل هناك خوارزميات مشتركة للقيام بذلك؟ أو على الأقل لجعل التخمينات الصحيح في 80 ٪ من الحالات (شريطة أن DBA عاقل)؟

هل كانت مفيدة؟

المحلول 3

حتى الآن ، أرى التقنية الوحيدة التي تغطي أكثر من جدولين فيما يتعلق. يُفترض أن الجدول X مرتبط بالجدول Y ، إذا تم الرجوع إلى X وفقط إذا لم يتم الإشارة إلى Y أكثر من جدول واحد. هذا هو:

"Zero Tables Away" تعني X يحتوي على المفتاح الخارجي لـ Y. لا صفقة كبيرة ، هذه هي الطريقة التي نكتشف بها العديد من الأشياء.

"جدول واحد بعيدا" يعني أن هناك جدول Z يحتوي على جدول مرجعية مفتاح خارجي (من السهل العثور عليه) ، وجدول مرجع مفتاح خارجي Y.

هذا يقلل من نطاق السمات للبحث عن الكثير (لا يتعين علينا الاهتمام إذا كان للجدول الوسيط أي سمات أخرى) ، ويغطي أي عدد من الجداول مرتبطة معًا في علاقة MTM.

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

نصائح أخرى

إذا كان عليك أن تسأل ، يجب ألا تفعل ذلك. أنا لا أقول أن تكون قاسيًا ، لكن بيثون لديه بالفعل العديد من orms الممتازة التي تم اختبارها جيدًا واستخدامها على نطاق واسع. على سبيل المثال ، يدعم SqlalChemy autoload=True السمة عند تحديد الجداول التي تجعلها تقرأ تعريف الجدول - بما في ذلك جميع الأشياء التي تسأل عنها - مباشرة من قاعدة البيانات. لماذا إعادة اختراع العجلة عندما قام شخص آخر بالفعل بنسبة 99.9 ٪ من العمل؟

إجابتي هي اختيار Python orm (مثل SqlalChemy) وإضافة أي وظيفة "مفقودة" إلى ذلك بدلاً من البدء من الصفر. إذا تبين أنها فكرة جيدة ، فقم بإصدار تغييراتك مرة أخرى إلى المشروع الرئيسي حتى يتمكن الجميع من الاستفادة منها. إذا لم ينجح الأمر كما كنت تأمل ، على الأقل ستستخدم بالفعل ORM مشتركة يمكن للعديد من المبرمجين الآخرين مساعدتك في ذلك.

من الناحية النظرية ، فإن أي جدول ذو مفاتيح أجنبية متعددة هو في جوهرها علاقة عديدة ، مما يجعل سؤالك تافهة. أظن أن ما تحتاجه هو مجريات الأمور لموعد استخدام أنماط MTM (بدلاً من الفئات القياسية) في هدف نموذج. في هذه الحالة ، قم بفحص حدود الأنماط التي اخترتها.

على سبيل المثال ، يمكنك تصميم علاقة MTM بسيطة (جدولين ، لا توجد سمات) من خلال وجود قوائم كسمات على كلا النوعين من الكائنات. ومع ذلك ، لن تكون القوائم كافية إذا كان لديك بيانات إضافية حول العلاقة نفسها. لذلك فقط استدعاء هذا النمط للجداول مع عمودين ، سواء مع مفاتيح أجنبية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top