Mais conteúdo relacionado Semelhante a طراحی سیستم های اطلاعاتی بر مبنای قابلیت های Nosql بانک های اطلاعاتی (20) Mais de عباس بني اسدي مقدم (20) طراحی سیستم های اطلاعاتی بر مبنای قابلیت های Nosql بانک های اطلاعاتی 1. تعالی بسمه
های قابلیت مبنای بر اطلاعاتی های سیستم طراحی جدید روشNosqlای رابطه اطلاعاتی های بانک در
مقدم،سورنامعروفی اسدی بنی عباس ، پاک دست محمد
: چکیده
اطلاعاتی بانک های سیستم از امروزهNoSQL، کشور در موجود اطلاعاتی های سیستم در اما ، شود می استفاده وسیعی حد در
با اطلاعاتی سیستم یک طراحی پذیرد.شاید می صورت ای رابطه و سنتی طراحی مبنای بر ها طراحی تمامMongoDBیا
CouchDBمفاهیم اساس بر سیستم طراحان و نویسان برنامه فکری فضای هنوز که چرا باشد ذهن از دور کمی حاضر حال در
و ای رابطه اطلاعاتی بانک مدیریت سیستم یک از استفاده با کند.یعنی ارایه بینابین روشی کوشد می حاضر مقاله . است ای رابطه
حوزه در سیستم آن که قابلیتهایی و مفاهیمNoSQLنقطه تا کند سازی پیاده نمونه بصورت اطلاعاتی سیستم یک ، کند می ارایه
.مفاهیم این اساس بر دهندگان وتوسعه طراحان برای باشد شرواعی
:مقدمه
تئوری اساس بر کنیم تعریف را فرد یک اطلاعاتی موجودیت بخواهیم چنانچه اطلاعاتی سیستم یک جداول متداول های طراحی در
) جدول یک اطلاعاتی بانک طراحی قوانین و ای رابطهTableنام با (personsنام چون هایی فیلد دارای که کنیم می ایجاد
.باشد می … و تولد ،آدرس،تاریخ
)فرد بستگان اطلاعات مانند )فرد(باشد موجودیت این از بیشتری اطلاعات بازیابی و ذخیره به نیاز اگرrelationsععاتاعاطل ععای و (
) پایه جدول با ارتباط در که است نیاز بیشتری جداول سازی نرمال قوانین مبنای ،بر تحصیلیpersons.باشند (می
) فرد یک اطلاعاتی موجودیت آشنای و کلسیک طراحی زیر شکلperson.میدهد نشان را سازمان در (
2. .شوند می طراحی اساس همین بر انسانی منابع حوزه های سیستم تمامی معمول و آشناست کامل ما همه برای طراحی این
شامل جدول چند یا یک بایست می باشد داشته تحصیلی اطلاعات فرد این اگر تحصیلی آموزش درسیستم دیگر ای نمونه بعنوان
.گرفت نظر در دروس نمرات و تحصیلی اطلاعات
.شود می تر پیچیده کمی مساله روند می پیش بودن پارامتریک سمت به حدی تا که ها سیستم برخی در
جدول در اطلاعات بقیه و شوند می ریخته آن در پایه اطلاعات که دارد وجود فرد برای اصلی جدول یک ،ها سیستم نوع این در
اعنوان با مثل دیگریperson_propertiesیک با اطلاعاتی قلم هر که دارند قرارtype.شود می مشخص
)Table(person_properties
typefield
integerperson_id
Small integerproperty_type
integerproperty_value
3. مانند دیگر جدول یک در سپسdomainsمقادیرproperty_type. شود می مشخص
اگر مثلproperty_type = 15آنگاهproperty_valueبیانگربیمه شماره.آخر الی و باشد می فرد
.نوشت باید را زیر کویری وی خانوادگی نام و نام با همراه فرد یک بیمه شماره بازیابی جهت حال
Select p.person_id,person_name,property_value as insurance_no
from persons p
inner join person_properties on person_id
where property_type = 15
آن و هستیم آشنا اطلاعاتی بانکهای دنیای در جدیدی اعنوان و نام با اقل حد ما همه امروزهNoSqlاصول زمینه در . باشد می
NoSql.کنیم یادآوری را آنها نداریم قصد اینجا در و هست مطلب و مقاله ، کتاب اینترنت در کافی بقدر آنها معرفی و
از استفاده برای خوب مثال یکNosqlدر . آنهاست در اطلاعات بازیابی و ذخیره روشهای و اجتمااعی های شبکه های برنامه
واقعNosqlوب حوزه در افزون روز های نیاز از به درخور پاسخی۲: از بودند اعبارت ها نیاز این .بود
•.ها داده از انبوهی حجم بازیابی و ذخیره
•. اطلاعات و داده به سریع و آسان دسترسی
•.ای رابطه قوانین از آنها پیروی اعدم و جداول ساختار بودن قطعی غیر دیگر اعبارت به یا داده ساختار بودن نامشخص
اگر مطمئناNoSQLسالهای همان در یا و نداشتند وجود یا اجتمااعی های شبکه از بسیاری و خدمات از بسیاری اکنون هم نبود
. رفتند می کنار صحنه از و میشدند مشکل دچار کاربران اولیه
و بازیابی و ذخیره سراعت به نیاز و حجم شامل ) بزرگی از درجه آن به ما اطلاعاتی های سیستم که بیاید پیش سوال این است ممکن
سراغ باید چرا پس رسند نمی ( پذیری دسترسNoSQL. رفت
و برق توزیع مشترکین های سیستم مثل ) دهه یک از بیش آنها از برخی و دهه یک حداقل دارم سروکار آنها با من که هایی سیستم
نیاز مثال بعنوان ) شوند می مطرح روزه همه که جدیدی های خواست در با و هستند کار حال در ( دانشگاهی آموزش های سیستم یا
.دارد صعودی سیر ذیربط سازمانهای در داده رشد ( قبیل این از و مکانی های داده با کار به نیاز و مشتری با ارتباط های سیستم به
آن و است گیری شکل حال در نیز دیگر نیاز یک طرفی ازابری رایانش.است
یا و مالی خدمات دهنده ارایه شرکت یک امروزهCRMراه و نصب جداگانه بصورت را افزارش نرم خود مشتری دهها برای اگر
بانک یک نتیجه در و اختصاصی سرور یک سازمان هر ازاء به که چرا رود می بال سیستم نگهداری و پشتیبانی هزینه نماید اندازی
.است نیاز مورد سازمان آن خاص … و پشتیبانی نیروی بهمراه مجزا اطلاعاتی
و پشتیبانی مجمواعه یک برروی و سیستم یک در را سازمان چندین که است دسترس از دور امری ما برای هنوز گرچه مساله این
. افتاد خواهد اتفاق این زود یا دیر ولی کنیم سازماندهی
می مشترک میلیون سه حدود در استان مشترکین مجموع . دارند فعالیت خراسان استان سطح در برق توزیع شرکت دو نمونه بعنوان
سیستم یک است واضح . باشدCRMباشد جوابگو را مشترک تعداد این بخواهد (که بیلینگ ، فروش از پس خدمات ، )فروش
. بود خواهد بزرگی اطلاعاتی بانک دارای
شوند می شامل را مشهد برق توزیع مشترکین که آنها از نیمی اطلاعات حجم اکنون هم۷۰که است حالی در .این باشد می گیگابایت
.اند نداده قرار خود مشترکین دردسترس و اینترنت برروی را ای گسترده خدمات توزیع های شرکت هنوز
همان یا مشترکین خدمات سیستم مشهد برق توزیع شرکت درCRMاستان برق توزیع برای اگر ، دارد قرار سرور چهار برروی
. داریم نیاز سرور ده تا هشت به بگیریم نظر در را سرور تعداد همین هم رضوی خراسان
اطلاعاتی بانکهای کردن مطرحNoSQLسیستم گیری بکاری و استقرار روش تغییر آن تبع به و ها سیستم طراحی روش تغییر و
چون اطلاعاتی های بانک از استفاده و ای رابطه اطلاعاتی های بانک یکباره گذاشتن کنار معنی به ( ابری رایانش ) ها
CouchDB. نیست
رابطه غیر روشهای با ای رابطه روشهای ترکیب ،باز متن پیشرفته اطلاعاتی های بانک یا و اوراکل چون مطرحی های شرکت امروزه
) ایNosqlچون اطلاعاتی بانکهای از استفاده به نیاز که اند کرده ابداع را (CouchDBحدودی تا اطلاعاتی های سیستم برای را
.کنند می برطرف
پیشرفته و باز متن اطلاعاتی بانک با ساله چندین آشنایی بدلیل مقاله این درpostgresqlامکانات بررویNosqlیا
schemaless.داد خواهیم توضیح آن امکانات اساس بر را جدید طراحی و ایم شده متمرکز اطلاعاتی بانک این
)مفاهیم از بخوبی اطلاعاتی بانک این درkey , Value) نوع قالب در (hstoreداده نوع و (JSON.است شده استفاده
4. داده نوعHSTORE
یک قالب در داده نوع اینextension.شود می فعال پستگرس اطلاعاتی بانک در
Create extension hstore;
!سادگی همین به دقیقا
داده نوع بعد به این ازhstore.شود می اضافه ما اطلاعاتی بانک ای داده انواع به
داده نوعhstoreهای زوج از است ای رشته ساده بطورkey value→ثانیا و اند شده جدا کاما با اول کهkeyتوانند نمی ها
.باشند تکراری
) همان یا سازمان در شخص یک فردی اطلاعات : خودمان مشهور اطلاعاتی بانک سنتی طراحی به برگردیم حالpersonsو (
)روابطشrelations.(
موجودیت اصلی کلیدفردهمان یعنی است فرد آن یکتای شناسهperson_id.
بصورت وابسته جداول کلیه در اطلاعاتی های قلم بقیه جدید طراحی درkey value→.شود می داده قرار فیلد یک در
باشد داشته وجود بیمه شماره است ممکن فرد یک برای رکورد هر برای اطلاعاتی های قلم بودن مشخص نا بدلیل دیگر اعبارت به–
موجود حاضر حال در که شوند می اضافه افراد مشخصات به آینده در جدیدی های فیلد اینکه یا باشد نداشته وجود دیگر فرد برای و
.باشد داشته هم با مقدار همراه به را نظر مورد (صفت)فیلد که میکنیم استفاده ای داده ازنوع - نیستند
: جدول جدید ساختار اما و
create table persons ( person_id integer , person_properties hstore );
persons (Table)
FIELD TYPEFIELD
Integerperson_id
Hstoreperson_properties
:کرد ذخیره آن در زیر بصورت را فرد یک های داده توان می حال
persons (Table)
ValueFIELD
26032person_id
'fName'=> ''اعباس , 'lName'=>'اسدی 'بنی , 'birthdate' => '1352/5/12' ,
'address'=>','مشهد 'nationalcode' => '0939631431' , 'phone' =>
'09150002697'
person_properties
داده نوع با فیلد یک از اطلاعات خواندن نحوه اما وhstore:
select person_properties as all_properties
from persons
where person_id = 26032
5. :خروجی
all_properties
'fName'=>'','عباسlName'=>' اسدی ','بنیbirthdate'=>'1352/5/12','address'=>'','مشهدnationalcode'=>'0939631431','phone' =>'09152402697'
مقدار یک اگرvalueیک از بخواهیم راkeyنوشت توان می بیاوریم بدست
select person_properties→→ 'fNmae' as first_name
from persons
where person_id = 26032
:خروجی
first_name
اعباس
یک رسانی بروز یا افزودنkey value→شخص اطلاعات به جدید
UPDATE persons SET person_properties = person_properties || hstore('fathername', ';)'احمد
حذفkey value→شخص اطلاعات از موجود
UPDATE persons SET person_properties = delete(person_properties, 'fathername');
نوع های فیلد برروی گذاری ایندکسhstore
داده نوع برروی ایندکس نوع دوhstore:کرد تعریف توان می
CREATE INDEX hidx ON persons USING GIST (person_properties);
CREATE INDEX hidx ON persons USING GIN (person_properties);
Gistنظیر هایی دیتا برای مناسب ایندکسیhstoreاعبارت مخفف و باشد می
Generalized Search Tree (GiST).باشد می
6. داده نوعJSON
سازی پیاده جهت پستگرس اطلاعاتی بانک در که دیگری داده نوعNosqlداده نوع یافته توسعهJsonاز هدف واقع باشد.در می
وب تحت های سیستم در بسیاری گسترش امروز که باشد می اسکریپت جاوا نویسی برنامه سازی ،ساده داده نوع این سازی پیاده
مثل نویسی برنامه زبانهای بین اطلاعات بدل ردو تمامی واقع در .است یافتهphpبخش وUIباشد می جاوااسکریپت که سیستم
داده نوع طریق ازXMLیا وJSON.شود می انجام
فردی اطلاعات یعنی خودمان معروف مثال به برگردیم
persons (Table)
FIELD TYPEFIELD
Integerperson_id
JSONperson_properties
JSONGrades
قالب در اطلاعات درج نحوهJSON:است ساده بسیار
insert into persons (person_id,person_properties)
values (100 ,
'{"fName" : ' , 'عباس
"lName" : ' اسدی , 'بنی
"birthdate" : '1352/5/12' ,
"address" : ' ,'مشهد
"nationalcode" : '0939631431' ,
"phone" : '09150002697'}');
persons (Table)
ValueFIELD
26032person_id
{"fName" : '" , 'عباسlName" : ' اسدی " , 'بنیbirthdate" :
'1352/5/12' ," address" : '" ,'مشهدnationalcode" : '0939631431'
, "phone" : '09150002697'}
person_properties
داده نوع با فیلد یک از مقدار یک بازیابی نحوه اما وJSON
select person_properties >> address as address from persons
: خروجی
address
''مشهد
7. داده نوعjsonبا مقایسه در بهتری های ویژگی دارایhstoreنوع یک خود تواند می آیتم هر داده نوع این در . باشد میjson
.باشد
insert into persons (person_id,person_properties)
values (100,
'{"fName" : ' , 'عباس
"lName" : ' اسدی , 'بنی
"birthdate" : '1352/5/12' ,
"address" : { "state" : '" , 'خراسانcity" : ' ,}'مشهد
"nationalcode" : '0939631431' ,
"phone" : '09150002697'}');
select person_properties>address>>city as city
from persons
خروجی
city
''مشهد
رشته یک در حتی نتوان لزوم صورت در تا گذاشت یکتا ایندکس ( ها کلید ) ها آیتم تمامی برروی توان میjsonتکراری دیتای
.کرد وارد
می بازیابی و ذخیره را وی دروس نمرات و تحصیلی اطلاعات مثل شخص یک اطلاعات سایر و میدهیم توسعه کمی را مساله حال
.کنیم
فیلد: توجهgrades.است شده اضافه نمرات کلیه محتوی ذخیره جهت
رشته به را آنها توان می تحصیلی اطلاعات های فیلد افزودن :جهت توضیحjsonفیلدperson_propertiesبه افزودونیاز
اعنوان با جدید فیلد یک نمرات جهت پیچیدگی از پرهیز بدلیل اما . نیست جدیدی فیلدهای گرفتنgradesنوع ازjson
.کنیم می اضافه
insert into persons (person_id,person_properties)
values (100,
'{"fName":" , "عباس
"lName":" اسدی , "بنی
"birthdate":"1352/5/12" ,
"address":{ "state":"","خراسانcity":" ,}"مشهد
"nationalcode":"0939631431",
"phone":"09150002697",
"student_no":"70112312",
"starting_year":1370,
"faculty_code":10,
"field_code":15
}');
8. نمرات درج
update persons set grades = '
[
{"year":1370 ,
"semesters" :[
{"semester" :1,
"lessons":[
{"less_code":101,"grade":10.5},
{"less_code":102,"grade":12.5},
{"less_code":103,"grade":13.25}
]
},
{"semester" :2,
"lessons":[
{"less_code":201,"grade":17},
{"less_code":202,"grade":19.5},
{"less_code":203,"grade":18}
]
}
]
},
{"year":1371 ,
"semesters" :[
{"semester" :1,
"lessons":[
{"less_code":401,"grade":11},
{"less_code":404,"grade":15},
{"less_code":408,"grade":13}
]
},
{"semester" :2,
"lessons":[
{"less_code":711,"grade":20},
{"less_code":811,"grade":19.25},
{"less_code":903,"grade":18}
]
}
]
}
]';
where person_id=100;
فیلد محتوی بخواهیم اگرgrades: مینویسیم چنین باشیم داشته سال تفکیک به دانشجو یک برای را
select jsonb_array_elements(grades) as all_years
from persons where person_id=100;
: است زیر بشکل حالت این در خروجی
all_years
"{"year": 1370, "semesters": [{"lessons": [{"grade": 10.5, "less_code": 101}, {"grade": 12.5, "less_code": 102}, {"grade": 13.25,
"less_code": 103}], "semester": 1}, {"lessons": [{"grade": 17, "less_code": 201}, {"grade": 19.5, "less_code": 202}, {"grade": 18,
"less_code": 203}], "semester": 2}]}"
"{"year": 1371, "semesters": [{"lessons": [{"grade": 11, "less_code": 401}, {"grade": 15, "less_code": 404}, {"grade": 13,
"less_code": 408}], "semester": 1}, {"lessons": [{"grade": 20, "less_code": 711}, {"grade": 19.25, "less_code": 811}, {"grade": 18,
"less_code": 903}], "semester": 2}]}"
"{"year": 1372, "semesters": [{"lessons": [{"grade": 18.27, "less_code": 1000001}, {"grade": 18.27, "less_code": 1000001}],
"semester": 1}, {"lessons": [{"grade": 18.27, "less_code": 1000001}], "semester": 1}]}"
"{"year": 1373, "semesters": [{"lessons": [{"grade": 11.5, "less_code": 1000002}], "semester": 1}]}"
9. : بنویسیم باید باشیم داشته را دانشجو ترم یک نمرات بخواهیم اگر حال
select jsonb_array_elements(grades)>'semesters' as semesters
from persons where person_id=100
semesters
"[{"lessons": [{"grade": 10, "less_code": 1}, {"grade": 12, "less_code": 2}, {"grade": 13, "less_code": 3}], "semester": 1},
{"lessons": [{"grade": 101, "less_code": 1}, {"grade": 121, "less_code": 2}, {"grade": 131, "less_code": 3}], "semester": 2}]"
:کرد مشاهده ردیف یک در را درس هر توان می زیر دستور با که آید می بدست ترم یک دروس از ای آرایه نیز حالت این در
select jsonb_array_elements(
jsonb_array_elements(grades)>'semesters')>'lessons' as lessons
from persons where person_id=100
lessons
"[{"grade": 10.5, "less_code": 101}, {"grade": 12.5, "less_code": 102}, {"grade": 13.25, "less_code": 103}]"
"[{"grade": 17, "less_code": 201}, {"grade": 19.5, "less_code": 202}, {"grade": 18, "less_code": 203}]"
"[{"grade": 11, "less_code": 401}, {"grade": 15, "less_code": 404}, {"grade": 13, "less_code": 408}]"
"[{"grade": 20, "less_code": 711}, {"grade": 19.25, "less_code": 811}, {"grade": 18, "less_code": 903}]"
رسید خواهیم زیر خروجی به دهیم ادامه اگر طور همین و
select jsonb_array_elements(
jsonb_array_elements(
jsonb_array_elements(grades)>'semesters')>'lessons') as all_lessons
from persons where person_id=100
all_lessons
"{"grade": 10.5, "less_code": 101}"
"{"grade": 12.5, "less_code": 102}"
"{"grade": 13.25, "less_code": 103}"
"{"grade": 17, "less_code": 201}"
"{"grade": 19.5, "less_code": 202}"
"{"grade": 18, "less_code": 203}"
"{"grade": 11, "less_code": 401}"
"{"grade": 15, "less_code": 404}"
"{"grade": 13, "less_code": 408}"
"{"grade": 20, "less_code": 711}"
"{"grade": 19.25, "less_code": 811}"
"{"grade": 18, "less_code": 903}"
کد با درس نمره بخواهیم اگر حال711: نویسیم می چنین آوریم بدست دانشجو یک برای را
with mygrades as (
select jsonb_array_elements(
jsonb_array_elements(
jsonb_array_elements(grades)>'semesters')>'lessons') as all_lessons
from persons where person_id=100 )
select all_lessons>'grade'
from mygrades
where all_lessons::json>>'less_code' = '711'
all_lessons
20
توابع قالب در را بال دستورات توان می سازی ساده برایpl/pgsql. نوشت
10. دانشجو دروس به درس یک افزودن
تابعی اینجا در ! اسکریپت جاوا زبان از استفاده از بهتر راهی چه (ترم یک در درس یک نمره مثال این )در داده کردن اضافه برای
: نویسیم می ترم یک در نمره کردن اضافه جهت اسکریپ جاوا زبان به
CREATE OR REPLACE FUNCTION add_course(
data jsonb, myear integer, semester integer, course integer,grade double precision )
RETURNS jsonb AS
$BODY$
var new_data=JSON.parse(data);
/*check if data is a valid jsonb type*/
if(!new_data){return data;}
/*check if grade is valid*/
if(grade<0 || grade>20){return data;}
/* each year has 2 semesters (1 or 2)*/
if(semester !=1 && semester!=2){return data;}
/*iterate through each year to find the match one or return false*/
var match_year_found=false;
for(var i=0;i<new_data.length;++i){
var each_year = new_data[i];
if(each_year.year==myear){
match_year_found=true;
//todo
var match_semester_found=false;
for(var j=0;j<each_year.semesters.length;++j){
var each_semester=each_year.semesters[j];
if(each_semester.semester==semester){
/*match semester found*/
match_semester_found=true;
if(each_semester.lessons && typeof each_semester.lessons==='object'){
each_semester.lessons.push({less_code:course,grade:grade});
break;
}else{
each_semester.lessons=[{less_code:course,grade:grade}];
break;
}
}
}
if(match_year_found==true){
/*so we have to create our semester in this year*/
each_year.semesters.push({semester:semester,lessons:[{less_code:course,grade:grade}]});
break;
}
//todo
}
}
if(match_year_found==false){
/*so we have to create a year for this person_id*/
new_data.push({year:myear,semesters:[{semester:semester,lessons:
{less_code:course,grade:grade}]}]});
}
return JSON.stringify(new_data)
$BODY$
LANGUAGE plv8 IMMUTABLE STRICT
باشد می زیر بروش درس یک کردن اضافه نحوه و
update persons
set grades = (select add_course(grades,1373,1,1000002,11.50)
from persons
where person_id=100) where person_id=100;
11. های داده رسانی بروزJSON
:باشد می صورت بدین ما روال درس نمره رسانی بروز جهت
CREATE OR REPLACE FUNCTION update_course(
data jsonb,
myear integer,
semester integer,
course integer,
grade double precision)
RETURNS jsonb AS
$BODY$
var new_data=JSON.parse(data);
/*check if data is a valid jsonb type*/
if(!new_data){return data;}
/*check if grade is valid*/
if(grade<0 || grade>20){return data;}
/* each year has 2 semesters (1 or 2)*/
if(semester !=1 && semester!=2){return data;}
/*iterate through each year to find the match one or return false*/
var match_year_found=false;
for(var i=0;i<new_data.length;++i){
var each_year = new_data[i];
if(each_year.year==myear){
match_year_found=true;
var match_semester_found=false;
for(var j=0;j<each_year.semesters.length;++j){
var each_semester=each_year.semesters[j];
if(each_semester.semester==semester){
/*match semester found*/
match_semester_found=true;
if(each_semester.lessons && typeof each_semester.lessons==='object'){
for(var k=0;k<each_semester.lessons.length;++k){
if(each_semester.lessons[k].less_code==course){
/*now update the course*/
each_semester.lessons[k].grade=grade;
return JSON.stringify(new_data);
}//if
}//for
break;
}else{
return data;
}//if
}//if
}//for
}//if
}//for
return JSON.stringify(new_data)
$BODY$
LANGUAGE plv8 IMMUTABLE STRICT
COST 100;
ALTER FUNCTION update_course(jsonb, integer, integer, integer, double precision)
OWNER TO postgres;
: است چنین هم استفاده طریقه و
update person set data = (select update_course(data,1370,3,103,16.35) from person where
person_id=100) where person_id=100;
12. های داده حذفJSON
: نویسیم می چنین روالی درس یک حذف جهت
CREATE OR REPLACE FUNCTION delete_course(
data jsonb,
myear integer,
semester integer,
course integer)
RETURNS jsonb AS
$BODY$
var new_data=JSON.parse(data);
/*check if data is a valid jsonb type*/
if(!new_data){return data;}
/* each year has 2 semesters (1 or 2)*/
if(semester !=1 && semester!=2){return data;}
/*iterate through each year to find the match one or return false*/
var match_year_found=false;
for(var i=0;i<new_data.length;++i){
var each_year = new_data[i];
if(each_year.year==myear){
match_year_found=true;
var match_semester_found=false;
for(var j=0;j<each_year.semesters.length;++j){
var each_semester=each_year.semesters[j];
if(each_semester.semester==semester){
/*match semester found*/
match_semester_found=true;
if(each_semester.lessons && typeof each_semester.lessons==='object'){
for(var k=0;k<each_semester.lessons.length;++k){
if(each_semester.lessons[k].less_code==course){
/*now update the course*/
each_semester.lessons.splice(k,1);
return JSON.stringify(new_data);
}
}
break;
}else{
return data;
}
}
}
}
}
return JSON.stringify(new_data)
$BODY$
LANGUAGE plv8 IMMUTABLE STRICT
COST 100;
ALTER FUNCTION delete_course(jsonb, integer, integer, integer)
OWNER TO postgres;
: است چنین هم آن از استفاده روش و
update person set data = (select delete_course(data,1375,1,102) from person where person_id=100)
where person_id=100;
اطلاعاتی های بانک مفاهیم تا کوشیدیم مقاله این درNosqlهای نوع قالب در راjsonوhstoreمقدماتی دید یک و داده بسط
قالب در ها داده سازی ذخیره روش از اکنون کنیم.هم ارایه آینده های سیستم طراحی ازjsonاما شود می استفاده ل گ جداول در
یا و بستگان و فرد )موجودیت آمد مثال در آنچه مانند اطلاعاتی های سیستم اصلی ( )جداول های موجودیت خصوص در هنوز
ای داده های نوع از استفاده کال(و مخصوص صفات و کال موجودیتNosqlاین ارایه با است امید که دارد وجود تردید و شک
.شود هموار مسیر این در گذاشتن قدم برای راه حدی تا مقاله