بررسی SQL DOAMIN در Oracle 23c

یکی از ویژگی‌های جدید Oracle Database 23c دامنه‌ها – یا SQL Domains یا Application Domains یا Usage Domains است.به طور خلاصه هر نامی که وجود دارد – تاکید بر این است که Domains برای کمک به توسعه برنامه های کاربردی – تضمین کیفیت داده ها و سازگاری داده ها هستند.یک schema ممکن است جداول زیادی با ستون‌هایی داشته باشد که نشانی‌های ایمیل را در خود جای داده است، مانند ایمیل‌های صورت‌حساب، ایمیل‌های فاکتور و ایمیل‌های تماس با مشتری. چالش این بود که چگونه می توان از سازگاری چنین ستون هایی در کل برنامه اطمینان حاصل کرد.بررسی قابلیت های oracle23اجازه دهید برخی از نکات اصلی مربوط به دامنه پایگاه داده Oracle 23 را بررسی کنیم.Domains راهی برای ارتقای یک نقطه تعریف (SPOD) هستند که به ما یکپارچگی در سراسر یک برنامه می دهند.ما خصوصیات و محدودیت های مرتبط با یک ستون را یک بار تعریف می کنیم و از آن تعریف در کل برنامه خود استفاده می کنیم.با Domains SQL، می‌توانیم به طور متمرکز نحوه استفاده از داده‌ها را تعریف کنیم. آنها اطمینان از اینکه مقادیر به طور مداوم در بین برنامه ها مدیریت می شوند را آسان تر می کنند و در نتیجه کیفیت داده ها را بهبود می بخشند.دامنه‌ها ما را قادر می‌سازند مجموعه‌ای از قوانین مشترک را اعمال کنیم – مانند کارت اعتباری باید ۱۲ عدد داشته باشد – یا با ۳ شروع شود – و نباید خط تیره یا نویسه خاصی وجود داشته باشد.Domains SQL یک Data Dictionary Object است که به یک Schema تعلق دارد و مجموعه‌ای از ویژگی‌ها و محدودیت‌های اختیاری را برای مقادیر رایج، مانند شماره کارت اعتباری، پلاک‌های ثبت نام یا آدرس‌های ایمیل، محصور می‌کند.Domains SQL را می توان به جای یک نوع داده استفاده کرد – یا از یک Domain به همراه نوع داده برای اعمال قوانین دیگری مانند ترتیب مرتب سازی یا حساسیت به حروف بزرگ استفاده کرد.۳ نوع Domains مختلف وجود دارد: Domains تک ستونی، چند ستونی و دامنه های انعطاف پذیر. علاوه بر این، Domains داخلی نیز برای استفاده در دسترس هستند.به ستون LAST_UPDATE_DATE در پایگاه داده Oracle 19c توجه کنید. حتی اگر ستون با مقدار SYSDATE به روز می شود، به دلیل اینکه نوع داده در هر یک از ۳ جدول (DATE، TIMESTAMP، TIMESTAMP WITH TIME ZONE) متفاوت است، مقادیر ستون متفاوت است.SQL*Plus: Release 19.0.0.0.0 – Production on Mon Oct 23 23:14:42 2023Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle. All rights reserved.Last Successful login time: Tue Oct 17 2023 21:18:33 -04:00Connected to:Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – ProductionVersion 19.3.0.0.0SQL> create table mydate_1۲ (last_update_date date);Table created.SQL> create table mydate_2۲ (last_update_date timestamp);Table created.SQL> create table mydate_3(last_update_date TIMESTAMP WITH TIME ZONE);Table created.SQL> insert into mydate_1۲ values۳ (sysdate);۱ row created.SQL> insert into mydate_2۲ values۳ (sysdate);۱ row created.SQL> insert into mydate_3۲ values۳ (sysdate);۱ row created.SQL> commit;Commit complete.SQL> select * from mydate_1;LAST_UPDATE_DATE—————–۲۳-OCT-23SQL> select * from mydate_2;LAST_UPDATE_DATE—————————————————————————۲۳-OCT-23 11.24.34.000000 PMSQL> select * from mydate_3;LAST_UPDATE_DATE—————————————————————————۲۳-OCT-23 11.24.44.000000 PM -04:00اجازه دهید مثالی ببینیم که چگونه در Oracle Database 23c، یک Domain می‌تواند ایجاد شود و سپس به ستون‌های جدول اختصاص داده شود – برنامه‌ها و توسعه‌دهندگان می‌توانند این مقادیر را ذخیره کنند. این باعث می شود اطمینان حاصل شود که آنها به طور مداوم در جداول و برنامه ها مدیریت می شوند.دامنه INSERT_TIMESTAMP را ایجاد کنید و دامنه را به ستون LAST_UPDATE_DATE اختصاص دهید.توجه: ما یک نوع داده را به ستون اختصاص نمی دهیم – اما دامنه را اختصاص می دهیم!ستون LAST_UPDATE_DATE هم محدودیت NOT NULL و هم نوع داده TIMESTAMP را که به دامنه اختصاص داده شده است به ارث می برد.[oracle@db23c ~]$ sqlplus demo/Oracle_4U@freepdb1SQL*Plus: Release 23.0.0.0.0 – Production on Wed Oct 25 23:22:16 2023Version 23.3.0.23.09Copyright (c) 1982, 2023, Oracle. All rights reserved.Last Successful login time: Wed Oct 25 2023 23:21:36 -04:00Connected to:Oracle Database 23c Free Release 23.0.0.0.0 – Develop, Learn, and Run for FreeVersion 23.3.0.23.09SQL> create domain insert_timestamp astimestampdefault systimestampnot null;Domain created.SQL> create table mydate_1(last_update_date domain insert_timestamp);Table created.SQL> create table mydate_2(last_update_date domain insert_timestamp);Table created.SQL> create table mydate_3(last_update_date domain insert_timestamp);Table created.SQL> desc mydate_1Name Null? Type—————————————– ——– —————————-LAST_UPDATE_DATE NOT NULL TIMESTAMP(6) DEMO.INSERT_TIM ESTAMPارتباط با ماجهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشدسطرها در ۳ جدول مختلف با ستون LAST_UPDATE_DATE درج می شوند.توجه داشته باشید که داده های ستونی که از Domain استفاده می کند در هر ۳ جدول یکسان است.[oracle@db23c ~]$ sqlplus demo/Oracle_4U@freepdb1SQL*Plus: Release 23.0.0.0.0 – Production on Wed Oct 25 23:26:49 2023Version 23.3.0.23.09Copyright (c) 1982, 2023, Oracle. All rights reserved.Last Successful login time: Wed Oct 25 2023 23:22:16 -04:00Connected to:Oracle Database 23c Free Release 23.0.0.0.0 – Develop, Learn, and Run for FreeVersion 23.3.0.23.09SQL> insert into mydate_1۲ values۳ (sysdate);۱ row created.SQL> insert into mydate_2۲ values۳ (sysdate);۱ row created.SQL> insert into mydate_3۲ values۳ (sysdate);۱ row created.SQL> commit;Commit complete.SQL> select * from mydate_1;LAST_UPDATE_DATE—————————————————————————۲۵-OCT-23 11.30.45.000000 PMSQL> select * from mydate_2 ;LAST_UPDATE_DATE—————————————————————————۲۵-OCT-23 11.31.43.000000 PMSQL> select * from mydate_3 ;LAST_UPDATE_DATE—————————————————————————۲۵-OCT-23 11.32.08.000000 PMبه برخی از data dictionary views توجه کنید که می توانند برای دریافت اطلاعات بیشتر در مورد Domain های مورد استفاده در پایگاه داده استفاده شوند.SQL> select domain_name(last_update_date) from mydate_1 where rownum =1;DOMAIN_NAME(LAST_UPDATE_DATE)—————————————-DEMO.INSERT_TIMESTAMPSQL> col name format a20SQL> set long 50000SQL> select name, SEARCH_CONDITION from all_domain_constraints where domain_name=’INSERT_TIMESTAMP’;NAME——————–SEARCH_CONDITION——————————————————————————–SYS_DOMAIN_C0023“INSERT_TIMESTAMP” IS NOT NULLSQL> select object_name from user_objects where object_type=’DOMAIN’;OBJECT_NAME——————————————————————————–INSERT_TIMESTAMPSQL> select column_name, domain_owner, domain_name from user_tab_columns where table_name = ‘MYDATE_1’;COLUMN_NAME DOMAIN_OWNER DOMAIN_NAME——————– ——————– ——————–LAST_UPDATE_DATE DEMO INSERT_TIMESTAMPSQL> select name,cols,builtin from user_domains;NAME COLS BUILTIN—————————————- ———- ———–INSERT_TIMESTAMP ۱ FALSE