نرمال سازی پایگاه داده به زبان ساده

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

۶۹ دیدگاه برای نرمال سازی پایگاه داده به زبان ساده

  1. sara می‌گوید:

    ممنون متن خوبی بود. فقط می‌تونست تخصصی‌تر باشه

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

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

  2. بنیامین می‌گوید:

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

  3. aaasd می‌گوید:

    خیلی ساده و خوب توضیح داده بودید . عالی بود .

  4. میر پدرام می‌گوید:

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

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

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

  5. محمد می‌گوید:

    عاااااااااااااااااااااااااااااااااااااااالی بوووووووووووووووووووووووووووووووود
    ممنون

    • ---------- می‌گوید:

      اتفاقا خیلی ابتدایی توضیح دادید. زیاد خوشم نیمد

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

        نظر شما محترمه

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

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

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

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

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

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

  6. مصطفی می‌گوید:

    با سلام
    خیلی عالی بود ممنون

  7. eisa می‌گوید:

    خیلی مختصر و مفید بود ولی اگه با اصطلاحات تخصصی توضیح داده میشد بهتر بود.
    با تشکر

  8. yeganeh می‌گوید:

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

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

      سلام

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

  9. یگانه می‌گوید:

    یک دنیا ممنون . خیلی ماه هستین به خدا .

  10. yeganeh می‌گوید:

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

  11. دانشجو می‌گوید:

    آیا فیلد نظارت یا انتقادات پیشنهادات اتمیک است؟

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

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

  12. گون دوغان می‌گوید:

    درود به شرفت هرچی میخوندم نمی فهمیدم تا اینکه…………………

  13. المیرا می‌گوید:

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

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

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

  14. محمد می‌گوید:

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

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

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

  15. محمد می‌گوید:

    ممنون از جواب سریعتون
    من دیتا بیس مطب دارم پس یعنی مثلا احتمال می دم از بیمارم چندین خط تلفن ثبت کنم پس میام و نرمالسازیش می کنم میشه ۱NF درسته
    البته بازم ازتون ممنونم خدا خیرت بده

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

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

  16. yasaman می‌گوید:

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

  17. yasaman می‌گوید:

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

  18. محمد می‌گوید:

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

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

    با سلام

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

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

  20. Anna می‌گوید:

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

  21. محمد می‌گوید:

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

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

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

  22. کیانا می‌گوید:

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

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

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

  23. دانشجو می‌گوید:

    سلام من دیتابیس پذیرش بیمارستان دارم میشه کمکم کنین

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

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

  24. آرمان می‌گوید:

    دمت گرم

  25. نازیلا می‌گوید:

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

  26. منصور می‌گوید:

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

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

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

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

  27. امین می‌گوید:

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

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

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

  28. مختار می‌گوید:

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

  29. ghazaale می‌گوید:

    سلام من یه پروژه دارم که باید نرمالسازیش رو انجام بدم…اما مشکل دارم…شما میتونین کمک کنین؟؟؟

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

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

  30. sama می‌گوید:

    سلام من یک پایگاه داده طراحی کردم
    میخام بدونم خوب نرمالش کردم یا نه
    میشه کمکم کنید

  31. sama می‌گوید:

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

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

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

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

  32. پویان می‌گوید:

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

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

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

  33. شیما می‌گوید:

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

  34. احسان می‌گوید:

    با سلام یک سوال داشتم
    در طراحی بانک اطلاعاتی همیشه باید نرمال سازی انجام بشه

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

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

  35. علی می‌گوید:

    با سلام و تشکر فراوان خیلی مفید و به موقع بود… فردا امتحان پایگاه داده دارم

  36. fateme می‌گوید:

    خیلی ساده و عالی . تشکر

  37. نیلوفر سخایی می‌گوید:

    با سلام و احترام. خیلی عالی و ساده بود . قابل فهم و مفید بود. ممنون

  38. سروش می‌گوید:

    سلام ما اگر در کنار شماره فاکتور تاریخ فاکتور داشتیم چجوری میشد ؟
    اگر نخوایم شماره ردیف نعریف کنیم ؟

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

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

  39. محسن می‌گوید:

    سلام وقتتون بخیر
    توضیحات راحت و قابل فهم بود
    ممنون

پاسخ دادن به Anna لغو پاسخ

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

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>