سؤال

كيف يمكنني إنشاء مفتاح طول فريد من 12 حرفًا مع هذه السمات: الاسم ، اسم الأب ، اسم الأم ، تاريخ الميلاد ، مكان الميلاد.

شكرا لك مقدما :)

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

المحلول

حتى هذه الأعمدة ربما لا تكون كافية لتكون فريدة من نوعها ، وبما أن اسم الشخص يمكن أن يتغير (مع الزواج والاختيار وما إلى ذلك) ، فإنني عادةً ما لا أستخدم ذلك لإنشاء مفتاح فريد.

عادةً ما أستخدم بديلًا ، مثل رقم AUTONUMENT/HISETRY/SEPART أو UUID/GUID ، اعتمادًا على المتطلبات.

نصائح أخرى

السمة الرئيسية ، وفي الواقع فقط ، من المعرف الفريد هو أنه فريد (ضمن نطاق النظر ، هو أن الجدول أو المخطط أو العالمي). إن دمج أي قيم "العالم الحقيقي" في مثل هذا المعرف لا معنى له.

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

المعرف الفريد هو "مفتاح بديل" ، وهو مقبض مناسب يوفر لك من الاضطرار إلى تحديد جميع أعمدة مفتاحك الطبيعي في هذا الجدول. كيف تحصل على معرف فريد يعتمد على قاعدة البيانات. في Oracle ، على سبيل المثال ، يمكنك استخدام تسلسل بالاشتراك مع مشغل إدراج.

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

هذا ليس مفتاحًا تصفه ، ولكنه جزء قصير من البيانات المنظمة التي تريد استخدامها بدلاً من المفتاح. ربما بشكل أكبر:

-هل تريد أن تكون قادرًا على استرداد تلك السمات من مفتاح محدد من 12 حرفًا؟

أو

- هل ستسعدني فقط توليد مفتاح بالنظر إلى تلك السمات؟

إذا كنت بحاجة إلى نفس السمات لإنتاج نفس المفتاح ، فقم بتسلق جميع السمات إلى سلسلة ، احسب SHA1 التجزئة وتقليم أولا 96 بت.

هذا ليس مضمونًا لتكون فريدة من نوعها ، ولكن 50% سيكون احتمال تصادم التجزئة في 3.3E+14 القيم التي هي أكثر من كافية.

إذا لم تكن بحاجة إلى هذا ، فما عليك سوى استخدام بديل ID.

هم .. أي DBMS؟

على أي حال ، قم بتسلسل السلاسل المذكورة أعلاه بنتيجة وظيفة UUID MySQL ، وتنفيذ وظيفة CRC32 على النتيجة.

ثم ، قم بطرح أول 12 حرفًا.

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