آخرین بروزرسانی 1 روز قبل

فرم عادی دوم (2NF) چیست؟

آیا جدول‌های شما بهینه هستند؟ بررسی فرم نرمال دوم (2NF)

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

قبل از اینکه بریم سراغ 2NF، یه یادآوری کوچیک از "فرم نرمال اول" یا 1NF داشته باشیم. یه جدول زمانی 1NF هست که هر خونه‌اش (سلولش) فقط یه مقدار داشته باشه. یعنی نباید توی یه سلول چند تا مقدار پشت سر هم لیست شده باشن.

حالا، 2NF چی میگه؟ یه جدول زمانی 2NF هست که:

  1. اول اینکه، باید 1NF باشه. (یعنی هر خونه فقط یه مقدار داشته باشه)
  2. دوم اینکه، هیچکدوم از ستون‌هایی که جزئی از کلید اصلی نیستند، نباید به بخشی از کلید اصلی وابسته باشن.

اجازه بدید یه کم این تعریف رو باز کنیم. کلید اصلی (Primary Key) چیه؟ کلید اصلی یه ستون یا مجموعه‌ای از ستون‌هاست که هر سطر جدول رو به صورت یکتا مشخص می‌کنه. مثلا کد ملی برای هر نفر یه کلید اصلی خوبه، چون هیچ دو نفری کد ملی یکسان ندارن.

وابستگی جزئی (Partial Dependency) چیه؟ وابستگی جزئی زمانی اتفاق میوفته که یه ستون غیرکلیدی (یعنی ستونی که جزئی از کلید اصلی نیست) فقط به یه قسمت از کلید اصلی وابسته باشه، نه به کل اون. این وابستگی جزئی همون جایی هست که 2NF وارد عمل میشه و جلوی تکرار اطلاعات رو می گیره.

یه مثال ساده

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

  • شناسه‌ی سفارش (OrderID)
  • شناسه‌ی محصول (ProductID)
  • نام محصول (ProductName)
  • تعداد (Quantity)
  • قیمت واحد (UnitPrice)

توی این جدول، کلید اصلی می‌تونه ترکیب "شناسه‌ی سفارش" و "شناسه‌ی محصول" باشه. چرا؟ چون ممکنه یه مشتری چند تا محصول مختلف رو توی یه سفارش بخره.

حالا به ستون "نام محصول" دقت کنید. آیا "نام محصول" به کلید اصلی (یعنی ترکیب "شناسه‌ی سفارش" و "شناسه‌ی محصول") وابسته است؟ نه! "نام محصول" فقط به "شناسه‌ی محصول" وابسته است. یعنی اگه "شناسه‌ی محصول" رو داشته باشیم، می‌تونیم "نام محصول" رو پیدا کنیم، مهم نیست کدوم سفارش داره این محصول رو می‌خره.

این یعنی ما یه وابستگی جزئی داریم و جدولمون توی فرم نرمال دوم نیست.

چطور جدول رو به 2NF تبدیل کنیم؟

برای اینکه این جدول رو به 2NF تبدیل کنیم، باید ستون "نام محصول" رو از جدول سفارش‌ها حذف کنیم و یه جدول جدید بسازیم به اسم "محصولات". جدول "محصولات" شامل ستون‌های "شناسه‌ی محصول" و "نام محصول" میشه. حالا جدول سفارش‌هامون فقط ستون‌های "شناسه‌ی سفارش"، "شناسه‌ی محصول"، "تعداد" و "قیمت واحد" رو داره. با این کار، وابستگی جزئی رو از بین بردیم و دیگه اسم محصول توی هر سفارش تکرار نمیشه.

جدول اصلی (قبل از 2NF) جدول محصولات (بعد از 2NF) جدول سفارش‌ها (بعد از 2NF)
OrderID ProductID ProductName Quantity UnitPrice
1 101 لپ تاپ 1 1200
1 102 موس 1 20
2 101 لپ تاپ 1 1200
ProductID ProductName
101 لپ تاپ
102 موس
OrderID ProductID Quantity UnitPrice
1 101 1 1200
1 102 1 20
2 101 1 1200

چرا 2NF مهمه؟

استفاده از 2NF چندتا مزیت داره:

  • جلوگیری از تکرار اطلاعات: همونطور که دیدیم، دیگه لازم نیست اسم محصول رو برای هر سفارش تکرار کنیم.
  • کاهش حجم پایگاه داده: وقتی اطلاعات تکراری رو حذف می‌کنیم، حجم پایگاه دادمون هم کمتر میشه.
  • بهبود یکپارچگی داده‌ها: اگه اسم یه محصول رو بخوایم تغییر بدیم، فقط کافیه یه جا (توی جدول محصولات) تغییرش بدیم. لازم نیست توی همه‌ی سفارش‌هایی که اون محصول رو دارن، اسمش رو عوض کنیم.
  • افزایش سرعت جستجو: پایگاه داده سریع تر می شه.

یه نمونه کد SQL

فرض کنید جدول‌های زیر رو داریم:

        -- جدول محصولات
        CREATE TABLE Products (
            ProductID INT PRIMARY KEY,
            ProductName VARCHAR(255)
        );

        -- جدول سفارش‌ها
        CREATE TABLE Orders (
            OrderID INT,
            ProductID INT,
            Quantity INT,
            UnitPrice DECIMAL(10, 2),
            PRIMARY KEY (OrderID, ProductID),
            FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
        );
    

توی این کد، ما دو تا جدول داریم: `Products` (محصولات) و `Orders` (سفارش‌ها). جدول `Orders` یه کلید خارجی (Foreign Key) به جدول `Products` داره، که ارتباط بین این دوتا جدول رو مشخص می‌کنه.

خلاصه

فرم نرمال دوم (2NF) یه راهکار مهم برای بهینه‌سازی ساختار پایگاه داده‌هاست. با از بین بردن وابستگی‌های جزئی، می‌تونیم از تکرار اطلاعات جلوگیری کنیم، حجم پایگاه داده رو کاهش بدیم و یکپارچگی داده‌ها رو بهبود ببخشیم. این کار باعث میشه که پایگاه داده‌ی ما کارآمدتر و قابل اعتمادتر بشه. امیدوارم این مقاله براتون مفید بود و با این مفهموم آشناهی پیدا کرده باشید.

متشکرم که وقت گذاشتید و این مقاله رو خوندید. اگر سوالی دارید، خوشحال میشم پاسخ بدم.

کلمات کلیدی

فرم نرمال دوم، 2NF، پایگاه داده، بهینه سازی، وابستگی جزئی، کلید اصلی، کلید خارجی، تکرار داده، یکپارچگی داده

فرم نرمال دوم (2NF) دقیقا چیه؟
یه جدول زمانی 2NF هست که اول 1NF باشه و دوم هیچکدوم از ستون‌های غیرکلیدی به بخشی از کلید اصلی وابسته نباشن.
وابستگی جزئی یعنی چی؟
وابستگی جزئی یعنی یه ستون غیرکلیدی فقط به یه قسمت از کلید اصلی وابسته باشه، نه به کل اون.
چرا باید از 2NF استفاده کنیم؟
برای جلوگیری از تکرار اطلاعات، کاهش حجم پایگاه داده و بهبود یکپارچگی داده‌ها.
چطور یه جدول رو به 2NF تبدیل کنیم؟
معمولا باید جدول رو به دو یا چند جدول کوچکتر تقسیم کنیم و وابستگی‌های جزئی رو از بین ببریم.
آیا 2NF تنها فرم نرمالی هست که باید بهش توجه کنیم؟
نه، فرم‌های نرمال دیگه‌ای هم وجود دارن (مثل 3NF، BCNF و غیره) که برای بهینه‌سازی بیشتر پایگاه داده‌ها استفاده میشن.
مخفف Second Normal Form چیست؟
مخفف Second Normal Form کلمه 2NF می باشد.
2NF مخفف چیست؟
2NF مخفف Second Normal Form می باشد.

کلمه 2NF مخفف چیست؟

وقتی به 2NF به عنوان مخفف Second Normal Form اشاره می کنیم، منظور این است که 2NF با گرفتن حروف اولیه هر کلمه مهم در Second Normal Form تشکیل می شود. این فرآیند عبارت اصلی را به شکلی کوتاه تر و قابل مدیریت تر فشرده می کند و در عین حال معنای اصلی خود را حفظ می کند. بر اساس این تعریف، 2NF مخفف Second Normal Form است.

به اشتراک گذاشتن این مطلب در شبکه های اجتماعی

امتیاز شما به این مطلب

امتیاز: 5 از 5 (مجموع 1 رای)

اولین نفری باشید که در مورد این مقاله نظر می دهید!

8768- V2
Terms & Conditions | Privacy Policy

techfeed.ir© 2024 All rights reserved