جلسه 9نرمالسازي 4هدف از نرمالسازي، فرم اول نرمال، فرم دوم نرمال، فرم سوم نرمال
هدف اصلی نرمالسازی:
- کاهش افزونگی دادهها (Data Redundancy): با حذف دادههای تکراری، فضای ذخیرهسازی کمتری مصرف شده و احتمال بروز ناهماهنگی بین دادههای مشابه کاهش مییابد.
- بهبود یکپارچگی دادهها (Data Integrity): اطمینان از صحت و سازگاری دادهها در سراسر پایگاه داده. این امر از طریق کاهش افزونگی و حذف ناهنجاریها حاصل میشود.
- جلوگیری از ناهنجاریهای درج، حذف و بهروزرسانی (Insertion, Deletion, and Update Anomalies):
- ناهنجاری درج: مشکلاتی که هنگام اضافه کردن دادههای جدید رخ میدهند، مثلاً مجبور باشیم دادههای تکراری را وارد کنیم.
- ناهنجاری حذف: از دست دادن ناخواسته دادههای دیگر هنگام حذف یک رکورد خاص.
- ناهنجاری بهروزرسانی: نیاز به بهروزرسانی یک داده در چندین مکان، که منجر به عدم سازگاری در صورت فراموش شدن بهروزرسانی برخی از آنها میشود.
- سادهسازی و بهینهسازی پرسوجوها (Queries): پایگاه داده نرمالشده، پرسوجوهای پیچیدهتر را آسانتر و کارآمدتر میکند.
فرم اول نرمال (1NF)
اولین و پایهایترین سطح نرمالسازی است. برای اینکه یک جدول در فرم اول نرمال باشد، باید شرایط زیر را داشته باشد:
- اتمی بودن مقادیر: هر ستون (Attribute) باید حاوی مقادیر اتمی باشد. یعنی هر سلول از جدول نباید مجموعهای از مقادیر (مانند لیست یا آرایه) را در خود نگه دارد، بلکه باید یک مقدار واحد باشد.
- عدم وجود گروههای تکراری: نباید هیچ ستون تکراری در جدول وجود داشته باشد.
- کلید اصلی منحصر به فرد: هر ردیف (Tuple) در جدول باید توسط یک کلید اصلی (Primary Key) به طور منحصر به فرد شناسایی شود.
چگونه به 1NF برسیم؟
اگر جدولی شرایط 1NF را نداشته باشد، میتوان با انجام اقدامات زیر آن را به 1NF تبدیل کرد:
- مقادیر غیر اتمی را به ردیفهای جداگانه تقسیم کنید.
- گروههای تکراری را به ستونهای جداگانه تبدیل کنید یا آنها را به جداول جدید منتقل کنید.
فرم دوم نرمال (2NF)
برای اینکه یک جدول در فرم دوم نرمال باشد، باید دو شرط اصلی را داشته باشد:
- در فرم اول نرمال (1NF) باشد.
- هر ستون غیر کلیدی (Non-key Attribute) باید وابستگی کامل تابعی (Fully Functionally Dependent) به کلید اصلی داشته باشد.
وابستگی تابعی (Functional Dependency): به طور خلاصه، اگر مقدار ستون A مقدار ستون B را تعیین کند، میگوییم B به A وابسته تابعی است (A -> B).
وابستگی کامل تابعی: اگر کلید اصلی یک کلید مرکب (Composite Key) باشد (یعنی از ترکیب چند ستون تشکیل شده باشد)، هر ستون غیر کلیدی باید به کل کلید اصلی وابسته باشد، نه فقط به بخشی از آن.
چگونه به 2NF برسیم؟
اگر جدولی در 1NF باشد اما در 2NF نباشد (یعنی وابستگی جزئی داشته باشد)، میتوان با تفکیک جدول به جداول کوچکتر و ایجاد روابط بین آنها، آن را به 2NF تبدیل کرد:
- یک جدول جدید برای ستونهایی که به بخشی از کلید اصلی وابسته هستند، ایجاد کنید.
- کلید اصلی جدول جدید باید شامل آن بخشی از کلید اصلی باشد که وابستگی جزئی به آن وجود داشت.
- ستونهای وابسته جزئی را از جدول اصلی حذف کنید.
فرم سوم نرمال (3NF)
برای اینکه یک جدول در فرم سوم نرمال باشد، باید دو شرط اصلی را داشته باشد:
- در فرم دوم نرمال (2NF) باشد.
- هیچ ستون غیر کلیدی نباید وابستگی تابعی انتقالی (Transitive Functional Dependency) به کلید اصلی داشته باشد.
وابستگی انتقالی: زمانی رخ میدهد که ستون A کلید اصلی باشد، ستون B به A وابسته باشد (A -> B) و ستون C به B وابسته باشد (B -> C). در این حالت، C به طور انتقالی به A وابسته است (A -> B -> C). به عبارت دیگر، یک ستون غیر کلیدی نباید به ستون غیر کلیدی دیگری وابسته باشد.
چگونه به 3NF برسیم؟
اگر جدولی در 2NF باشد اما در 3NF نباشد، میتوان با تفکیک جدول به جداول کوچکتر و ایجاد روابط بین آنها، آن را به 3NF تبدیل کرد:
- جدولی برای ستونهای غیر کلیدی که به یکدیگر وابسته هستند، ایجاد کنید.
- کلید اصلی جدول جدید باید ستون غیر کلیدی باشد که مبنای وابستگی انتقالی بوده است.
- ستونهای وابسته انتقالی را از جدول اصلی حذف کنید و به جای آن، کلید اصلی جدول جدید را به عنوان کلید خارجی (Foreign Key) در جدول اصلی قرار دهید.
خلاصه نکات کلیدی:
- هدف: کاهش افزونگی، بهبود یکپارچگی، جلوگیری از ناهنجاریها.
- 1NF: مقادیر اتمی، عدم وجود گروههای تکراری.
- 2NF: در 1NF بودن + عدم وابستگی جزئی ستونهای غیر کلیدی به کلید اصلی (مربوط به کلیدهای مرکب).
- 3NF: در 2NF بودن + عدم وابستگی انتقالی ستونهای غیر کلیدی به کلید اصلی.