SlideShare a Scribd company logo
1 of 13
Download to read offline
‫تعالی‬ ‫بسمه‬
‫های‬ ‫قابلیت‬ ‫مبنای‬ ‫بر‬ ‫اطلاعاتی‬ ‫های‬ ‫سیستم‬ ‫طراحی‬ ‫جدید‬ ‫روش‬Nosql‫ای‬ ‫رابطه‬ ‫اطلاعاتی‬ ‫های‬ ‫بانک‬ ‫در‬
‫مقدم،سورنامعروفی‬ ‫اسدی‬ ‫بنی‬ ‫عباس‬ ، ‫پاک‬ ‫دست‬ ‫محمد‬
: ‫چکیده‬
‫اطلاعاتی‬ ‫بانک‬ ‫های‬ ‫سیستم‬ ‫از‬ ‫امروزه‬NoSQL، ‫کشور‬ ‫در‬ ‫موجود‬ ‫اطلاعاتی‬ ‫های‬ ‫سیستم‬ ‫در‬ ‫اما‬ ، ‫شود‬ ‫می‬ ‫استفاده‬ ‫وسیعی‬ ‫حد‬ ‫در‬
‫با‬ ‫اطلاعاتی‬ ‫سیستم‬ ‫یک‬ ‫طراحی‬ ‫پذیرد.شاید‬ ‫می‬ ‫صورت‬ ‫ای‬ ‫رابطه‬ ‫و‬ ‫سنتی‬ ‫طراحی‬ ‫مبنای‬ ‫بر‬ ‫ها‬ ‫طراحی‬ ‫تمام‬MongoDB‫یا‬
CouchDB‫مفاهیم‬ ‫اساس‬ ‫بر‬ ‫سیستم‬ ‫طراحان‬ ‫و‬ ‫نویسان‬ ‫برنامه‬ ‫فکری‬ ‫فضای‬ ‫هنوز‬ ‫که‬ ‫چرا‬ ‫باشد‬ ‫ذهن‬ ‫از‬ ‫دور‬ ‫کمی‬ ‫حاضر‬ ‫حال‬ ‫در‬
‫و‬ ‫ای‬ ‫رابطه‬ ‫اطلاعاتی‬ ‫بانک‬ ‫مدیریت‬ ‫سیستم‬ ‫یک‬ ‫از‬ ‫استفاده‬ ‫با‬ ‫کند.یعنی‬ ‫ارایه‬ ‫بینابین‬ ‫روشی‬ ‫کوشد‬ ‫می‬ ‫حاضر‬ ‫مقاله‬ . ‫است‬ ‫ای‬ ‫رابطه‬
‫حوزه‬ ‫در‬ ‫سیستم‬ ‫آن‬ ‫که‬ ‫قابلیتهایی‬ ‫و‬ ‫مفاهیم‬NoSQL‫نقطه‬ ‫تا‬ ‫کند‬ ‫سازی‬ ‫پیاده‬ ‫نمونه‬ ‫بصورت‬ ‫اطلاعاتی‬ ‫سیستم‬ ‫یک‬ ، ‫کند‬ ‫می‬ ‫ارایه‬
.‫مفاهیم‬ ‫این‬ ‫اساس‬ ‫بر‬ ‫دهندگان‬ ‫وتوسعه‬ ‫طراحان‬ ‫برای‬ ‫باشد‬ ‫شرواعی‬
:‫مقدمه‬
‫تئوری‬ ‫اساس‬ ‫بر‬ ‫کنیم‬ ‫تعریف‬ ‫را‬ ‫فرد‬ ‫یک‬ ‫اطلاعاتی‬ ‫موجودیت‬ ‫بخواهیم‬ ‫چنانچه‬ ‫اطلاعاتی‬ ‫سیستم‬ ‫یک‬ ‫جداول‬ ‫متداول‬ ‫های‬ ‫طراحی‬ ‫در‬
) ‫جدول‬ ‫یک‬ ‫اطلاعاتی‬ ‫بانک‬ ‫طراحی‬ ‫قوانین‬ ‫و‬ ‫ای‬ ‫رابطه‬Table‫نام‬ ‫با‬ (persons‫نام‬ ‫چون‬ ‫هایی‬ ‫فیلد‬ ‫دارای‬ ‫که‬ ‫کنیم‬ ‫می‬ ‫ایجاد‬
.‫باشد‬ ‫می‬ … ‫و‬ ‫تولد‬ ‫،آدرس،تاریخ‬
)‫فرد‬ ‫بستگان‬ ‫اطلاعات‬ ‫مانند‬ ‫)فرد(باشد‬ ‫موجودیت‬ ‫این‬ ‫از‬ ‫بیشتری‬ ‫اطلاعات‬ ‫بازیابی‬ ‫و‬ ‫ذخیره‬ ‫به‬ ‫نیاز‬ ‫اگر‬relations‫ععات‬‫اع‬‫اطل‬ ‫ععا‬‫ی‬ ‫و‬ (
) ‫پایه‬ ‫جدول‬ ‫با‬ ‫ارتباط‬ ‫در‬ ‫که‬ ‫است‬ ‫نیاز‬ ‫بیشتری‬ ‫جداول‬ ‫سازی‬ ‫نرمال‬ ‫قوانین‬ ‫مبنای‬ ‫،بر‬ ‫تحصیلی‬persons.‫باشند‬ ‫(می‬
) ‫فرد‬ ‫یک‬ ‫اطلاعاتی‬ ‫موجودیت‬ ‫آشنای‬ ‫و‬ ‫کلسیک‬ ‫طراحی‬ ‫زیر‬ ‫شکل‬person.‫میدهد‬ ‫نشان‬ ‫را‬ ‫سازمان‬ ‫در‬ (
.‫شوند‬ ‫می‬ ‫طراحی‬ ‫اساس‬ ‫همین‬ ‫بر‬ ‫انسانی‬ ‫منابع‬ ‫حوزه‬ ‫های‬ ‫سیستم‬ ‫تمامی‬ ‫معمول‬ ‫و‬ ‫آشناست‬ ‫کامل‬ ‫ما‬ ‫همه‬ ‫برای‬ ‫طراحی‬ ‫این‬
‫شامل‬ ‫جدول‬ ‫چند‬ ‫یا‬ ‫یک‬ ‫بایست‬ ‫می‬ ‫باشد‬ ‫داشته‬ ‫تحصیلی‬ ‫اطلاعات‬ ‫فرد‬ ‫این‬ ‫اگر‬ ‫تحصیلی‬ ‫آموزش‬ ‫درسیستم‬ ‫دیگر‬ ‫ای‬ ‫نمونه‬ ‫بعنوان‬
.‫گرفت‬ ‫نظر‬ ‫در‬ ‫دروس‬ ‫نمرات‬ ‫و‬ ‫تحصیلی‬ ‫اطلاعات‬
.‫شود‬ ‫می‬ ‫تر‬ ‫پیچیده‬ ‫کمی‬ ‫مساله‬ ‫روند‬ ‫می‬ ‫پیش‬ ‫بودن‬ ‫پارامتریک‬ ‫سمت‬ ‫به‬ ‫حدی‬ ‫تا‬ ‫که‬ ‫ها‬ ‫سیستم‬ ‫برخی‬ ‫در‬
‫جدول‬ ‫در‬ ‫اطلاعات‬ ‫بقیه‬ ‫و‬ ‫شوند‬ ‫می‬ ‫ریخته‬ ‫آن‬ ‫در‬ ‫پایه‬ ‫اطلاعات‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫فرد‬ ‫برای‬ ‫اصلی‬ ‫جدول‬ ‫یک‬ ،‫ها‬ ‫سیستم‬ ‫نوع‬ ‫این‬ ‫در‬
‫اعنوان‬ ‫با‬ ‫مثل‬ ‫دیگری‬person_properties‫یک‬ ‫با‬ ‫اطلاعاتی‬ ‫قلم‬ ‫هر‬ ‫که‬ ‫دارند‬ ‫قرار‬type.‫شود‬ ‫می‬ ‫مشخص‬
)Table(person_properties
typefield
integerperson_id
Small integerproperty_type
integerproperty_value
‫مانند‬ ‫دیگر‬ ‫جدول‬ ‫یک‬ ‫در‬ ‫سپس‬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.‫است‬ ‫شده‬ ‫استفاده‬
‫داده‬ ‫نوع‬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
:‫خروجی‬
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).‫باشد‬ ‫می‬
‫داده‬ ‫نوع‬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
'‫'مشهد‬
‫داده‬ ‫نوع‬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      
    }'); 
‫نمرات‬ ‫درج‬
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}]}"
: ‫بنویسیم‬ ‫باید‬ ‫باشیم‬ ‫داشته‬ ‫را‬ ‫دانشجو‬ ‫ترم‬ ‫یک‬ ‫نمرات‬ ‫بخواهیم‬ ‫اگر‬ ‫حال‬
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. ‫نوشت‬
‫دانشجو‬ ‫دروس‬ ‫به‬ ‫درس‬ ‫یک‬ ‫افزودن‬
‫تابعی‬ ‫اینجا‬ ‫در‬ ! ‫اسکریپت‬ ‫جاوا‬ ‫زبان‬ ‫از‬ ‫استفاده‬ ‫از‬ ‫بهتر‬ ‫راهی‬ ‫چه‬ (‫ترم‬ ‫یک‬ ‫در‬ ‫درس‬ ‫یک‬ ‫نمره‬ ‫مثال‬ ‫این‬ ‫)در‬ ‫داده‬ ‫کردن‬ ‫اضافه‬ ‫برای‬
: ‫نویسیم‬ ‫می‬ ‫ترم‬ ‫یک‬ ‫در‬ ‫نمره‬ ‫کردن‬ ‫اضافه‬ ‫جهت‬ ‫اسکریپ‬ ‫جاوا‬ ‫زبان‬ ‫به‬
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;
‫های‬ ‫داده‬ ‫رسانی‬ ‫بروز‬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;
‫های‬ ‫داده‬ ‫حذف‬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‫این‬ ‫ارایه‬ ‫با‬ ‫است‬ ‫امید‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫تردید‬ ‫و‬ ‫شک‬
.‫شود‬ ‫هموار‬ ‫مسیر‬ ‫این‬ ‫در‬ ‫گذاشتن‬ ‫قدم‬ ‫برای‬ ‫راه‬ ‫حدی‬ ‫تا‬ ‫مقاله‬
: ‫منابع‬
1-Postgresql Documentation : http://www.postgresql.org/docs/

More Related Content

Viewers also liked

Viewers also liked (20)

Bienvenido a avances tecnológicos
Bienvenido a avances tecnológicosBienvenido a avances tecnológicos
Bienvenido a avances tecnológicos
 
Reglas 27
Reglas 27Reglas 27
Reglas 27
 
Porto exterior
Porto exteriorPorto exterior
Porto exterior
 
Notas i periodo 2013
Notas i periodo 2013Notas i periodo 2013
Notas i periodo 2013
 
Los Sentimientos En La MúSica
Los Sentimientos En La MúSicaLos Sentimientos En La MúSica
Los Sentimientos En La MúSica
 
Cidadão
CidadãoCidadão
Cidadão
 
Pra latihan PPT
Pra latihan PPTPra latihan PPT
Pra latihan PPT
 
Cuadrooo
CuadroooCuadrooo
Cuadrooo
 
O final...
O final...O final...
O final...
 
Sumula
SumulaSumula
Sumula
 
Исламски споменици
Исламски споменициИсламски споменици
Исламски споменици
 
Wild animalsck
Wild animalsckWild animalsck
Wild animalsck
 
نعم ستعذب في الآخرة يا ملحد إن لم تتب!
نعم ستعذب في الآخرة يا ملحد إن لم تتب!نعم ستعذب في الآخرة يا ملحد إن لم تتب!
نعم ستعذب في الآخرة يا ملحد إن لم تتب!
 
Управление репутацией онлайн
Управление репутацией онлайнУправление репутацией онлайн
Управление репутацией онлайн
 
Industri kulit
Industri kulitIndustri kulit
Industri kulit
 
فهرست نسخه های خطی کتابخانه افشین عاطفی - 24
فهرست نسخه های خطی کتابخانه  افشین عاطفی - 24فهرست نسخه های خطی کتابخانه  افشین عاطفی - 24
فهرست نسخه های خطی کتابخانه افشین عاطفی - 24
 
ольга ринк презентация
ольга ринк   презентацияольга ринк   презентация
ольга ринк презентация
 
Fisico-Quimica, sup-8
Fisico-Quimica, sup-8Fisico-Quimica, sup-8
Fisico-Quimica, sup-8
 
Trabajos
TrabajosTrabajos
Trabajos
 
Minerais
MineraisMinerais
Minerais
 

Similar to طراحی سیستم های اطلاعاتی بر مبنای قابلیت های Nosql بانک های اطلاعاتی

Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازIntroduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازMobin Ranjbar
 
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهرانFarafekr Technology
 
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
 (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ... (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...Muhibullah Aman
 
مقدمه ای بر هوش تجاری
مقدمه ای بر هوش تجاریمقدمه ای بر هوش تجاری
مقدمه ای بر هوش تجاریZahra Mansoori
 
معرفي فايروال پايگاه داده
معرفي فايروال پايگاه دادهمعرفي فايروال پايگاه داده
معرفي فايروال پايگاه دادهHamid Torkashvand
 
Oracle Data Integrator (persian)
Oracle Data Integrator (persian)Oracle Data Integrator (persian)
Oracle Data Integrator (persian)Ehsan Hamzei
 
Herat University Library Management System Persian User Manual
Herat University Library Management System Persian User ManualHerat University Library Management System Persian User Manual
Herat University Library Management System Persian User ManualAbdul Rahman Sherzad
 
نرمال سازی بانك های اطلاعاتی
نرمال سازی بانك های اطلاعاتینرمال سازی بانك های اطلاعاتی
نرمال سازی بانك های اطلاعاتیnioshapakpour
 
Data cleansing
Data cleansingData cleansing
Data cleansingSiminZolfi
 
Bi and data mining with Oracle
Bi and data mining with OracleBi and data mining with Oracle
Bi and data mining with Oracleghanadbashi
 
Data Fusion model for web analytics
Data Fusion model for web analyticsData Fusion model for web analytics
Data Fusion model for web analyticsMahdi Sayyad
 
Big Data and select suitable tools
Big Data and select suitable toolsBig Data and select suitable tools
Big Data and select suitable toolsMeghdad Hatami
 
داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد Farzad Khandan
 
لحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFUL
لحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFULلحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFUL
لحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFULSeyedMasoudMousavi
 

Similar to طراحی سیستم های اطلاعاتی بر مبنای قابلیت های Nosql بانک های اطلاعاتی (20)

Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیرازIntroduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
Introduction to Hadoop and Spark - اسلاید کارگاه آموزش هدوپ و اسپارک شیراز
 
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
1st Hadoop Tehran Workshop - اسلاید اولین کارگاه آموزش هدوپ تهران
 
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
 (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ... (ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
(ِData Structures-Java Object oriented Programming Languages)ساختارهای دیتا ...
 
Efazati opendata slides
Efazati opendata slidesEfazati opendata slides
Efazati opendata slides
 
مقدمه ای بر هوش تجاری
مقدمه ای بر هوش تجاریمقدمه ای بر هوش تجاری
مقدمه ای بر هوش تجاری
 
معرفي فايروال پايگاه داده
معرفي فايروال پايگاه دادهمعرفي فايروال پايگاه داده
معرفي فايروال پايگاه داده
 
Network management 2_sample
Network management 2_sampleNetwork management 2_sample
Network management 2_sample
 
Oracle Data Integrator (persian)
Oracle Data Integrator (persian)Oracle Data Integrator (persian)
Oracle Data Integrator (persian)
 
Openstack Rally
Openstack RallyOpenstack Rally
Openstack Rally
 
Herat University Library Management System Persian User Manual
Herat University Library Management System Persian User ManualHerat University Library Management System Persian User Manual
Herat University Library Management System Persian User Manual
 
نرمال سازی بانك های اطلاعاتی
نرمال سازی بانك های اطلاعاتینرمال سازی بانك های اطلاعاتی
نرمال سازی بانك های اطلاعاتی
 
Data cleansing
Data cleansingData cleansing
Data cleansing
 
OpenStack and its service
OpenStack and its serviceOpenStack and its service
OpenStack and its service
 
Bi and data mining with Oracle
Bi and data mining with OracleBi and data mining with Oracle
Bi and data mining with Oracle
 
Data Fusion model for web analytics
Data Fusion model for web analyticsData Fusion model for web analytics
Data Fusion model for web analytics
 
Big Data and select suitable tools
Big Data and select suitable toolsBig Data and select suitable tools
Big Data and select suitable tools
 
Pg autoscaling in ceph
Pg autoscaling in  cephPg autoscaling in  ceph
Pg autoscaling in ceph
 
(داده های زمینه ای) Contextual data
  (داده های زمینه ای) Contextual data  (داده های زمینه ای) Contextual data
(داده های زمینه ای) Contextual data
 
داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد داده های عظیم چگونه دنیا را تغییر خواهند داد
داده های عظیم چگونه دنیا را تغییر خواهند داد
 
لحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFUL
لحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFULلحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFUL
لحاظ کردن موارد امنیتی در طراحی سرویس‌های از نوع RESTFUL
 

More from عباس بني اسدي مقدم

چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریعباس بني اسدي مقدم
 
طرح چارچوب متن باز تولید نرم افزار
طرح چارچوب  متن باز تولید نرم افزار طرح چارچوب  متن باز تولید نرم افزار
طرح چارچوب متن باز تولید نرم افزار عباس بني اسدي مقدم
 
طرح رایانش ابری در صنعت برق خراسان
طرح رایانش ابری در صنعت برق خراسانطرح رایانش ابری در صنعت برق خراسان
طرح رایانش ابری در صنعت برق خراسانعباس بني اسدي مقدم
 
دستورالعمل تعیین مستمر تلفات انرژی
دستورالعمل تعیین مستمر تلفات انرژیدستورالعمل تعیین مستمر تلفات انرژی
دستورالعمل تعیین مستمر تلفات انرژیعباس بني اسدي مقدم
 
معماری سازمانی سیستم های اطلاعاتی
معماری سازمانی سیستم های اطلاعاتی معماری سازمانی سیستم های اطلاعاتی
معماری سازمانی سیستم های اطلاعاتی عباس بني اسدي مقدم
 
گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات
گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات
گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات عباس بني اسدي مقدم
 
استراتژی نرم افزار در شرکت توزیع برق مشهد
استراتژی نرم افزار در شرکت توزیع برق مشهداستراتژی نرم افزار در شرکت توزیع برق مشهد
استراتژی نرم افزار در شرکت توزیع برق مشهدعباس بني اسدي مقدم
 
انقلاب تکنولوژیک در نرم ساخت رایانه های شخصی
انقلاب تکنولوژیک در نرم ساخت رایانه های شخصیانقلاب تکنولوژیک در نرم ساخت رایانه های شخصی
انقلاب تکنولوژیک در نرم ساخت رایانه های شخصیعباس بني اسدي مقدم
 
زیر ساخت نرم افزاری شرکت توزیع برق مشهد
زیر ساخت نرم افزاری شرکت توزیع برق مشهدزیر ساخت نرم افزاری شرکت توزیع برق مشهد
زیر ساخت نرم افزاری شرکت توزیع برق مشهدعباس بني اسدي مقدم
 

More from عباس بني اسدي مقدم (20)

Covid19
Covid19Covid19
Covid19
 
پروژه پورتال جامع سازمانی
پروژه پورتال جامع سازمانیپروژه پورتال جامع سازمانی
پروژه پورتال جامع سازمانی
 
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاریچارچوب متن باز جهت توسعه سیستم های نرم افزاری
چارچوب متن باز جهت توسعه سیستم های نرم افزاری
 
Postgresql Server Programming
Postgresql Server ProgrammingPostgresql Server Programming
Postgresql Server Programming
 
An Introduction to Postgresql
An Introduction to PostgresqlAn Introduction to Postgresql
An Introduction to Postgresql
 
Software architecture002
Software architecture002Software architecture002
Software architecture002
 
Open Source Datawarehouse
Open Source DatawarehouseOpen Source Datawarehouse
Open Source Datawarehouse
 
طرح چارچوب متن باز تولید نرم افزار
طرح چارچوب  متن باز تولید نرم افزار طرح چارچوب  متن باز تولید نرم افزار
طرح چارچوب متن باز تولید نرم افزار
 
سیستم رسیدگی به شکایات
سیستم رسیدگی به شکایاتسیستم رسیدگی به شکایات
سیستم رسیدگی به شکایات
 
گزارش دستیابی به اهداف ۱۴۰۵
گزارش دستیابی به اهداف ۱۴۰۵گزارش دستیابی به اهداف ۱۴۰۵
گزارش دستیابی به اهداف ۱۴۰۵
 
طرح رایانش ابری در صنعت برق خراسان
طرح رایانش ابری در صنعت برق خراسانطرح رایانش ابری در صنعت برق خراسان
طرح رایانش ابری در صنعت برق خراسان
 
فروش اینترنتی انشعاب
فروش اینترنتی انشعابفروش اینترنتی انشعاب
فروش اینترنتی انشعاب
 
دستورالعمل تعیین مستمر تلفات انرژی
دستورالعمل تعیین مستمر تلفات انرژیدستورالعمل تعیین مستمر تلفات انرژی
دستورالعمل تعیین مستمر تلفات انرژی
 
معماری جاری نرم افزار های شرکت
معماری جاری نرم افزار های شرکتمعماری جاری نرم افزار های شرکت
معماری جاری نرم افزار های شرکت
 
معماری سازمانی سیستم های اطلاعاتی
معماری سازمانی سیستم های اطلاعاتی معماری سازمانی سیستم های اطلاعاتی
معماری سازمانی سیستم های اطلاعاتی
 
گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات
گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات
گزارش عملکرد دفتر فن آوری اطلاعات و ارتباطات
 
استراتژی نرم افزار در شرکت توزیع برق مشهد
استراتژی نرم افزار در شرکت توزیع برق مشهداستراتژی نرم افزار در شرکت توزیع برق مشهد
استراتژی نرم افزار در شرکت توزیع برق مشهد
 
انقلاب تکنولوژیک در نرم ساخت رایانه های شخصی
انقلاب تکنولوژیک در نرم ساخت رایانه های شخصیانقلاب تکنولوژیک در نرم ساخت رایانه های شخصی
انقلاب تکنولوژیک در نرم ساخت رایانه های شخصی
 
مهاجرت به متن باز
مهاجرت به متن بازمهاجرت به متن باز
مهاجرت به متن باز
 
زیر ساخت نرم افزاری شرکت توزیع برق مشهد
زیر ساخت نرم افزاری شرکت توزیع برق مشهدزیر ساخت نرم افزاری شرکت توزیع برق مشهد
زیر ساخت نرم افزاری شرکت توزیع برق مشهد
 

طراحی سیستم های اطلاعاتی بر مبنای قابلیت های 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‫این‬ ‫ارایه‬ ‫با‬ ‫است‬ ‫امید‬ ‫که‬ ‫دارد‬ ‫وجود‬ ‫تردید‬ ‫و‬ ‫شک‬ .‫شود‬ ‫هموار‬ ‫مسیر‬ ‫این‬ ‫در‬ ‫گذاشتن‬ ‫قدم‬ ‫برای‬ ‫راه‬ ‫حدی‬ ‫تا‬ ‫مقاله‬
  • 13. : ‫منابع‬ 1-Postgresql Documentation : http://www.postgresql.org/docs/