معرفات قاعدة البيانات الافتراضية؛قيم النظام والمستخدم

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

  •  08-06-2019
  •  | 
  •  

سؤال

كجزء من عملنا الحالي في قاعدة البيانات، فإننا نتطلع إلى التعامل مع عملية تحديث قواعد البيانات.

النقطة التي تم طرحها بشكل متكرر هي مسألة التعامل مع النظام مقابل النظام.قيم المستخدم؛في مشروعنا، يتم تخزين قيم المستخدم والنظام معًا.على سبيل المثال...

لدينا قائمة من القوالب.

1, <system template>

2, <system template>

3, <system template>

يتم تعيينها في التطبيق إلى التعداد (1، 2، 3)

ثم يأتي مستخدم ويضيف ...

4, <user template>

...و...

5, <user template>

ثم..نصدر ترقية..وإدراجها كجزء من البرامج النصية للترقية لدينا ...

<new id> [6], <new system template>

ثم!!...وجدنا خطأً في قالب النظام الجديد ونحتاج إلى تحديثه...المشكلة هي كيف؟لا يمكننا تحديث السجل باستخدام ID6 (لأننا ربما أدخلناه كـ 9، أو 999، لذلك يتعين علينا تحديد السجل باستخدام بعض الآليات الأخرى)

لذا، فقد توصلنا إلى حلين محتملين لهذا الأمر.

في الزاوية الحمراء (السرعة)....

نحن ببساطة نبدأ معرفات المستخدم عند 5000 (أو أي قيمة أخرى) ونختبر البيانات عند 10000 (أو أي قيمة أخرى).سيسمح لنا ذلك بإجراء تعديلات على قيم النظام واختبارها حتى الحد الأدنى لنطاق المعرف التالي.

المميزات...سريعة وسهلة التنفيذ،

العيب...يمكن أن تنفد القيم إذا لم نختار نطاقًا كبيرًا بما يكفي!

في الزاوية الزرقاء (قابلية التوسع)...

نقوم بتخزين بيانات النظام والمستخدم بشكل منفصل، واستخدام المعرفات الفريدة العمومية كمعرفات ودمج القائمتين باستخدام طريقة عرض.

الميزة...قابلة للتطوير..لا حدود لها فيما يتعلق بحجم قاعدة البيانات.

العيب..أكثر تعقيدا في التنفيذ.(العديد إلى طرق العرض القابلة للتحديث وما إلى ذلك)


أنا أؤيد الخيار الأول بشكل مباشر، لكني أبحث عن بعض الذخيرة لدعمي!

هل لدى أي شخص أي أفكار حول هذه الأساليب، أو حتى الأفكار التي فاتناها؟

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

المحلول

لم أواجه أية مشكلات مطلقًا (في الأداء أو التطوير - بما في ذلك اختبار TDD والوحدة) في استخدام المعرفات الفريدة العمومية (GUIDs) كمعرف لقواعد البيانات الخاصة بي، ولقد عملت على بعض منها الكبيرة جدًا.الق نظرة هنا, هنا و هنا إذا كنت تريد معرفة المزيد حول استخدام المعرفات الفريدة العمومية (GUIDs) (والمحتويات المحتملة لـ GOTCHAS) كمفاتيح أساسية - ولكن لا يمكنني أن أوصي بها بدرجة كافية نظرًا لأن نقل البيانات بأمان وتصبح مزامنة قاعدة البيانات سهلة مثل تنظيف أسنانك بالفرشاة في الصباح: -)

بالنسبة لسؤالك أعلاه، أود أن أوصي إما بعمود ثالث (إن أمكن) يشير إلى ما إذا كان القالب يعتمد على المستخدم أو النظام أم لا، أو يمكنك على الأقل إنشاء معرفات GUID لقوالب النظام أثناء إدراجها والاحتفاظ بقائمة من تلك الموجودة في متناول اليد، بحيث إذا كنت بحاجة إلى تحديث القالب، يمكنك فقط استهداف نفس المعرف الفريد العمومي (GUID) في قواعد بيانات DEV و/أو UAT و/أو PRODUCTION الخاصة بك دون خوف من الكتابة فوق القوالب الأخرى.سيكون العمود الثالث مفيدًا لتحديد جميع قوالب النظام أو المستخدم حسب الرغبة، دون الحاجة إلى فصلها إلى جدولين (وهذا مبالغة في IMHO).

أتمنى أن يساعد ذلك،

روب ج

نصائح أخرى

أوصي باستخدام الثاني مع التعديل الذي يقوم بتخزين قيم النظام والمستخدم في جدول واحد.GUID موثوق به تمامًا بهذه الطريقة.

فكرة اخرى:استخدم أي معرف يستند إلى نص (ليس GUID ضروريًا)، والذي تقدمه لقيم النظام ويتم إنشاؤه بواسطة سلسلة عشوائية أو سلسلة تعتمد على نوع من المنطق المخصص لقيم المستخدم.

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

+1 لمعرف Biri المستند إلى النص - حدد عمودًا يستند إلى النص "template_mnemonic" واجعله المفتاح الأساسي.ستكون هذه قيمة معروفة عندما تقوم بإدراجها بنفسك، وسيكون المطورون قد قرروا ذلك (أو قاموا بإنشائها تلقائيًا) وستتمكن دائمًا من الإشارة إلى القالب من خلال ذاكرته بغض النظر عن عدد القوالب المحددة من قبل المستخدم.كما يسمح للمستخدمين بالحصول على اصطلاح تسمية ذي معنى لقوالبهم.

ربما لم أفهم ذلك، ولكن ألا يمكنك استخدام المعرفات الفريدة العمومية (GUIDs) كمعرفات ولا يزال لديك بيانات المستخدم والنظام معًا؟ثم يمكنك الوصول إلى بيانات النظام عن طريق المعرفات الفريدة العمومية (غير القابلة للتغيير).

لا أعتقد أن GUID يجب أن يسبب أي مشكلة.

إذا كنت تريد تجنب ذلك، فاستخدم العلامة:

معرف كثافة العمليات

قالب أيا كان

وضع علامة على التعداد/int/bool

توضح العلامة ما إذا كانت القيمة الفعلية هي قيمة نظام أم مستخدم.

إذا كنت ترغب في تحديث قيمة النظام، فاطلب فقط قيم النظام مرتبة حسب المعرف، وسوف تظهر لك الترتيب الفعلي للإدراج (يجب أن يكون لديك Bigint أو شيء من هذا القبيل للمعرف للتأكد من أنه لم يمتلئ و ولا يعيد المعرفات المحذوفة إلى العمل).مع هذه القائمة x.السجل هو x.قيمة النظام المدرجة

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

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