Sequence و Auto Generated ID در DB2
Sequence و Auto Generated ID در DB2 روش های تولید اعداد به صورت اتوماتیک در یک یا جند ستون از جدول می باشند. در این مقاله به توضیح این دو امکان می پردازیم.
Sequence:
Sequence یک Object مجزا داخل DB2 است که وابستگی به هیچ Object دیگری ندارد. یعنی مستقلا اعداد ترتیبی تولید می کند که می تواند برای Objectهای مختلف قابل استفاده باشد.
ترتیب اعداد تولید شده می تواند صعودی یا نزولی باشد و فاصله بین اعداد تولید شده در اختیار DBA است. به عنوان مثال می توانید مشخص کنید که اعداد با فاصله ۵ تولید شوند (… و ۱۵، ۱۰، ۵).
نحوه ساخت Sequence:
CREATE SEQUENCE sequence_name
AS data_type
START WITH numeric_constant
INCREMENT BY numeric_constant
(NO) MINVALUE numeric_constant
(NO) MAXVALUE numeric_constant
(NO) CYCLE
(NO) CACHE integer_constant
(NO) ORDER
محدوده اعداد تولید شده:
در هنگام ساختن یک Sequence می توانید بازه ی اعداد تولید شده را با اختصاص نوع خاصی Data Type تعیین نمایید.
به عنوان مثال داده های INT محدوده ی مشخصی از اعداد را پوشش می دهد، پس ماکزیمم بازه ی تولید شده انتهای محدوده Sequence می باشد.
جهت مطالعه انواع Data Type اینجا کلیک کنید.
شما می توانید جهت تعیین بازه اعداد تولیدی Min value و Max Value مشخص نمایید. در این صورت Sequence فقط در بازه ی تعیین شده می تواند اعداد تولید کند.
Cycle در Sequence:
اگر در هنگام ساخت یک Sequence عبارت کلیدی Cycle را بنویسید، هنگامی که اعداد به انتهای بازه می رسند، دوباره از ابتدای بازه ساخت اعداد شروع می شود و اگر عبارت No Cycle را بنویسید، بعد از تولید آخرین عدد بازه، دیگر هیچ عددی تولید نخواهد شد و Object دیگر هیچ عملی نمی تواند انجام دهد.
اگر Cycle برقرار باشد و شما داده های قبلی را آرشیو نکرده باشید، احتمال برخوردن به داده ی Duplicate بسیار زیاد می باشد. اگر این ستون به عنوان کلید اولیه (Primary Key) یا Unique Index تعیین شده باشد، در این زمان خطا اتفاق می افتد و داده های جدید نمی توانند در جدول Insert شوند.
اگر عبارت No Cycle را ذکر کرده باشید، بعد از رسیدن به انتهای بازه، هیچ رکورد جدیدی نمی تواند Insert شود و جدول شما متوقف خواهد شد.
پس انتخاب Cycle یا No Cycle بسیار به سیستم و نوع داده های جدول مرتبط می باشد و نیاز به دقت زیاد دارد.
جهت رفع خطاهای ناشی از Cycle چه باید کرد؟
- اگر Sequence را به صورت No Cycle می سازید، باید بازه را به قدری بزرگ انتخاب کنید که مطمئن باشید تا زمانی که می خواهید داده ها را آرشیو کنید، به انتهای بازه نمی رسد و می تواند عدد تولید کند.
- اگر Sequence را از نوع Cycle انتخاب می کنید، باید حواستان باشد که ID هایی که قبلا تولید شدند را در جایی آرشیو کنید تا با خطای Duplicate Value مواجه نشوید.
- اگر Sequence از نوع Cycle است و داده ی Duplicate تولید می شود، می توانید یا کلید (Key) دیگری در نظر بگیرید و یا پارامتر دیگری (به عنوان مثال تاریخ و ساعت) در کنارش وجود داشته باشد که بتواند با ستون دارای Sequence یک کلید Unique تولید کند.
Cache / No Cache:
مشخص کننده ی این است که چه میزان از اعداد می توانند در حافظه از قبل ایجاد شوند که تولید اعداد با سرعت بیشتری صورت گیرد.
به عنوان مثال اگر Cache 15 در نظر گرفته شود، به این معنی است که ۱۵ عدد در حافظه آماده ی تولید می باشند. پیشفرض سیستم جهت Cache، عدد ۲۰ می باشد که می توانید این عدد را کم و یا زیاد کنید.
استفاده از Sequence:
- به دلیل اینکه Sequence یک Object جدا از جدول می باشد، باید در جدول صدا شود تا بتواند اعداد تولید نماید.
- برای انجام این کار، باید در جلوی ستون مورد نظر کلمه کلیدی NEXT VALUE FOR sequence_name نوشته شود.
- از آنجایی که Sequence یک Object مستقل است و به هیچ Object دیگری وابسته نیست، در زمان صدا شدن داخل یک جدول، ادامه ی اعداد تولید شده از زمان ساخته شدن را تولید می کند. به این معنی که اگر Sequence در جدولی تا عدد ۱۱۰ عدد تولید کرده باشد و سپس در جدول دیگری خوانده شود، در جدول جدید عدد ۱۱۱ را تولید خواهد کرد.
- جهت تولید دوباره اعداد از ابتدای بازه، باید از دستور Alter Sequence و عبارت کلیدی Restart استفاده کرد.
Auto Generated ID:
Auto Generated ID یا Identity از لحاظ ساختاری شبیه به Sequence است اما با این تفاوت که وابسته به یک فیلد عددی جدول است.
اعدادی که با Auto Generated ID تولید می شوند برای ستون و جدول دیگر قابل استفاده نیستند و بر عکس Sequence، وابسته به ماهیت یک جدول می باشند.
نحوه ساختن Identity:
CREATE TABLE tb01
(
ID integer not null GENERATED ALWAYS AS IDENTITY
(START WITH 1
INCREMENT BY 1)
);
انواع ستون Identity:
- Generated Always
- Generated by Default
Generated Always:
زمانی که ستون Identity از نوع Generated Always باشد، به شما این اجازه را نمی دهد که به صورت دستی عددی را در این ستون اضافه کنید.
زمانی که از یک جدول که دارای یک ستون Generated Always می باشد Unload گرفته می شود، آن را در یک جدول Generated Always نمی توانیم load کنیم، مگر اینکه ستون ID را حذف کنیم. به طور کلی در داخل یک ستون Generated Always نمیتوانیم هیچ گونه داده دستی وارد کنیم.
Generated by Default:
ستون های Generated by Default به شما این اجازه را می دهند که در صورت نیاز به صورت دستی داده هایی را وارد جدول کنید و دوباره شماره دهی را ادامه دهید. بنابراین شما می توانید از جدول های مختلف رکوردهایی را در این جداول load کنید.
خلاصه:
Sequence و Auto Generator ID از لحاظ ساختاری بسیار شبیه به هم می باشند، با این تفاوت که Sequence یک Object مستقل می باشد و می تواند برای Object ها و ستون های مختلفی استفاده شود، اما Auto Generator ID وابسته به یک ستون است و فقط جهت همان ستون می تواند مورد استفاده قرار بگیرد.
محتوای این مقاله بر گرفته از مطالب ارائه شده در کلاس حضوری DB2 fundamental Skills می باشد.
جهت مشاهده اطلاعات دوره حضوری DB2 fundamental Skills ترم تابستان اینجا کلیک کنید.
جهت مطالعه ببشتر در خصوص Sequence و Auto Generated ID به زبان انگلیسی می توانید از منابع زیر استفاده کنید: