قابلیت JSON Schema در اوراکل 23c

یکی دیگر از قابلیتهای جدید اوراکل در نسخه 23cء، JSON Schema است از طریق این قابلیت می توانیم برای هر کدام از keyهای JSON، دیتاتایپی را تنظیم کنیم و محدودیتهای دیگر نظیر minLength و maxLength را برای هر کدام از کلیدها اعمال کنیم. این کار با اضافه کردن عبارت VALIDATE به متن دستور create table قابل انجام است.

ساختار جدول زیر را در نظر بگیرید! در این جدول صرفا JSON Documentای را می توانیم در ستون ettelaat ذخیره کنیم که حداقل شامل فیلدهای  First_Name و Last_Name باشند(“required”: [“First_Name”, “Last_Name”]) و این دو فیلد باید از نوع string هم باشند همچنین در صورت وجود فیلد Age در داکیومنت JSON، این فیلد باید از نوع number باشد.

SQL> CREATE TABLE TB_Person (
  2    id          NUMBER PRIMARY KEY,
  3    ettelaat json VALIDATE '{
  4      "type": "object",
  5      "properties": {
  6        "First_Name": {
  7          "type": "string",
  8          "minLength": 5,
  9          "maxLength": 20
 10        },
 11        "Last_Name": {
 12          "type": "string",
 13          "minimum": 5,
 14          "maximum": 30
 15        },
 16  	  "Age": {
 17          "type": "number"
 18        }
 19      },
 20      "required": ["First_Name", "Last_Name"]
 21    }'
 22    );

Table created

اوراکل این قابلیت را با کمک constraint پیاده سازی می کند و برای جدول فوق، constraint زیر ایجاد می شود:

alter table TB_PERSON
  add check ("ETTELAAT" IS JSON VALIDATE '{
    "type": "object",
    "properties": {
      "First_Name": {
        "type": "string",
        "minLength": 5,
        "maxLength": 20
      },
      "Last_Name": {
        "type": "string",
        "minimum": 5,
        "maximum": 30
      },
      "Age": {
        "type": "number"
      }
    },
    "required": ["First_Name", "Last_Name"]
  }');

اشاره شد که کلیدهای First_Name و Last_Name الزامی هستند بنابرین در صورت عدم وجود هر کدام از آنها در متن JSON، به خطای ORA-40875: JSON schema validation error برخواهیم خورد:

SQL> insert into TB_Person values (1,'{"First_Name":"Vahid"}');
ORA-40875: JSON schema validation error
SQL> insert into TB_Person values (1,'{"First_Name":"Vahid","Last_Name":"Usefzadeh"}');
1 row inserted

کلید Age در لیست required نیامده است و دستور فوق بدون آن هم اجرا شده است اما متن JSON می تواند شامل کلید Age هم باشد:

SQL> insert into TB_Person values (1,'{"First_Name":"Vahid","Last_Name":"Usefzadeh","Age":33}');
1 row inserted

ستون Age باید از نوع number باشد و دو ستون دیگر هم باید از نوع string باشند:

SQL> insert into TB_Person values (1,'{"First_Name":"Vahid","Last_Name":"Usefzadeh","Age":"33"}');
ORA-40875: JSON schema validation error
SQL> insert into TB_Person values (1,'{"First_Name":544354,"Last_Name":23423}');
ORA-40875: JSON schema validation error

در موقع ثبت دیتا، حداقل و حداکثر طول کاراکتر هر کدام از این کلیدها هم باید لحاظ شوند. ضمنا می توان کلیدهای دیگری هم به این مجموعه اضافه کرد و الزامی ندارد دیتای ورودی حتما شامل سه فیلد باشد:

SQL> insert into TB_Person values (1,'{"First_Name":"Vahid","Last_Name":"Usefzadeh","Age":33,"Address":"Babol-Derazkola","Email":"vahidusefzadeh@gmail.com"}');
1 row inserted

به روشهای دیگری هم می توان جدول فوق را ایجاد کرد(جدول TB_Person) برای مثال می توان Json Schema را با کمک Domain ایجاد کرد و در زمان ساخت جدول، به ستون مورد نظر تخصیص داد.

بنابرین قبل از ایجاد جدول باید Domainای را ایجاد کرد:

SQL> CREATE DOMAIN DMNPersonJson AS JSON
  2    CONSTRAINT jsondata_chk CHECK (DMNPersonJson IS JSON VALIDATE '{
  3       "type": "object",
  4      "properties": {
  5        "First_Name": {
  6          "type": "string",
  7          "minLength": 5,
  8          "maxLength": 20
  9        },
 10        "Last_Name": {
 11          "type": "string",
 12          "minimum": 5,
 13          "maximum": 30
 14        },
 15  	  "Age": {
 16          "type": "number"
 17        }
 18      },
 19      "required": ["First_Name", "Last_Name"]
 20    }'
 21    );
Done

بعد از ایجاد Domain می توان جدول یا جداول مورد نظر را ایجاد کرد:

SQL> CREATE TABLE TB_Person2 (
          id       NUMBER PRIMARY KEY,
          ettelaat domain DMNPersonJson
          );
Table created

یکی از مزیتهای قابلیت JSON Schema در آن است که می توان مشخصات هر کدام از ستونهای تعریف شده در Schema را در ویوهای دیتادیکشنری مشاهده کرد. برای این کار می توان از ویوی USER_JSON_SCHEMA_COLUMNS استفاده کرد:

SQL> select table_name,column_name,constraint_name from user_json_schema_columns;

TABLE_NAME      COLUMN_NAME     CONSTRAINT_N
--------------- --------------- ------------
TB_PERSON       ETTELAAT        SYS_C008238

همچنین ستون json_schema اطلاعات کاملی را از ساختار JSON Schemaی فوق ارائه می کند:

SQL> select json_serialize(json_schema pretty) from user_json_schema_columns;

JSON_SERIALIZE(JSON_SCHEMAPRETTY)
--------------------------------------
{
  "type" : "object",
  "properties" :
  {
    "First_Name" :
    {
      "type" : "string",
      "minLength" : 5,
      "maxLength" : 20
    },
    "Last_Name" :
    {
      "type" : "string",
      "minimum" : 5,
      "maximum" : 30
    },
    "Age" :
    {
      "type" : "number"
    }
  },
  "required" :
  [
    "First_Name",
    "Last_Name"
  ]
}

ارائه خدمات مشاوره ، پشتیبانی و نصب و راه اندازی پایگاه داده اوراکل در سراسر کشور...................... تلفن: 09128110897 ایمیل:vahidusefzadeh@gmail.com

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *