نرمالسازی دادهها در پایگاه داده سبب میشود برنامهنویسی آسانتر شود و توسعهی نرمافزار به سادگی امکانپذیر باشد.
نرمالسازی پایگاه داده تا چندین سطح مختلف امکانپذیر و تعریف شده است. در این نوشته، نرمالسازی تا سطح ۳ که در عمل اغلب تا همین سطح به انجام میرسد را با مثال و توضیحات لازم مشاهده خواهید نمود.
برای آنکه فهم نرمالسازی سادهتر شود از دادههای زیر به عنوان نمونه استفاده میکنیم:
اطلاعات مشتری | سفارش | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
ش فاکتور | ش مشتری | نام | نشانی | تعداد ۱ | شرح ۱ | قیمت ۱ | تعداد ۲ | شرح ۲ | قیمت ۲ | تعداد ۳ | شرح ۳ | قیمت ۳ |
۱۰۰۱ | ۱۱ | علی | خیابان ۱۰۱ | ۱۰ | مداد | ۱۰۰ | ۲۰ | خودکار | ۲۰۰ | ۳۰ | پاکن | ۵۰ |
۱۰۰۲ | ۱۲ | رضا | خیابان ۱۰۲ | ۵ | خودکار | ۲۰۰ | ||||||
۱۰۰۳ | ۱۱ | علی | خیابان ۱۰۱ | ۲۰ | پاکن | ۵۰ | ۲ | مداد | ۱۰۰ |
نرمالسازی فرم اول – حذف گروههای تکراری
برای مثال در جدول نمونه، سفارشهای مشتری را به جدولی جداگانه منتقل میکنیم. این کار سبب میشود فضای ذخیرهسازی هدر نرود، ذخیرهسازی و بازیابی اطلاعات ردیفهای سفارش سادهتر شود، و محدودیت در تعداد ردیفهای سفارش از بین برود:
ش فاکتور |
---|
۱۰۰۱ |
۱۰۰۲ |
۱۰۰۳ |
اطلاعات مشتری | سفارش | ||||||
---|---|---|---|---|---|---|---|
ش فاکتور | ش ردیف | ش مشتری | نام | نشانی | تعداد | شرح | قیمت |
۱۰۰۱ | ۱ | ۱۱ | علی | خیابان ۱۰۱ | ۱۰ | مداد | ۱۰۰ |
۱۰۰۱ | ۲ | ۱۱ | علی | خیابان ۱۰۱ | ۲۰ | خودکار | ۲۰۰ |
۱۰۰۱ | ۳ | ۱۱ | علی | خیابان ۱۰۱ | ۳۰ | پاکن | ۵۰ |
۱۰۰۲ | ۱ | ۱۲ | رضا | خیابان ۱۰۲ | ۵ | خودکار | ۲۰۰ |
۱۰۰۳ | ۱ | ۱۱ | علی | خیابان ۱۰۱ | ۲۰ | پاکن | ۵۰ |
۱۰۰۳ | ۲ | ۱۱ | علی | خیابان ۱۰۱ | ۲ | مداد | ۱۰۰ |
نرمالسازی فرم دوم – هر ستون باید به یک ستون کلیدی وابسته باشد
برای مثال در جدول نمونه، اطلاعات مشتری میتواند به جدول فاکتورها منتقل شود تا به ستون کلیدی «شمارهی فاکتور» وابسته شود. با انجام این مرحله از نرمالسازی، بخش دیگری از تکرارها از بین میرود، بخشی از افزونگی دادهها حذف میشود و بهروزرسانی بانک سادهتر میگردد:
ش فاکتور | ش مشتری | نام | نشانی |
---|---|---|---|
۱۰۰۱ | ۱۱ | علی | خیابان ۱۰۱ |
۱۰۰۲ | ۱۲ | رضا | خیابان ۱۰۲ |
۱۰۰۳ | ۱۱ | علی | خیابان ۱۰۱ |
سفارش | ||||
---|---|---|---|---|
ش فاکتور | ش ردیف | تعداد | شرح | قیمت |
۱۰۰۱ | ۱ | ۱۰ | مداد | ۱۰۰ |
۱۰۰۱ | ۲ | ۲۰ | خودکار | ۲۰۰ |
۱۰۰۱ | ۳ | ۳۰ | پاکن | ۵۰ |
۱۰۰۲ | ۱ | ۵ | خودکار | ۲۰۰ |
۱۰۰۳ | ۱ | ۲۰ | پاکن | ۵۰ |
۱۰۰۳ | ۲ | ۲ | مداد | ۱۰۰ |
نرمالسازی فرم سوم – هر ستون باید به طور مستقیم به ستون کلیدی وابسته باشد
برای مثال در جدول نمونه، نام و نشانی مشتری باید به جدولی جداگانه منتقل شود. این کار سبب میشود بهروزرسانی آسانتر شود و افزونگی دادهها کاهش یابد:
ش مشتری | نام | نشانی |
---|---|---|
۱۱ | علی | خیابان ۱۰۱ |
۱۲ | رضا | خیابان ۱۰۲ |
ش فاکتور | ش مشتری |
---|---|
۱۰۰۱ | ۱۱ |
۱۰۰۲ | ۱۲ |
۱۰۰۳ | ۱۱ |
ش فاکتور | ش ردیف | تعداد | شرح | قیمت |
---|---|---|---|---|
۱۰۰۱ | ۱ | ۱۰ | مداد | ۱۰۰ |
۱۰۰۱ | ۲ | ۲۰ | خودکار | ۲۰۰ |
۱۰۰۱ | ۳ | ۳۰ | پاکن | ۵۰ |
۱۰۰۲ | ۱ | ۵ | خودکار | ۲۰۰ |
۱۰۰۳ | ۱ | ۲۰ | پاکن | ۵۰ |
۱۰۰۳ | ۲ | ۲ | مداد | ۱۰۰ |
نکتههای اضافی برای نرمالسازی
برای هر فهرست یک جدول ایجاد کنید
هنگام ایجاد بانک اطلاعاتی تمامی فهرستهای موجود را شناسایی و مستند کنید. سپس در صورت امکان و نیاز به اطلاعات آن، برای هر یک جدولی جداگانه ایجاد کنید
همیشه از کلیدهای اصلی بیمعنی استفاده کنید
استفاده از کلیدهای اصلی معنادار مانند شمارهی دانشجویی برای دانشجو میتواند در آینده مشکلساز شود. زیرا این مشخصات ممکن است تغییر کنند یا ممکن است این مقدار در آینده منحصر به فرد و یکسان نباشد.
ممنون متن خوبی بود. فقط میتونست تخصصیتر باشه
با سلام و تشکر از شما
هدف از انتخاب این نوشته این بود که نوآموزان به سادگی با نرمالسازی آشنا شوند
وارد شدن به جزئیات و تخصصی کردن آن با عنوان و هدف مطلب در تناقض بود
سلام خیلی عالی بود ولی جا داشت که مثال های بیشتری هم زده میشد در کل خیلی خوب بود من که استفاده کردم و دست نویسنده درد نکنه
تشکر
خیلی ساده و خوب توضیح داده بودید . عالی بود .
مراحل نرمال سازی بیشتر از ۳تاست همه رو توضیح ندادی
تا سطح ۵ نرمال سازی ساده است از ۵ به بعد هست که پیچیده میشه
مثال سطح ۲ ۳ خوب هست ولی تو توضیحت شفاف توضیح ندادی .
حق با شماست
با این حال معمولا نرمالسازی تا مرحلهی ۳ انجام میشود و بیش از آن مشکلتر و تخصصی است
و به همین دلیل شرح و مثال آن به سادگی مراحل ۱ تا ۳ نیست
عاااااااااااااااااااااااااااااااااااااااالی بوووووووووووووووووووووووووووووووود
ممنون
اتفاقا خیلی ابتدایی توضیح دادید. زیاد خوشم نیمد
نظر شما محترمه
مرسی از نوع پاسخگوییتون به افرادی که می خوان نظر منفی بدن اما لحن درستی استفاده نمیکنند.
خیلی خوب توضیح دادید. ممنون
عنوانی که گذاشتی مفهوم بیان مطالب نرمال سازی هست به بیان ساده و روان شما اگه میخاستی تا سطح سه نرمال سازی رو توضیح بدید باید در عنوان ذکر میکردی تا سطح سه
یا حداقل بالای متن قبل توضیح میگفتی این مطلب توضیح نرمال سازی تا سطح سه رو میده.
فکر کن یه نفر سعی میکنه با مطالب شما ارتباط برقرار کنه بعدش میبینه مطلب کامل نیست.
کسانی ایراد کامل نبودن مطلب رو گرفتن درست گفتن
با تشکر
توضیحی در ابتدای مطلب در خصوص تعداد سطوح نرمالسازی اضافه شد
با سلام
خیلی عالی بود ممنون
خیلی مختصر و مفید بود ولی اگه با اصطلاحات تخصصی توضیح داده میشد بهتر بود.
با تشکر
سلام
ممنون از مطالب مفیدتون.آقای ایرانی اگر امکانش هست میتونید جدول انبار نرمالشده بذارید؟ نیاز مبرم دارم.
سلام
متاسفانه پایگاه دادهای آماده در این موضوع ندارم
سایت زیر مجموعهی کاملی از مدلهای رایگان پایگاه داده را جمعآوری و طراحی کرده است
http://www.databaseanswers.org/data_models
اگر میخواهید کار اساسی انجام بدهید، از مدلهای موجود در نرمافزارهای بزرگ و متنباز مثل OpenERP استفاده کنید
یک دنیا ممنون . خیلی ماه هستین به خدا .
راستی در مقطع کارشناسی رشته ی فناوری اطلاعات درسی به نام مدیریت پروژه و مدیریت فناوری اطلاعات داریم که در مدیریت پروژه مبحثی به نام pmbok داریم کارشناسی نرم افزار این درس رو نداره ؟؟؟؟؟
ما چنین درسی نداشتیم
ممکنه تازه باشه یا در دانشگاه دیگری تدریس بشه
آیا فیلد نظارت یا انتقادات پیشنهادات اتمیک است؟
سلام
سوال شما نامفهوم است.
لطفا برای ادامهی گفتگو که به طور مستقیم به موضوع مرتبط نیست از ایمیل استفاده کنید
amibct در gmail
با تشکر
درود به شرفت هرچی میخوندم نمی فهمیدم تا اینکه…………………
متوجه نشدم
برای بهتر متوجه شدن، لازمه که قبل از خواندن این موضوع با برخی مفاهیم پایگاه داده و طراحی اون آشنا باشید
تا بدونید که در مراحل اول تا سوم چه تغییرات به وجود میان
نرمال سازیتون غلطه چون در فرم سوم نرمال نباید هیچ غیرکلیدی به غیر کلید دیگری وابسته باشه اما در اینجا قیمت که یک صفت غیر کلید است به شرح که صفت غیر کلیدی دیگر است وابسته است
با سلام و تشکر
در مثال حالت سوم قیمت به شرح وابسته نیست
قیمت ممکن است در طول زمان و بر اساس مشتری تغییر کند و به علاوه به کلید ترکیبی «شمارهی فاکتور»-«شمارهی ردیف» وابسته است نه به «شرح»
با تشکر
سلام مطلب مفیدی بود تو کتابامون مثالی مث این نداریم من تازه فهمیدم که چی می خوندم!!!!
و یه سوالی که داشتم من ازمایشگاه پایگاه داده دارم حالا نرمالسازی لازمه استادمون گفته بدون رکورد نرمالسازی کنید اینو دیگه نمیدونم چیکار کنم اگر توضیح بدید ممنون می شم
با تشکر
با سلام و تشکر
برای نرمالسازی جدولهای نیازی به رکورد نیست
اگر مفهوم نرمالسازی را کاملا متوجه بشوید میتوانید هر ستونی که در قوانین نرمالسازی اشکال دارد را شناسایی و آن را نرمال کنید
ممنون از جواب سریعتون
من دیتا بیس مطب دارم پس یعنی مثلا احتمال می دم از بیمارم چندین خط تلفن ثبت کنم پس میام و نرمالسازیش می کنم میشه ۱NF درسته
البته بازم ازتون ممنونم خدا خیرت بده
اگر برای هر بیمار میخواهید بیش از یک شماره ثبت کنید، باید شمارهی تلفنها را در یک جدول دیگر ذخیره کنید تا جدول شما ۱NF بشود
ولی اگر چند ستون تعریف کنید مثلا شمارهتلفن ۱ – شماره تلفن ۲ – شماره تلفن ۳ … این دیگر ۱NF نیست چون ممکن است برای یک کاربر کمتر از سه شماره و برای یک کاربر دیگر بیش از سه شماره تعریف شود که در هر دو صورت مشکلساز است
سلام.
واقعا عالی بود.
من دیتابیس سیستم فروش یلیت قطار بصورت آنلاین و دارم. اگه مطلبی در این زمینه دارید، ممنون میشم که بهم کمک کنید.فقط یک کمی عجله دارم.
بازم مرسی از لطفتان.
با سلام و سپاس
بنده چیز آمادهای در این زمینه ندارم
پیشنهاد میکنم این سایت رو ببنید ممکنه بتونید مورد مناسبی برای کارتون پیدا کنید
با تشکر بی نهایت از لطفتان.
ممنون که این قدر سریع جواب دادید.
سلام یه سوال دیگه ازتون داشتم ادرس در جداول هم نرمال کنیم در سطح اول نرمالسازی قرارا می گیره درسته؟ بعد می تونیم خیابان و کوچه و پلاک به عنوان صفت های جدول ادرس قرار بدیم؟
در مورد نرمالسازی تلفن هم سوالم اینه که، می دانیم تلفن صفتی چند مقداریست پس به خاطر همین میشه بدون در نظر گرفتن رکوردی نرمالش کرد؟
با سلام
ستون آدرس اگر اصولی نگاه کنیم نرمال نیست ولی معمولا از این مورد صرفنظر میشود
نهایتش شهر و منطقه و شاید مختصات جغرافیایی را به صورت جداگانه هم نگهداری کنند
تلفن هم اگر قرار است برای یک نفر چند شماره ثبت شود حتما باید جدولی جداگانه برای نگهداری آن ایجاد کنید
سلام
از اطلاعاتتون خیلی تشکر می کنم من یه تحقیق در این نرمالسازی ها دارم می تونم از شما کمک بگیرم منتظر جوابتون هستم
تشکر
با سلام و سپاس
متاسفانه بنده وقت آزاد کمی دارم و در انجام این کار کمک زیادی از دستم بر نمیآید
آقا اگه چند تا جدول باشه که این جداول چند تا فیلد مشترک دارن باید تک به تک نرمالسازی بکنیم یا همه رو با هم؟
نرمالسازی به فیلدهای مشترک در جدولهای مختلف مربوط نیست
بسته به نیاز و شکل برنامهنویسی ممکن است بخواهید فیلدهای مشترک را یک جا ذخیره کنید و فیلدهای غیرمشترک را در جدولهای متفاوت
یا به همین صورت فعلی برای هر موجودیت یک جدول جداگانه داشته باشید
سلام. وبلاگتون عالیه. فقط یه درخواست داشتم. اگه میشه نرمالسازی رو بیشتر توضیح بدین . از موجودیت های مشتری-پرسنل- سند- پرونده – مبلغ دریافت – گواهی امضا- استعلام- مدارک (دفتر ثبت اسناد رسمی) برای توضیح دادن استفاده کنید .لطفا
با سلام
مطلبی که شما میفرمایید به یک پروژهی چندین روزه و نیازمند تحلیل و بررسی دقیق میماند تا نمونهای برای یادگیری
برای طراحی پایگاه دادهی مورد نظر شما به صرف زمان و بررسی و گفتگو و جمعآوری اطلاعات نیاز است
سلام من دیتابیس پذیرش بیمارستان دارم میشه کمکم کنین
با سلام
اگر در مورد خاصی مشکل دارید، لطفا از طریق ایمیل amibct در gmail با بنده تماس بگیرید
در صورتی که قصد طراحی بانک به صورت کامل را داشته باشید، متاسفانه بنده فرصت کافی برای انجام این کار را ندارم
دمت گرم
سلام آقای ایرانی عزیز
یه سوال در خصوص مراحل نرمالسازی دارم که از سرچ کردن چیزی بدست نیاوردم ، ممنون میشم اگر که امکانش هست پاسخگو باشید .
سوال: بعد از مرحله ی سوم ،چند مرحله نرمالسازی داریم و هر کدام چه نوع افزونگی را برطرف میکنند؟
با سپاس فراوان .
با سلام
لطفا این مقاله در یکیپدیا را مشاهده بفرمایید
توضیحات مختصر و مفیدی به همراه فهرست انواع مختلف نرمالسازی در آن درج شده است
دو مرحله چهارم و پنجم داریم که باز سعی در ساده سازی مراحل قبلی دارن؛ نرمال سازی از یک قانون ریاضی پیروی می کنه؛ عملاً در قریب به اتفاق اوقات از مرحله سوم به بعض تجاوز نمی کنه؛ اما خب دونستنش بد نیست
سلام آقای ایرانی
چطور از روی نمودار er نرمال سازی کنم؟؟؟
باید هر جدول رو جداگانه نرمال سازی کنم یا همه رو باهم؟؟؟
ممنون میشم اگه راهنمایی بفرمایید
با سلام
برای نرمالسازی شما باید مفاهیم رو در ذهن خودتون بیارید
نمودار به تنهایی کاری برای نرمالسازی انجام نمیده
سلام مسعود خان
اگر برای جدول آخر که کالا ها را در برمی گیرد هم نرمالسازی میکردیم بهتر نبود؟
یک جدول برای کالاها شامل
ش کالا نام کالا قیمت
۱ مداد ۱۰۰
۲ خودکار ۲۰۰
۳ پاک کن ۵۰
و جدول آخر بدین صورت ویرایش می شد:
ش فاکتور ش ردیف ش کالا تعداد
۱۰۰۱ ۱ ۱ ۱۰
۱۰۰۱ ۲ ۲ ۲۰
۱۰۰۱ ۳ ۳ ۳۰
۱۰۰۲ ۱ ۲ ۵
۱۰۰۳ ۱ ۳ ۲۰
۱۰۰۳ ۲ ۱ ۲
با سلام
حق با شماست
البته معمولا در جدول سفارش قیمت محصول هم درج میشود
چون هم ممکن است قیمت در طول زمان تغییر کند و هم ممکن است یک کالا به افراد مختلف با قیمتهای مختلف فروخته شود
ولی در مورد شرح بهتر است که این جدول هم نرمال شود
مطالب جالب و به درد به خور و ارزنده ای بود با تشکر
ضمنا پیشنهاد امین خان نیز درست است ولی باید در نرمال سازی ۴ انجام گیرد نرمال سازی اینجا تموم نمی شود
سلام من یه پروژه دارم که باید نرمالسازیش رو انجام بدم…اما مشکل دارم…شما میتونین کمک کنین؟؟؟
با سلام
چنانچه بخشی را متوجه نشدید با ایمیل بنده amibct در gmail مکاتبه کنید. ولی اصل کار رو خودتون باید انجام بدید و اگر مشکلی بود بنده در خدمتم.
سلام من یک پایگاه داده طراحی کردم
میخام بدونم خوب نرمالش کردم یا نه
میشه کمکم کنید
با سلام
متاسفانه بنده در حال حاضر فرصت کافی برای این کار را ندارم
من میخام اکسس رو حرفه ای یاد بگیرم
میتونید کمکم کنید.
تا حالا با چتد تا کتاب اکترونیکی مفاهیم رو یاد گرفتم .
حالا می خام یه پروژه رو تو اکسس پیاده کنم خیلی مشکل دارم
فک کنم یه مثال اماده که قدم به قدم مراحل پیاده سازی یه بانک اطلاعات رو تو اکسس توضبح بده میتونه کمکم کنه و لی تو اینترنت پیداش نکردم!
ممنون میشم کمکم کنید
با سلام
متاسفانه بنده مدت زیادی است که از access استفاده نکردم و برخی چیزهای اون رو فراموش کردم
به طور کلی بهترین راه برای آموزش سریع و در زمان محدود اینه که در کلاس شرکت کنید یا فیلمهای آموزشی ترجیحا به زبان اصلی رو ببینید.
با تشکر
سلام
من یه جای مبهم تو ذهنم هستش. الان باید تمام شجول ها رو نرمال سازی کنم (موجودیت مشتری : نام و …) یا اینکه باید کلی نگاه کردو از دید فاکتور مثل جدول نمونه به این مسئله نگاه کرد.؟
سوال دوم. در متن قبلیم که جوابش رو هم دادین میشه یکم بهتر و باز تر توضیح بدید! یکم واسم گنگ
ممنون میشم
خیلی ممنون
با سلام مجدد
نرمال سازی اختیاری است ولی با نرمال کردن، کار خودتان در آینده با مشکل کمتری مواجه میشود
در مورد سوال قبلی هم جدولها هر کدام برای همان مرتبه از نرمالسازی که توضیح داده شده، نرمال هستند ولی برای مرتبههای بالاتر نرمال به حساب نمیآیند
عالی بود واقعا !! کتابو خوندم و با اینکه پایگاه رو بصورت عملی کار کردم زیاد متوجه نشدم به یه توضیح در نهایت سادگی احتیاج داشتم …موفق باشید
با سلام یک سوال داشتم
در طراحی بانک اطلاعاتی همیشه باید نرمال سازی انجام بشه
با سلام و وقت به خیر
علت اینکه پایگاه داده را نرمالسازی میکنیم، مزایایی است که این کار برای ما ایجاد میکند. ولی زمانهایی هم ممکن است خارج کردن بخشهایی از پایگاه داده از حالت نرمال برای ما مزیت ایجاد کنند و برنامهنویس تصمیم بگیرد که این کار را انجام دهد.
اینکه بدانید چه زمانی نرمالسازی مزیت است و چه زمانی خارج کردن از حالت نرمال، به تجربه و مطالعه نیاز دارد
با سلام و تشکر فراوان خیلی مفید و به موقع بود… فردا امتحان پایگاه داده دارم
خیلی ساده و عالی . تشکر
با سلام و احترام. خیلی عالی و ساده بود . قابل فهم و مفید بود. ممنون
سلام ما اگر در کنار شماره فاکتور تاریخ فاکتور داشتیم چجوری میشد ؟
اگر نخوایم شماره ردیف نعریف کنیم ؟
با سلام
تاریخ فاکتور هم میتواند کنار شماره فاکتور قرار بگیرد
اصولا فاکتور بدون شماره معنی ندارد و تاریخ هم جای شماره را نمیگیرد
سلام وقتتون بخیر
توضیحات راحت و قابل فهم بود
ممنون