SAP برنامج HANA التعليمي: إنشاء تسلسل

⚡ ملخص ذكي

إنشاء تسلسل في SAP تُعرّف HANA كائن قاعدة بيانات يقوم بإنشاء قائمة متزايدة من القيم الرقمية تلقائيًا. تتحكم المعلمات في قيمة البداية، والزيادة، والحدود، والتكرار، وسلوك التخزين المؤقت للمولد.

  • 🔢 التعريف الأساسي: يقوم التسلسل بتوليد الأرقام وفقًا لمجموعة القواعد المحددة في مواصفاته، سواء كانت تصاعدية أو تنازلية.
  • 🔗 لا يوجد ربط للجدول: التسلسلات عبارة عن كائنات مستقلة يستخدمها التطبيق بدلاً من أن تكون مرتبطة بأي جدول.
  • 📍 قيمتان: تقوم الدالة CURRVAL بإرجاع القيمة الحالية، بينما تقوم الدالة NEXTVAL بتحريك التسلسل للأمام وإرجاع القيمة الجديدة.
  • 🎚️ المعلمات الرئيسية: تُستخدم START WITH و INCREMENT BY و MAXVALUE و MINVALUE و CYCLE و CACHE لتشكيل المخرجات.
  • ♻️ ركوب الدراجات: يعيد CYCLE الترقيم عند الحد الأقصى؛ أما NO CYCLE فهو الوضع الافتراضي ويؤدي إلى ظهور خطأ بدلاً من ذلك.
  • ⚡ التخزين المؤقت: يحجز CACHE مجموعة من الأرقام لكل عقدة لتحسين السرعة؛ NO CACHE هو الوضع الافتراضي.
  • 🔄 خيار إعادة الضبط: يقوم الأمر RESET BY بتشغيل استعلام فرعي عند إعادة تشغيل قاعدة البيانات ويستأنف من القيمة التي يُرجعها.

إنشاء تسلسل في SAP HANA

ما هو التسلسل؟

التسلسل هو كائن قاعدة بيانات يقوم تلقائيًا بإنشاء قائمة متزايدة من القيم الرقمية وفقًا للقاعدة كما هو محدد في مواصفات التسلسل.

على سبيل المثال، لإدراج رقم الموظف تلقائيا في العمود (EMPLOYEE_NO) من الجدول، عند إدراج سجل جديد في الجدول، فإننا نستخدم التسلسل.

يتم إنشاء قيم التسلسل بترتيب تصاعدي أو تنازلي.

لا ترتبط التسلسلات بالجداول؛ يتم استخدامها من قبل التطبيق. هناك قيمتان في التسلسل -

  • CURRVAL – توفير القيمة الحالية للتسلسل.
  • NEXTVAL - توفير القيمة التالية للتسلسل.

بناء الجملة

CREATE SEQUENCE <sequence_name> [<sequence_parameter_list>] [RESET BY <subquery>]

عناصر بناء الجملة

عناصر الوصف
وهو اسم التسلسل.
[ ] يحدد واحدًا أو أكثر من معلمات التسلسل.
أبدا ب ويصف قيمة تسلسل البداية.
زيادة بواسطة يحدد هذا القيمة المراد زيادتها من القيمة الأخيرة المخصصة لكل مرة يتم فيها إنشاء قيمة تسلسل جديدة. الافتراضي هو 1.
قيمة الحد الأقصى يحدد هذا القيمة القصوى التي يمكن توليدها بواسطة التسلسل. يمكن أن تكون القيمة بين -4611686018427387903 و 4611686018427387902.
لا يوجد حد أقصى عند تحديد NO MAXVALUE، بالنسبة للتسلسل التصاعدي، ستكون القيمة القصوى 4611686018427387903 والقيمة الدنيا للتسلسل التنازلي ستكون -1.
قيمة ضئيلة / لا يوجد قيمة تذكر يحدد هذا الحد الأدنى للقيمة التي يمكن أن ينتجها التسلسل. يمكن أن تتراوح القيمة بين -4611686018427387904 و4611686018427387902. عند استخدام خيار NO MINVALUE، تكون القيمة الدنيا لتسلسل تصاعدي هي 1.
CYCLE يحدد توجيه CYCLE أنه سيتم إعادة تشغيل رقم التسلسل بعد أن يصل إلى قيمته القصوى أو الدنيا.
لا دورة الخيار الافتراضي. يحدد توجيه NO CYCLE أن رقم التسلسل لن يُعاد تشغيله بعد أن يصل إلى قيمته القصوى أو الدنيا.
مخبأ يحدد حجم ذاكرة التخزين المؤقت نطاق أرقام التسلسل التي سيتم تخزينها مؤقتًا في العقدة. يجب أن يكون عددًا صحيحًا غير مُوقّع.
لا يوجد ذاكرة تخزين مؤقت الخيار الافتراضي. يحدد توجيه NO CACHE أن رقم التسلسل لن يتم تخزينه مؤقتًا في العقدة.
إعادة تعيين من قبل وهو يحدد أنه أثناء إعادة تشغيل قاعدة البيانات، تقوم قاعدة البيانات تلقائيًا بتنفيذ الأمر ويتم إعادة تشغيل قيمة التسلسل بالقيمة التي تم إرجاعها.

مثال -

سوف نقوم بإنشاء تسلسل باسم DHK_SCHEMA.EMP_NO، والذي سيؤدي إلى إنشاء قيمة متزايدة للتسلسل بمقدار +1 في كل مرة، عند استخدام التسلسل.

السيناريو التسلسلي –

CREATE SEQUENCE DHK_SCHEMA.EMP_NO START WITH 100 INCREMENT BY 1;

سنستخدم هنا "تسلسل" الكائن في المثال أدناه لزيادة قيمة رقم الموظف بمقدار 1+ في كل مرة يتم فيها تنفيذ استعلام التحديد. في الاستعلام، يمكن استخدام "nextval" لإنشاء الرقم التسلسلي أو نفس نوع المتطلبات.

استخدام التسلسل –

SELECT DHK_SCHEMA.EMP_NO.nextval FROM DUMMY;

الناتج – 100، 101، 102 … وهكذا لكل تنفيذ لاستعلام التحديد أعلاه.

كيفية استخدام التسلسل في جدول

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

1) استدعِ NEXTVAL مباشرةً في INSERT. النهج الأكثر وضوحاً. يحدد التطبيق متى يتم استهلاك الرقم.

CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE (
  EMPLOYEE_NO INTEGER NOT NULL,
  EMP_NAME    NVARCHAR(100),
  PRIMARY KEY (EMPLOYEE_NO)
);

INSERT INTO DHK_SCHEMA.EMPLOYEE
  VALUES (DHK_SCHEMA.EMP_NO.NEXTVAL, 'Anita Sharma');

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

CREATE COLUMN TABLE DHK_SCHEMA.EMPLOYEE2 (
  EMPLOYEE_NO INTEGER DEFAULT DHK_SCHEMA.EMP_NO.NEXTVAL,
  EMP_NAME    NVARCHAR(100)
);

INSERT INTO DHK_SCHEMA.EMPLOYEE2 (EMP_NAME) VALUES ('Ravi Kumar');

3) اقرأ القيمة الصادرة للتو. تقوم الدالة CURRVAL بإرجاع آخر رقم تم استخدامه في هذه الجلسة، وهو ما يربط صفًا فرعيًا بالصف الأصل الذي تم إدراجه للتو.

SELECT DHK_SCHEMA.EMP_NO.CURRVAL FROM DUMMY;

⚠️ تحذير: تفشل الدالة CURRVAL مع ظهور خطأ حتى يتم استدعاء الدالة NEXTVAL مرة واحدة على الأقل في الجلسة الحالية. وهي تُبلغ عن القيمة المُصدرة لهذه الجلسة، وليس القيمة القصوى العامة، لذا قد تحتوي جلستان على قيم حالية مختلفة في نفس اللحظة.

مقارنة بين عمود التسلسل وعمود الهوية

SAP توفر HANA أيضًا عمودًا للهوية، والذي يُولّد أرقامًا دون الحاجة إلى كائن منفصل. يحلّ كلٌّ منهما نفس المشكلة بطريقة مختلفة.

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

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

إدارة التسلسلات: التعديل، والحذف، والفجوات

نادراً ما تبقى سلسلة المهام على حالها عند إنشائها. ثلاث مهام صيانة تظهر بشكل متكرر.

تغيير السلوك. يقوم الأمر ALTER SEQUENCE بتعديل الزيادة أو الحدود أو التكرار لتسلسل موجود دون حذف أي بيانات.ping إعادة التشغيل مع إعادة ضبط العداد، وهي الخطوة المعتادة بعد إعادة تحميل بيانات الاختبار.

ALTER SEQUENCE DHK_SCHEMA.EMP_NO RESTART WITH 1000;
ALTER SEQUENCE DHK_SCHEMA.EMP_NO INCREMENT BY 10;
DROP SEQUENCE DHK_SCHEMA.EMP_NO;

فهم الثغرات. لا يُضمن أن تكون أرقام التسلسل متجاورة، وهذا يُفاجئ من يتوقعون سجل تدقيق متصل. وتظهر الفجوات لثلاثة أسباب:

  • تم التراجع عن المعاملات. لا يُعدّ NEXTVAL عمليةً معاملية. فالرقم الذي تم استهلاكه بواسطة عملية إدخال ثم تم التراجع عنها لا يُعاد إصداره أبدًا.
  • التخزين المؤقت. باستخدام CACHE 100، تحجز العقدة مئة قيمة دفعة واحدة. وتؤدي إعادة التشغيل إلى تجاهل أي شيء متبقٍ غير مستخدم في تلك الكتلة.
  • جلسات متزامنة. تقوم جلستان بإدخال الأرقام بشكل متزامن، بحيث لا ترى أي منهما تشغيلًا متواصلًا.

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

البحث عما هو موجود. يعرض عرض النظام SEQUENCES كل تسلسل مع قيمته الحالية، وهي أسرع طريقة لتدقيق المخطط. يتم تغطية بناء الجملة ذي الصلة في SAP هانا SQL وتعريفات الأعمدة في SAP أنواع بيانات HANA.

الأسئلة الشائعة

تؤدي المعاملات المُلغاة، والكتل المخزنة مؤقتًا التي تُفقد عند إعادة التشغيل، والجلسات المتزامنة، إلى حدوث فجوات. يضمن التسلسل التفرد، وليس سلسلة متصلة من القيم.

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

نعم. يُظهر تحليل معدل نقل البيانات عدد القيم التي تستهلكها العقدة بين عمليات إعادة التشغيل، مما يوازن بين زيادة سرعة التخزين المؤقت وحجم الفجوات التي يخلقها.

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

لأن الدالة NEXTVAL لم تُستدعَ في الجلسة الحالية. تُبلغ الدالة CURRVAL عن القيمة المُصدرة لهذه الجلسة، لذا ليس لديها ما تُبلغه حتى يتم أخذ قيمة.

تلخيص هذه التدوينة بـ: