مسعود سلطانی راد
مسعود سلطانی راد
خواندن ۵ دقیقه·۱ سال پیش

بررسی 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 2023

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Last Successful login time: Tue Oct 17 2023 21:18:33 -04:00

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 – Production

Version 19.3.0.0.0

SQL> 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-23

SQL> select * from  mydate_2;

LAST_UPDATE_DATE

—————————————————————————

۲۳-OCT-23 11.24.34.000000 PM

SQL> 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@freepdb1

SQL*Plus: Release 23.0.0.0.0 – Production on Wed Oct 25 23:22:16 2023

Version 23.3.0.23.09

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Last Successful login time: Wed Oct 25 2023 23:21:36 -04:00

Connected to:

Oracle Database 23c Free Release 23.0.0.0.0 – Develop, Learn, and Run for Free

Version 23.3.0.23.09

SQL> create domain insert_timestamp as

timestamp

default systimestamp

not 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_1

Name                                      Null?    Type

—————————————– ——– —————————-

LAST_UPDATE_DATE                          NOT NULL TIMESTAMP(6) DEMO.INSERT_TIM ESTAMP

ارتباط با ما

جهت دریافت خدمات مشاوره، آموزش و نگهداری پایگاه داده اوراکل با ما در ارتباط باشد

سطرها در ۳ جدول مختلف با ستون LAST_UPDATE_DATE درج می شوند.

توجه داشته باشید که داده های ستونی که از Domain استفاده می کند در هر ۳ جدول یکسان است.

[oracle@db23c ~]$ sqlplus demo/Oracle_4U@freepdb1

SQL*Plus: Release 23.0.0.0.0 – Production on Wed Oct 25 23:26:49 2023

Version 23.3.0.23.09

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Last Successful login time: Wed Oct 25 2023 23:22:16 -04:00

Connected to:

Oracle Database 23c Free Release 23.0.0.0.0 – Develop, Learn, and Run for Free

Version 23.3.0.23.09

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-23 11.30.45.000000 PM

SQL> select * from  mydate_2 ;

LAST_UPDATE_DATE

—————————————————————————

۲۵-OCT-23 11.31.43.000000 PM

SQL> 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_TIMESTAMP

SQL> col name format a20

SQL> set long 50000

SQL> select name, SEARCH_CONDITION from all_domain_constraints where domain_name=’INSERT_TIMESTAMP’;

NAME

——————–

SEARCH_CONDITION

——————————————————————————–

SYS_DOMAIN_C0023

“INSERT_TIMESTAMP” IS NOT NULL

SQL> select object_name from user_objects where object_type=’DOMAIN’;

OBJECT_NAME

——————————————————————————–

INSERT_TIMESTAMP

SQL> 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_TIMESTAMP

SQL> select name,cols,builtin from user_domains;

NAME                                           COLS BUILTIN

—————————————- ———- ———–

INSERT_TIMESTAMP                                  ۱ FALSE

اوراکل
چند سالی هست در حوزه داده ها ( نگهداری و تحلیل آنها) فعالیت دارم و همیشه سعی کردم آموخته هایم رو به اشتراک بگذارم soltanirad@artarad.ir www.artarad.ir
شاید از این پست‌ها خوشتان بیاید