Redundancy در علوم مهندسی به هر نوعی از منابع موازی اشاره دارد که یکسان هستند و در مباحث مرتبط با پایگاه داده نیز به هر نوع دادهٔ یکسانی که در چند جدول مختلف نگهداری گردد اصطلاحاً Data Redundancy (افزونگی داده) گفته میشود. برای درک بهتر این موضوع فرض کنیم در یک فروشگاه آنلاین جدولی داریم تحت عنوان sales
که در آن آمار فروش را نگهداری میکنیم به طوری که در هر رکورد آدرس پُستی خریدار نیز ذخیره میشود اما این در حالی است که در جدولی مثلاً تحت عنوان customers
نیز آدرس کاربران ثبت گردیده است. در سادهترین حالت ممکن، آدرس هر کاربر در دو جدول ذخیره شده است اما فرض کنیم کاربری خاص چند بار اقدام به خرید کرده است که در چنین شرایطی به ازای رکوردهای ثبتشده در جدول sales
آدرس وی نیز ذخیره شده است که این مسئله افزونگی داده را دوچندان خواهد ساخت!
افزونگی را اساساً میتوان به عنوان یکی از اشتباهات رایج در طراحی دیتابیس قلمداد کرد به طوری که برای سیستمهای کوچکی همچون یک وبلاگ ساده چالش چندانی به دنبال نخواهد داشت اما در سیستمهای پیچیدهای همچون CRM یا ERP هر نوعی از افزونگی نه تنها منجر به افزایش حجم دیتابیس خواهد شد، بلکه در عملیاتی همچون بهروزرسانی یا حذف دادهها ممکن است ضریب خطا بالا رود.
افزونگی داده چگونه مشکلزا خواهد شد؟
برای درک بهتر این موضوع، مجدد به مثال فروشگاه فرضی فوق برمیگردیم. فرض کنیم اطلاعات کاربری خاص در جدول customers
به صورت زیر ثبت شده است:
+----+--------+----------+----------------------------+---------+
| id | name | lastname | email | address |
+----+--------+----------+----------------------------+---------+
| 1 | Behzad | Moradi | me.behzad.moradi@gmail.com | Iran |
+----+--------+----------+----------------------------+---------+
همچنین لیست خریدهای این کاربر در جدول sales
نیز به شرح زیر است:
+---------+---------+---------+---------+
| user_id | sale_no | value | address |
+---------+---------+---------+---------+
| 1 | 1 | 1000000 | Iran |
| 1 | 2 | 500000 | Iran |
| 1 | 3 | 250000 | Iran |
+---------+---------+---------+---------+
همانطور که ملاحظه میشود، این کاربر سه خرید به ثبت رسانده است و این در حالی است که برای هر سه رکورد ستون address
نیز با دیتای مناسبی تکمیل شده است. حال اگر فرض کنیم که مرسولات هنوز برای خریدار ارسال نشده و این کاربر بخواهد آدرس خود را تغییر دهد، در این صورت چهار بار باید عملیات آپدیت صورت گیرد؛ یک بار در جدول customers
و سه بار هم در جدول sales
و نیاز به توضیح نیست که این نوع معماری دیتابیس اصلاً اصولی نیست و بار اضافی بر سرور دیتابیس تحمیل میکند.
چگونه میتوانیم مشکل افزونگی داده را مرتفع سازیم؟
برای این منظور، نیاز است تا با مفهومی تحت عنوان Normalization آشنا باشیم. به زبان ساده، منظور از نرمالسازی پایگاه داده این است که با سازماندهی دادهها در جداول و ستونهای مختلف این تضمین را ایجاد کنیم که وابستگی به درستی مابین جداول برقرار شده و از سوی دیگر هرگز دادههای تکراری در دو یا بیش از دو جدول وجود ندارد که در نهایت این تضمین ایجاد خواهد شد که عملیات CRUD بدون هیچگونه نقصی ایجاد گردد (سرواژهٔ CRUD از ابتدای واژگان Update ،Read ،Create و Delete گرفته شده است.)
برای درک بهتر این موضوع، در مثال فرضی فروشگاه آنلاینی که پیش از این مورد بررسی قرار دادیم، به سادگی میتوان ستون address
را از جدول sales
حذف نمود و با استفاده از مقداری که در ستون user_id
ذخیره میگردد، هر زمانی که نیاز به اطلاعات خریدار همچون نام، نامخانوادگی، آدرس و یا ایمیل وی داشتیم یک اصطلاحاً JOIN
به جدول customers
بزنیم و اطلاعات مد نظر خود را فراخوانی کنیم. در چنین شرایطی، چنانچه کاربر بخواهد به طور مثال آدرس خود را بهروزرسانی کند، عملیات آپدیت فقط روی جدول customers
و آن هم تنها یک بار صورت خواهد پذیرفت که این سیاست نه تنها بار روی سرور را کاهش میدهد، بلکه ضریب خطای بهروزرسانی دادهها نیز کاهش خواهد یافت.
جمعبندی
روی هم رفته Data Redundancy چیزی است که به دلیل برنامهریزی ناکافی در مراحل ابتدایی توسعهٔ نرمافزار بهخصوص معماری دیتابیس ایجاد میگردد که با این تفاسیر چنانچه ابتدا به ساکن دید روشنی داشته باشیم نسبت به اپلیکیشنی که قرار است توسعه دهیم، در این صورت خواهیم توانست تا حد ممکن جلوی هرگونه افزونگی را بگیریم.