ما مخطط قاعدة البيانات التي يمكنني استخدامها لحفظ أنواع مختلفة من الفواتير البيانات ؟

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

سؤال

لدي النظام الذي يخلق النظام و أن النظام يمكن أن توصف حساب أرسلت نقدا عند التسليم (COD) ، أو المحملة على بطاقة الائتمان.لقد خلق الجداول التالية:

أوامر
order_id
billingoption_id

BILLINGOPTIONS
billingoption_id

أنا متأكد من كيفية الجدول التالي يجب أن تكون مبنية على بيانات الفواتير.يجب بناء جدول منفصل لكل نوع من أنواع الفواتير الخيار (أي.سمك القد, بطاقات الائتمان ، دار الحساب)?ثم أود أن يكون آخر مفتاح خارجي عمود في جدول "الطلبات" التي من شأنها أن تشير إلى تسجيل الفواتير البيانات ؟

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

المحلول

يمكنك القيام بذلك إما عن طريق:فكرة billingoptions الجدول يحتوي على الحقول التي تشمل جميع أنواع مع بالقيم الخالية في المجالات التي لا تنطبق على نوع معين أو مجموعة من الطفل الجداول "نجوم قبالة" من أحد الوالدين billingoptions الجدول.على حد سواء لديها مزايا وعيوب.

كبيرة التزمير الجدول ،

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

عن طفل صغير الجداول ،

  • أنه من الجيد أن البيانات يتم تقسيم ويعكس البرنامج الخاص بك بنية الكائن عن كثب.
  • انها لطيفة التي يمكنك إضافة خيارات الدفع أو تعديل القائم منها دون القلق على التأثير على الآخرين.
  • علاقات صريحة جدا.يمكنك عن طريق الخطأ ربط ودائع أخرى ودائع منذ الأجنبية الرئيسية التي تتطلب أن تكون مرتبطة مع الموافقة.
  • ولكن كنت في نهاية المطاف إدخال الكثير من الجداول في التصميم ، والتي تتطلب الكثير من ينضم, يمكن أن يكون الألم للتنقل و ليست فعالة عندما يتعلق الأمر إدراج والتحديثات.

في العمل, لقد انتهى الأمر الذهاب مع طفل صغير الجداول.يبدو شيئا من هذا القبيل:

Table Orders:
--> OrderId PK
--> (Lots of Other Fields)

Table Payments:
--> PaymentId PK
--> OrderId (FK) [There may be more than one payment per order]
--> PaymentType [Restricted field contains values like 
       'PAYPAL' or 'CREDIT', you use this to know which 
       baby table to look up that can contain additional 
       information]

Table PaymentsPayPal:
--> PaymentPayPalId PK
--> PaymentId FK points to Table Payments
--> TransactionNo
--> (Other PayPal specific fields)

Table PaymentsCheck:
--> PaymentCheckId PK
--> PaymentId FK points to Table Payments
--> RoutingNo
--> (Other e-check specific fields)

+ other tables for remaining payment types....

كل من دفع حصة ثلاثة أنواع المعاملات ذات الصلة الجداول:

Table PaymentApprovals:
--> PaymentApprovalId PK
--> PaymentId FK points to Table Payments
--> Status [Some flag meaning 'Succeeded', 'Failed', 'Reversed', etc]
--> ProcessorMessage [Something the service sent back, like '(M) CVV2 Matched']
--> Amount
--> (Other administrative fields)

Table PaymentDeposits:
--> PaymentDepositId PK
--> PaymentApprovalId FK points to Table PaymentApprovals
--> Status
--> ProcessorMessage
--> Amount
--> (Other administrative fields)

Table PaymentRefunds:
--> PaymentRefundId PK
--> PaymentDepositId FK points to Table PaymentDeposits
--> Status
--> ProcessorMessage
--> Amount
--> (Other administrative fields)

جميع وسائل الدفع (بطاقات الائتمان, باي بال, Google Checkout, تحقق, النقدية, المتجر, و من أجل المال) هي المستخرجة لتناسب هذه الموافقة --> الودائع --> استرداد استعارة ، واجهة المستخدم مكالمات نفس الأساليب على IPayment و IPaymentProcessor واجهات مع تطبيقات مختلفة (CybersourcePaymentProcessor, PayPalPaymentProcessor, ، وما إلى ذلك).التجريد عملت بشكل جيد على مدى العام الماضي ونصف عبر هذه الأساليب المتباينة ، على الرغم من أن في بعض الأحيان واجهة المستخدم الرسومية سيتم عرض مختلفة إسهاب إلى المستخدم (على سبيل المثال ، فإنه سوف يقول "الإذن" و "تهمة" بدلا من "الموافقة" و "وديعة" للمدفوعات بطاقات الائتمان و شاشة الدخول النقدية يؤدي الموافقة على/الودائع خطوة في ضربة واحدة.)

نأمل أن يجعل الشعور.يبدو أنك لا فعلا تخزين معلومات الدفع ، ولكن من المفيد أن نفكر فيها هذه الأشياء يمكن في نهاية المطاف.

نصائح أخرى

التركيز على الأشياء.الأشياء الفعلية.في محاولة لوصف الأشياء ببساطة, مباشرة, وفي اللغة الطبيعية الأولى.

ثم ، عندما كنت تسأل عن تصميم التوجيه ، يمكنك توفير التعاريف.في بعض الحالات, فعل الكتابة التعاريف تجعل التصميم كريستاليزي.

أوامر هي الأشياء.ما هي سمات النظام ؟ العملاء, المنتج, خيارات الدفع/الفواتير.

خيارات الفوترة هي (تقريبا) الأشياء.يمكنك ، على ما يبدو ، تحديد والتعرف عليها.(أنا لست متأكدا من أنني يمكن أن.من سؤالك يبدو أن كنت قد تكون قادرة على.ولكن دون جملة واحدة موجزة ، أنا لست متأكدا ما يحدث مع مليار الخيارات.

ما هو "الفواتير البيانات؟" ما هو نوع من الشيء هذا ؟ ما سمات (أو خصائص) أنها لا تملك ؟

كيف "بيانات الفواتير" تتصل النظام ؟ كيف تتصل الفواتير الخيار ؟

لا تتردد في تحديث السؤال مع التعاريف لكل شيء.

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