نرمال‌سازی داده‌ها در پایگاه داده سبب می‌شود برنامه‌نویسی آسان‌تر شود و توسعه‌ی نرم‌افزار به سادگی امکان‌پذیر باشد.

نرمال‌سازی پایگاه داده تا چندین سطح مختلف امکان‌پذیر و تعریف شده است. در این نوشته، نرمال‌سازی تا سطح ۳ که در عمل اغلب تا همین سطح به انجام می‌رسد را با مثال و توضیحات لازم مشاهده خواهید نمود.

برای آنکه فهم نرمال‌سازی ساده‌تر شود از داده‌های زیر به عنوان نمونه استفاده می‌کنیم:

اطلاعات مشتریسفارش
ش فاکتورش مشترینامنشانیتعداد ۱شرح ۱قیمت ۱تعداد ۲شرح ۲قیمت ۲تعداد ۳شرح ۳قیمت ۳
۱۰۰۱۱۱علیخیابان ۱۰۱۱۰مداد۱۰۰۲۰خودکار۲۰۰۳۰پاکن۵۰
۱۰۰۲۱۲رضاخیابان ۱۰۲۵خودکار۲۰۰
۱۰۰۳۱۱علیخیابان ۱۰۱۲۰پاکن۵۰۲مداد۱۰۰

نرمال‌سازی فرم اول - حذف گروه‌های تکراری

برای مثال در جدول نمونه، سفارش‌های مشتری را به جدولی جداگانه منتقل می‌کنیم. این کار سبب می‌شود فضای ذخیره‌سازی هدر نرود، ذخیره‌سازی و بازیابی اطلاعات ردیف‌های سفارش ساده‌تر شود، و محدودیت در تعداد ردیف‌های سفارش از بین برود:

ش فاکتور
۱۰۰۱
۱۰۰۲
۱۰۰۳
اطلاعات مشتریسفارش
ش فاکتورش ردیفش مشترینامنشانیتعدادشرحقیمت
۱۰۰۱۱۱۱علیخیابان ۱۰۱۱۰مداد۱۰۰
۱۰۰۱۲۱۱علیخیابان ۱۰۱۲۰خودکار۲۰۰
۱۰۰۱۳۱۱علیخیابان ۱۰۱۳۰پاکن۵۰
۱۰۰۲۱۱۲رضاخیابان ۱۰۲۵خودکار۲۰۰
۱۰۰۳۱۱۱علیخیابان ۱۰۱۲۰پاکن۵۰
۱۰۰۳۲۱۱علیخیابان ۱۰۱۲مداد۱۰۰

نرمال‌سازی فرم دوم - هر ستون باید به یک ستون کلیدی وابسته باشد

برای مثال در جدول نمونه، اطلاعات مشتری می‌تواند به جدول فاکتورها منتقل شود تا به ستون کلیدی «شماره‌ی فاکتور» وابسته شود. با انجام این مرحله از نرمال‌سازی، بخش دیگری از تکرارها از بین می‌رود، بخشی از افزونگی داده‌ها حذف می‌شود و به‌روزرسانی بانک ساده‌تر می‌گردد:

ش فاکتورش مشترینامنشانی
۱۰۰۱۱۱علیخیابان ۱۰۱
۱۰۰۲۱۲رضاخیابان ۱۰۲
۱۰۰۳۱۱علیخیابان ۱۰۱
سفارش
ش فاکتورش ردیفتعدادشرحقیمت
۱۰۰۱۱۱۰مداد۱۰۰
۱۰۰۱۲۲۰خودکار۲۰۰
۱۰۰۱۳۳۰پاکن۵۰
۱۰۰۲۱۵خودکار۲۰۰
۱۰۰۳۱۲۰پاکن۵۰
۱۰۰۳۲۲مداد۱۰۰

نرمال‌سازی فرم سوم - هر ستون باید به طور مستقیم به ستون کلیدی وابسته باشد

برای مثال در جدول نمونه، نام و نشانی مشتری باید به جدولی جداگانه منتقل شود. این کار سبب می‌شود به‌روزرسانی آسان‌تر شود و افزونگی داده‌ها کاهش یابد:

ش مشترینامنشانی
۱۱علیخیابان ۱۰۱
۱۲رضاخیابان ۱۰۲
ش فاکتورش مشتری
۱۰۰۱۱۱
۱۰۰۲۱۲
۱۰۰۳۱۱
ش فاکتورش ردیفتعدادشرحقیمت
۱۰۰۱۱۱۰مداد۱۰۰
۱۰۰۱۲۲۰خودکار۲۰۰
۱۰۰۱۳۳۰پاکن۵۰
۱۰۰۲۱۵خودکار۲۰۰
۱۰۰۳۱۲۰پاکن۵۰
۱۰۰۳۲۲مداد۱۰۰

نکته‌های اضافی برای نرمال‌سازی

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

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

منبع: http://www.troubleshooters.com/littstip/ltnorm.html

۶۹ نظر در مورد «نرمال سازی پایگاه داده به زبان ساده»

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر از شما
      هدف از انتخاب این نوشته این بود که نوآموزان به سادگی با نرمال‌سازی آشنا شوند
      وارد شدن به جزئیات و تخصصی کردن آن با عنوان و هدف مطلب در تناقض بود

  • سلام خیلی عالی بود ولی جا داشت که مثال های بیشتری هم زده میشد در کل خیلی خوب بود من که استفاده کردم و دست نویسنده درد نکنه
    تشکر

  • میر پدرام می‌گوید:

    مراحل نرمال سازی بیشتر از 3تاست همه رو توضیح ندادی
    تا سطح 5 نرمال سازی ساده است از 5 به بعد هست که پیچیده میشه
    مثال سطح 2 3 خوب هست ولی تو توضیحت شفاف توضیح ندادی .

    • امیرمسعود ایرانی می‌گوید:

      حق با شماست
      با این حال معمولا نرمال‌سازی تا مرحله‌ی ۳ انجام می‌شود و بیش از آن مشکل‌تر و تخصصی است
      و به همین دلیل شرح و مثال آن به سادگی مراحل ۱ تا ۳ نیست

        • مرسی از نوع پاسخگوییتون به افرادی که می خوان نظر منفی بدن اما لحن درستی استفاده نمیکنند.
          خیلی خوب توضیح دادید. ممنون

        • عنوانی که گذاشتی مفهوم بیان مطالب نرمال سازی هست به بیان ساده و روان شما اگه میخاستی تا سطح سه نرمال سازی رو توضیح بدید باید در عنوان ذکر میکردی تا سطح سه
          یا حداقل بالای متن قبل توضیح میگفتی این مطلب توضیح نرمال سازی تا سطح سه رو میده.
          فکر کن یه نفر سعی میکنه با مطالب شما ارتباط برقرار کنه بعدش میبینه مطلب کامل نیست.
          کسانی ایراد کامل نبودن مطلب رو گرفتن درست گفتن

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

    • امیرمسعود ایرانی می‌گوید:

      سلام

      متاسفانه پایگاه داده‌ای آماده در این موضوع ندارم
      سایت زیر مجموعه‌ی کاملی از مدل‌های رایگان پایگاه داده را جمع‌آوری و طراحی کرده است
      http://www.databaseanswers.org/data_models
      اگر می‌خواهید کار اساسی انجام بدهید، از مدل‌های موجود در نرم‌افزارهای بزرگ و متن‌باز مثل OpenERP استفاده کنید

  • راستی در مقطع کارشناسی رشته ی فناوری اطلاعات درسی به نام مدیریت پروژه و مدیریت فناوری اطلاعات داریم که در مدیریت پروژه مبحثی به نام pmbok داریم کارشناسی نرم افزار این درس رو نداره ؟؟؟؟؟

    • امیرمسعود ایرانی می‌گوید:

      سلام
      سوال شما نامفهوم است.
      لطفا برای ادامه‌ی گفتگو که به طور مستقیم به موضوع مرتبط نیست از ایمیل استفاده کنید
      amibct در gmail
      با تشکر

  • نرمال سازیتون غلطه چون در فرم سوم نرمال نباید هیچ غیرکلیدی به غیر کلید دیگری وابسته باشه اما در اینجا قیمت که یک صفت غیر کلید است به شرح که صفت غیر کلیدی دیگر است وابسته است

    • امیرمسعود ایرانی می‌گوید:

      با سلام و تشکر
      در مثال حالت سوم قیمت به شرح وابسته نیست
      قیمت ممکن است در طول زمان و بر اساس مشتری تغییر کند و به علاوه به کلید ترکیبی «شماره‌ی فاکتور»-«شماره‌ی ردیف» وابسته است نه به «شرح»
      با تشکر

  • سلام مطلب مفيدي بود تو كتابامون مثالي مث اين نداريم من تازه فهميدم كه چي مي خوندم!!!!
    و يه سوالي كه داشتم من ازمايشگاه پايگاه داده دارم حالا نرمالسازي لازمه استادمون گفته بدون ركورد نرمالسازي كنيد اينو ديگه نميدونم چيكار كنم اگر توضيح بديد ممنون مي شم
    با تشكر

    • امیرمسعود ایرانی می‌گوید:

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

  • ممنون از جواب سريعتون
    من ديتا بيس مطب دارم پس يعني مثلا احتمال مي دم از بيمارم چندين خط تلفن ثبت كنم پس ميام و نرمالسازيش مي كنم ميشه 1NF درسته
    البته بازم ازتون ممنونم خدا خيرت بده

    • امیرمسعود ایرانی می‌گوید:

      اگر برای هر بیمار می‌خواهید بیش از یک شماره ثبت کنید، باید شماره‌ی تلفن‌ها را در یک جدول دیگر ذخیره کنید تا جدول شما 1NF بشود
      ولی اگر چند ستون تعریف کنید مثلا شماره‌تلفن ۱ - شماره تلفن ۲ - شماره تلفن ۳ ... این دیگر 1NF نیست چون ممکن است برای یک کاربر کمتر از سه شماره و برای یک کاربر دیگر بیش از سه شماره تعریف شود که در هر دو صورت مشکل‌ساز است

  • سلام.
    واقعا عالی بود.
    من دیتابیس سیستم فروش یلیت قطار بصورت آنلاین و دارم. اگه مطلبی در این زمینه دارید، ممنون میشم که بهم کمک کنید.فقط یک کمی عجله دارم.
    بازم مرسی از لطفتان.

  • سلام يه سوال ديگه ازتون داشتم ادرس در جداول هم نرمال كنيم در سطح اول نرمالسازي قرارا مي گيره درسته؟ بعد مي تونيم خيابان و كوچه و پلاك به عنوان صفت هاي جدول ادرس قرار بديم؟
    در مورد نرمالسازي تلفن هم سوالم اينه كه، مي دانيم تلفن صفتي چند مقداريست پس به خاطر همين ميشه بدون در نظر گرفتن ركوردي نرمالش كرد؟

  • امیرمسعود ایرانی می‌گوید:

    با سلام

    ستون آدرس اگر اصولی نگاه کنیم نرمال نیست ولی معمولا از این مورد صرف‌نظر می‌شود
    نهایتش شهر و منطقه و شاید مختصات جغرافیایی را به صورت جداگانه هم نگهداری کنند

    تلفن هم اگر قرار است برای یک نفر چند شماره ثبت شود حتما باید جدولی جداگانه برای نگهداری آن ایجاد کنید

  • سلام
    از اطلاعاتتون خیلی تشکر می کنم من یه تحقیق در این نرمالسازی ها دارم می تونم از شما کمک بگیرم منتظر جوابتون هستم
    تشکر

    • امیرمسعود ایرانی می‌گوید:

      با سلام و سپاس
      متاسفانه بنده وقت آزاد کمی دارم و در انجام این کار کمک زیادی از دستم بر نمی‌آید

    • امیرمسعود ایرانی می‌گوید:

      نرمال‌سازی به فیلدهای مشترک در جدول‌های مختلف مربوط نیست
      بسته به نیاز و شکل برنامه‌نویسی ممکن است بخواهید فیلدهای مشترک را یک جا ذخیره کنید و فیلدهای غیرمشترک را در جدول‌های متفاوت
      یا به همین صورت فعلی برای هر موجودیت یک جدول جداگانه داشته باشید

  • سلام. وبلاگتون عالیه. فقط یه درخواست داشتم. اگه میشه نرمالسازی رو بیشتر توضیح بدین . از موجودیت های مشتری-پرسنل- سند- پرونده - مبلغ دریافت - گواهی امضا- استعلام- مدارک (دفتر ثبت اسناد رسمی) برای توضیح دادن استفاده کنید .لطفا

    • امیرمسعود ایرانی می‌گوید:

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

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      اگر در مورد خاصی مشکل دارید، لطفا از طریق ایمیل amibct در gmail با بنده تماس بگیرید
      در صورتی که قصد طراحی بانک به صورت کامل را داشته باشید، متاسفانه بنده فرصت کافی برای انجام این کار را ندارم

  • سلام آقای ایرانی عزیز
    یه سوال در خصوص مراحل نرمالسازی دارم که از سرچ کردن چیزی بدست نیاوردم ، ممنون میشم اگر که امکانش هست پاسخگو باشید .
    سوال: بعد از مرحله ی سوم ،چند مرحله نرمالسازی داریم و هر کدام چه نوع افزونگی را برطرف میکنند؟
    با سپاس فراوان .

  • سلام آقای ایرانی

    چطور از روی نمودار er نرمال سازی کنم؟؟؟
    باید هر جدول رو جداگانه نرمال سازی کنم یا همه رو باهم؟؟؟
    ممنون میشم اگه راهنمایی بفرمایید

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      برای نرمال‌سازی شما باید مفاهیم رو در ذهن خودتون بیارید
      نمودار به تنهایی کاری برای نرمال‌سازی انجام نمی‌ده

  • سلام مسعود خان
    اگر برای جدول آخر که کالا ها را در برمی گیرد هم نرمالسازی میکردیم بهتر نبود؟
    یک جدول برای کالاها شامل
    ش کالا نام کالا قیمت
    ۱ مداد ۱۰۰
    ۲ خودکار ۲۰۰
    ۳ پاک کن ۵۰
    و جدول آخر بدین صورت ویرایش می شد:
    ش فاکتور ش ردیف ش کالا تعداد
    ۱۰۰۱ ۱ ۱ ۱۰
    ۱۰۰۱ ۲ ۲ ۲۰
    ۱۰۰۱ ۳ ۳ ۳۰
    ۱۰۰۲ ۱ ۲ ۵
    ۱۰۰۳ ۱ ۳ ۲۰
    ۱۰۰۳ ۲ ۱ ۲

    • امیرمسعود ایرانی می‌گوید:

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

  • مطالب جالب و به درد به خور و ارزنده ای بود با تشکر
    ضمنا پیشنهاد امین خان نیز درست است ولی باید در نرمال سازی 4 انجام گیرد نرمال سازی اینجا تموم نمی شود

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      چنانچه بخشی را متوجه نشدید با ایمیل بنده amibct در gmail مکاتبه کنید. ولی اصل کار رو خودتون باید انجام بدید و اگر مشکلی بود بنده در خدمتم.

  • من میخام اکسس رو حرفه ای یاد بگیرم
    میتونید کمکم کنید.
    تا حالا با چتد تا کتاب اکترونیکی مفاهیم رو یاد گرفتم .
    حالا می خام یه پروژه رو تو اکسس پیاده کنم خیلی مشکل دارم
    فک کنم یه مثال اماده که قدم به قدم مراحل پیاده سازی یه بانک اطلاعات رو تو اکسس توضبح بده میتونه کمکم کنه و لی تو اینترنت پیداش نکردم!

    ممنون میشم کمکم کنید

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      متاسفانه بنده مدت زیادی است که از access استفاده نکردم و برخی چیزهای اون رو فراموش کردم
      به طور کلی بهترین راه برای آموزش سریع و در زمان محدود اینه که در کلاس شرکت کنید یا فیلم‌های آموزشی ترجیحا به زبان اصلی رو ببینید.
      با تشکر

  • پویان می‌گوید:

    سلام
    من یه جای مبهم تو ذهنم هستش. الان باید تمام شجول ها رو نرمال سازی کنم (موجودیت مشتری : نام و ...) یا اینکه باید کلی نگاه کردو از دید فاکتور مثل جدول نمونه به این مسئله نگاه کرد.؟
    سوال دوم. در متن قبلیم که جوابش رو هم دادین میشه یکم بهتر و باز تر توضیح بدید! یکم واسم گنگ
    ممنون میشم
    خیلی ممنون

    • امیرمسعود ایرانی می‌گوید:

      با سلام مجدد
      نرمال سازی اختیاری است ولی با نرمال کردن، کار خودتان در آینده با مشکل کمتری مواجه می‌شود
      در مورد سوال قبلی هم جدول‌ها هر کدام برای همان مرتبه از نرمال‌سازی که توضیح داده شده، نرمال هستند ولی برای مرتبه‌های بالاتر نرمال به حساب نمی‌آیند

  • عالی بود واقعا !! کتابو خوندم و با اینکه پایگاه رو بصورت عملی کار کردم زیاد متوجه نشدم به یه توضیح در نهایت سادگی احتیاج داشتم ...موفق باشید

    • امیرمسعود ایرانی می‌گوید:

      با سلام و وقت به خیر
      علت اینکه پایگاه داده را نرمال‌سازی می‌کنیم، مزایایی است که این کار برای ما ایجاد می‌کند. ولی زمان‌هایی هم ممکن است خارج کردن بخش‌هایی از پایگاه داده از حالت نرمال برای ما مزیت ایجاد کنند و برنامه‌نویس تصمیم بگیرد که این کار را انجام دهد.
      اینکه بدانید چه زمانی نرمال‌سازی مزیت است و چه زمانی خارج کردن از حالت نرمال، به تجربه و مطالعه نیاز دارد

    • امیرمسعود ایرانی می‌گوید:

      با سلام
      تاریخ فاکتور هم می‌تواند کنار شماره فاکتور قرار بگیرد
      اصولا فاکتور بدون شماره معنی ندارد و تاریخ هم جای شماره را نمی‌گیرد

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

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