کار با JSON در MySQL

مقدمه

نسخهٔ MySQL 5.7.8 نوع دادهٔ JSON را معرفی کرد که به شما اجازه می‌دهد به داده‌های موجود در اسناد JSON دسترسی داشته باشید.

پایگاه‌داده‌های SQL معمولاً ساختاری سخت‌گیرانه دارند. ذات Structured Query Language (SQL) این است که نوع داده و اندازهٔ آن را محدود می‌کند.

در مقابل، پایگاه‌داده‌های NoSQL انعطاف‌پذیری بیشتری در طراحی دارند. در این دیتابیس‌های بدون schema، محدودیت ساختاری تحمیل نمی‌شود و فقط داده ذخیره می‌شود.

نوع دادهٔ JSON در MySQL ترکیبی از مزیت‌های هر دو سیستم را در اختیار شما می‌گذارد:
بخشی از دیتابیس را می‌توانید ساختارمند نگه دارید و بخش‌هایی را انعطاف‌پذیر.

در نیمهٔ اول این مقاله:

  • طراحی دیتابیس با فیلد JSON

  • استفاده از توابع داخلی MySQL برای

    • Create

    • Read

    • Update

    • Delete

در نیمهٔ دوم:

  • استفاده از Eloquent ORM در Laravel

  • ساخت پنل ادمین برای:

    • نمایش محصولات

    • افزودن محصول

    • ویرایش محصول

    • حذف محصول


پیش‌نیازها

برای دنبال کردن این آموزش نیاز دارید به:

  • MySQL نسخه 5.7.8 یا بالاتر

  • PHP نسخه 7.3.24 یا بالاتر

  • آشنایی نسبی با SQL

  • آشنایی با PHP

  • آشنایی با Laravel

نصب Laravel در این آموزش با Composer در نظر گرفته شده.

نکته:
Laravel ابزاری به نام Sail دارد که با Docker محیط شامل:

  • MySQL

  • PHP

  • Composer

را آماده می‌کند.


مرحله ۱ — تعریف Schema دیتابیس

در این آموزش، دیتابیس مربوط به فروشگاه آنلاین محصولات الکترونیکی ساخته می‌شود.

به‌طور سنتی از مدل Entity–Attribute–Value (EAV) برای مقایسهٔ ویژگی‌های محصولات استفاده می‌شود.

اما با JSON می‌توان این کار را ساده‌تر انجام داد.

نام دیتابیس:

e_store

سه جدول دارد:

  • brands

  • categories

  • products

در جدول products فیلدی به نام:

attributes JSON

تعریف شده که نوع JSON دارد.

این یعنی می‌توانید تمام قابلیت‌های JSON در MySQL را روی آن استفاده کنید.


مرحله ۲ — ایجاد داده در فیلد JSON

برای اضافه کردن محصول می‌توانید:

روش اول — قرار دادن JSON به صورت رشته

مثال:

  • اندازه صفحه

  • رزولوشن

  • پورت‌ها

  • اسپیکر

همه داخل JSON ذخیره می‌شوند.


روش دوم — استفاده از تابع JSON_OBJECT

ساخت JSON به صورت:

JSON_OBJECT(key, value, ...)

همچنین می‌توانید از:

JSON_ARRAY()

برای آرایه‌ها استفاده کنید.


نکته دربارهٔ نرمال‌سازی JSON در MySQL

اگر یک کلید چندبار تکرار شود:

  • فقط اولین مقدار نگه داشته می‌شود

همچنین:

  • کلیدها مرتب می‌شوند

  • فاصله‌های اضافی حذف می‌شود


ساخت JSON با JSON_MERGE_PRESERVE

این تابع چند JSON را یکی می‌کند.

اگر کلیدی چندبار تکرار شود:

  • مقدارها به صورت آرایه ذخیره می‌شوند.

مثال خروجی:

{"network": ["GSM","CDMA","HSPA","EVDO"]}

بررسی نوع دادهٔ JSON

می‌توانید از:

JSON_TYPE()

استفاده کنید.


مرحله ۳ — خواندن داده از JSON

برای فیلد JSON نمی‌توان همیشه مثل معمول WHERE استفاده کرد.

باید از Path Expression استفاده کنید.

ساختار:

$
$.key
$.object.key

با تابع:

JSON_EXTRACT()

مثال:

تلویزیون‌هایی که HDMI و USB دارند.


شکل ساده‌تر با alias

می‌توانید به جای JSON_EXTRACT بنویسید:

attributes -> '$.ports.usb'

مرحله ۴ — آپدیت داده در JSON

سه تابع مهم:

JSON_INSERT

فقط اگر کلید وجود نداشته باشد اضافه می‌کند.


JSON_REPLACE

فقط اگر کلید وجود داشته باشد جایگزین می‌کند.


JSON_SET

اگر نبود اضافه می‌کند
اگر بود جایگزین می‌کند.


مرحله ۵ — حذف داده از JSON

برای حذف یک کلید:

JSON_REMOVE()

برای حذف رکورد کامل:

از DELETE همراه JSON_EXTRACT استفاده می‌شود.

مثال:

حذف گوشی‌هایی که Android Jellybean دارند.


مرحله ۶ — ساخت Migration در Laravel

ساخت پروژه:

composer create-project laravel/laravel estore-example

ساخت migration برای:

  • brands

  • categories

  • products

در migration جدول products:

$table->json('attributes');

ستون JSON ساخته می‌شود.

(فقط روی دیتابیس‌هایی که JSON را پشتیبانی کنند)


مرحله ۷ — ساخت Model ها

سه مدل:

  • Brand

  • Category

  • Product

در مدل Product:

protected $casts = [
'attributes' => 'array'
];

این باعث می‌شود JSON هنگام دریافت از دیتابیس:

تبدیل به آرایهٔ PHP شود.


مرحله ۸ — ساخت محصول (Camera)

ساخت Controller:

CameraController

در متد store:

اطلاعات فرم گرفته می‌شود و attributes به صورت آرایه ذخیره می‌شود.


مرحله ۹ — گرفتن اطلاعات محصول

متد:

show($id)

محصول را از دیتابیس می‌گیرد و نمایش می‌دهد.

در Blade:

$camera->attributes['processor']

دسترسی مستقیم به JSON.


مرحله ۱۰ — ویرایش محصول

می‌توانید فرم مشابه ایجاد محصول بسازید و دادهٔ قبلی را داخل آن قرار دهید.


جمع‌بندی

در این مقاله یاد گرفتید:

استفاده از نوع داده JSON در MySQL
ساخت JSON با JSON_OBJECT و JSON_ARRAY
خواندن داده با JSON_EXTRACT
آپدیت با JSON_SET / INSERT / REPLACE
حذف با JSON_REMOVE
اتصال MySQL JSON به Laravel Eloquent

ذخیره JSON به صورت array در مدل

از همراهی شما با پارمین کلود سپاسگزاریم.

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

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

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