
تا همین چند سال پیش، اگر توسعهدهندهای میخواست دادهها را هم به شکل جدولی (SQL) نگه دارد و هم به صورت سندی (JSON)، معمولاً مجبور بود یا دو نسخه از داده داشته باشد یا از یک سری هک و دستکاری استفاده کند که آخرش هم باز یا کارایی پایین میآمد یا سازگاری دادهها به خطر میافتاد.
اما اوراکل در نسخه جدید خودش، یعنی Oracle Database 23ai، با معرفی قابلیت شگفتانگیز JSON Relational Duality View این مشکل را برای همیشه حل کرد.
به زبان خیلی ساده: به یک منبع داده نگاه میکنید، اما دو صورت متفاوت از آن را میبینید؛ برای برنامهنویس، JSON خالص و برای DBA، جداول رابطهای کامل و ایندکسدار.
در این مقاله آموزش اوراکل در بخش آموزش اوراکل SQL میخواهیم در مورد Duality View صحبت کنیم.
در اوراکل کوئریهای سنتی با LIKE یا شرطهای دقیق فقط همون چیزی رو برمیگردوندن که دقیقاً توی متن یا فیلد وجود داشت.
اما در دنیای امروز که هوش مصنوعی تبدیل به شریک مغز ما شده، جستجو باید مفهوم رو بفهمه، نه فقط کلمات رو.
پیشنهاد می شود نوشته زیر را مطالعه کنید:
در این مقاله شما می خوانید
Duality View چیست و چرا مهم است؟
Duality View نه یک جدول جدید میسازد، نه کپی داده ایجاد میکند.
این در واقع یک لایه منطقی بین دادههای رابطهای و نمای JSON است که بهطور همزمان:
- اجازه درج، حذف و بهروزرسانی از طریق JSON را میدهد.
- دادههای همان عملیات را در جداول رابطهای ذخیره میکند (بدون از دست دادن مزایای SQL).
- از قابلیتهای اوراکل مثل Index، Constraints و Transaction Management استفاده میکند.
- دسترسی REST API را بدون نیاز به لایه واسط اضافه فراهم میکند (به لطف ORDS).
در سیستمهای واقعی، این یعنی یک تیم توسعه و یک تیم دیتابیس میتوانند روی دادههای یکسان ولی با نماهای متفاوت کار کنند، بدون همپوشانی یا تضاد.
مقایسه روشهای ذخیرهسازی JSON با Duality View
| قابلیت | روش ذخیره JSON در CLOB/BLOB | Duality View |
|---|---|---|
| عملکرد جستجو | ضعیف (نیاز به Full Scan) | ایندکسهای بومی و بهینه |
| حفظ ACID | محدود | کامل و استاندارد |
| Query ترکیبی JSON + SQL | دشوار و سنگین | بومی، سریع و ساده |
| پشتیبانی از REST API | نیازمند لایه اضافی | مستقیم و بومی |
نمونه عملی از Duality View در Oracle 23ai
ایجاد جدول اصلی
CREATE TABLE customers (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
city VARCHAR2(50),
total_orders NUMBER
);
ایجاد Duality View
CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW customers_dv AS
SELECT id, name, city, total_orders
FROM customers;
درج داده با JSON
INSERT INTO customers_dv VALUES (
JSON_OBJECT(
'id' VALUE 1,
'name' VALUE 'Ali',
'city' VALUE 'Tehran',
'total_orders' VALUE 5
)
);
کوئری ترکیبی
SELECT name, total_orders
FROM customers_dv
WHERE city = 'Tehran';
نتیجه چیست؟
همان داده که با JSON وارد شده، در بطن دیتابیس به شکل رابطهای ذخیره شده و Queryها از ایندکسهای معمول استفاده میکنند.
سناریوی تست پیشنهادی در محیط واقعی
- ساخت جدول و Duality View مشابه بالا.
- درج دادهها از سه مسیر:
- SQL استاندارد
- JSON مستقیم
- API از طریق ORDS
- اجرای EXPLAIN PLAN برای مشاهده استفاده از ایندکس.
- تست Update/Insert/Delete هم از SQL و هم از JSON.
نکات بهینهسازی برای Duality Views
- همیشه ستونهای پرجستجو را ایندکس کنید.
- از JSON Schema Validation برای کنترل ورودیها استفاده کنید.
- در Query فقط فیلدهای موردنیاز را انتخاب کنید تا سربار کم شود.
- تغییرات ساختاری جدول را با بروزرسانی Duality View هماهنگ کنید.
خطاهای رایج در کار با Duality Views
- عدم هماهنگی کلیدهای JSON با ستونهای جدول.
- تغییر جدول بدون بازتعریف View.
- استفاده بیشازحد از توابعی مثل JSON_VALUE در کوئریهای سنگین.
سوالات متداول درباره Duality Views در اوراکل
خیر، این قابلیت در Oracle 23ai بهصورت پیشفرض فعال است.
بله، کافیست در SELECT مربوط به View از JOIN استفاده کنید.
Duality View در اوراکل ۲۳ai یک لایه منطقی است که دادههای رابطهای را هم به شکل جداول SQL و هم به صورت JSON در دسترس قرار میدهد، بدون اینکه نیاز به ذخیره دوباره داده باشد.
برخلاف View معمولی که فقط یک SELECT روی جداول اجرا میکند، Duality View امکان درج، ویرایش و حذف داده از طریق JSON را هم فراهم میکند.
خیر. برعکس، چون دادهها واقعاً در جداول رابطهای ذخیره میشوند، تمام عملیات خواندن و نوشتن از امکانات بهینهسازی اوراکل (مثل ایندکسها و Query Optimizer) استفاده میکند.
حتی کوئریهای پیچیده ترکیبی بین JSON و SQL هم به شکل کارآمد اجرا میشوند.
Duality View بهخصوص برای سیستمهایی مناسب است که:
- نیاز به APIهای JSON با عملکرد بالا دارند.
- تیم توسعه و تیم دیتابیس روی یک مجموعه داده کار میکنند.
- ساختار داده باید همزمان خوانایی JSON و جامعیت رابطهای را داشته باشد (مثل ERP و نرمافزارهای مالی).
جمعبندی
Duality View در اوراکل ۲۳ai یک تغییر پارادایم واقعی است.
این قابلیت به شما اجازه میدهد دادهها را یک بار ذخیره کنید، اما بسته به نیاز برنامه یا تیم، آن را هم به صورت JSON و هم به صورت SQL استفاده کنید.
این یعنی انعطافپذیری NoSQL + قدرت و امنیت SQL — و این دقیقاً همان چیزی است که معماریهای داده مدرن به آن نیاز دارند.
📥 اگر سوالی داری در مورد Duality View در Oracle داری، در بخش کامنتها بپرس.
سؤالی درباره این مقاله داری؟
اگر نکتهای در این مقاله برات مبهم بود یا خواستی بیشتر بدونی، همین حالا برام بنویس تا دقیق و صمیمی پاسخت رو بدم — مثل یه گفتوگوی واقعی 💬
برو به صفحه پرسش و پاسخ
دیدگاهتان را بنویسید