<--- Cannot embed stylesheet: [Errno 2] No such file or directory: 'html4css1.css' --->

هنجارسازی (نرمال سازی) Normalization

احمد یوسفان ، دانشگاه کاشان

نرمال سازی پایگاه داده روندی برای ساماندهی ویژگی‌ها (ستون‌ها) و رابطه‌ها (جدول‌ها) در یک پایگاه داده‌ی رابطه‌ای به منظور کاهش افزونگی داده است.

هدف از نرمال سازی؟

یک فروشگاه را در نظر بگیرید که اطلاعاتی مانند زیر را بخواهد در خود نگهداری کند.

جدول فروش یک فروشگاه
شماره جنس نام جنس موجودی شماره فاکتور فروش میزان فروش
1 شکر 1000 1 12
      4 14
      5 5
2 نمک 1500 2 10
      4 20
      5 30
      3 40

1   نرمال سطح ۱

1.1   تبدیل شده به نرمال ۱

جدول فروش یک فروشگاه
شماره جنس نام جنس موجودی شماره فاکتور فروش میزان فروش
1 شکر 1000 1 12
1 شکر 1000 4 14
1 شکر 1000 5 5
2 نمک 1500 2 10
2 نمک 1500 4 20
2 نمک 1500 5 30
2 نمک 1500 3 40

کلید؟

ترکیب «شماره جنس» و «شماره فاکتور فروش» کلید را تشکیل می‌دهد.

روشن است که این جدول مشکل دارد و روشن این که باید دو جدول باشد ولی چه قانونی این را می‌گوید.


1.2   دو جدول پیشنهادی

جدول موجودی فروشگاه
شماره جنس نام جنس موجودی
1 شکر 1000
2 نمک 1500
جدول فروش یک فروشگاه
شماره جنس شماره فاکتور فروش میزان فروش
1 1 12
1 4 14
1 5 5
2 2 10
2 4 20
2 5 30
2 3 40

مشکل‌های جدول‌های پیشین چه بودند؟

ناهنجاری افزودن داده، حذف داده،‌به روز رسانی داده

قانون تقسیم چه می‌تواند باشد.

2   وابستگی تابعی

در جدول موجودی فروشگاه، شماره‌ی جنس تعیین کننده‌ی (determinant) دو ویژگی دیگر یعنی «نام جنس» و «موجودی» است. از طرف دیگر می‌توان گفت نام جنس و موجودی وابسته (dependant) به شماره‌ی جنس هستند.

به این نوع وابستگی، «وابستگی تابعی»(Functional Deppendancy) یا FD گفته می‌شود. وابستگی تابعی میان ویژگی‌های جدول برخاسته از تعریف و نوع ارتباط آنها با هم دیگر در جدول است و طراح پایگاه داده باید بتواند وابستگی‌های تابعی میان ویژگی‌های درون جدول‌های خود را بیابد.

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

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

در رابطهٔ R دو مجموعه از ویژگی‌های α و β دارای وابستگی تابعی α → β است اگر و تنها اگر برای هر دو چندتایی t1 و t2 ممکن در رابطهٔ R مقدارهای α برابر باشند آن‌گاه مقدارهای β نیز برابر است. به عبارت دیگر

∀ t1, t2 ∈ R, t1[α] = t2[α] ⇒ t1[β] = t2[β]

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

A B C
a1 b1 c1
a1 b1 c2
a1 b2 c2
a2 b2 c2
a3 b3 c3
  1. A →B
  2. A →C
  3. B→C
  4. AB→C
  5. ‌B→A
  6. AC→B
  7. BC→A

2.1   ویژگی‌های ریاضی وابستگی تابعی

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

اگر X ، Y و Z مجموعه‌هایی از ویژگی‌ها در یک رابطه‌ی R باشند برخی از قانون‌هایی که نتیجه می‌شود در ادامه نوشته شده است.

اصول آرمسترانگ

  • بازتابی بودن: اگر Y زیر مجموعه‌ی X باشد آن‌گاه X ⭢ Y
  • بسط پذیری : اگر X ⭢ Y آن‌گاه XZ ⭢ YZ
  • تراگذری : اگر X ⭢ Y و Y ⭢ Z آن‌گاه X ⭢ Z

قانون‌های زیر می‌تواند از روی سه قانون بالا به دست آید:

  • خود تعیینی : همواره داریم X ⭢ X
  • اجتماع : اگر X ⭢ Y و X ⭢ Z آن‌گاه X ⭢ YZ
  • تجزیه : اگر X ⭢ YZ آن‌گاه X ⭢ Y و X ⭢ Z
  • شبه تراگذری: اگر X ⭢ Y و WY ⭢ Z آن‌گاه WX ⭢ Z
  • ترکیب : اگر X ⭢ Y و Z ⭢ W آن‌گاه XZ ⭢ YW
  • اتحاد کلی : اگر X ⭢ Y و Z ⭢ W آن‌گاه X ⋃ (Z - Y) ⭢ YW

2.2   بستار وابستگی تابعی

به مجموعه‌ی همه‌ی وابستگی‌های تابعی که می‌تواند از روی چند وابستگی تابعی به دست آید بستار آن وابستگی‌های تابعی گفته می‌شود. اگر F یک مجموعه وابستگی باشد  + F مجموعه‌ی بستار F است.

برای نمونه اگر در رابطه‌ی R ویژگی‌های A,B,C,D را به همراه قانون‌های وابستگی زیر داشته باشیم

  1. A → B
  2. B → C
  3. AB → D

آن‌گاه قانون‌های زیر (بخشی از بستار این قانون‌ها) می‌تواند به دست آید:

  1. A → A
  2. A → AB
  3. A → ABD
  4. A → ABCD
  5. B → B
  6. B → BC
  7. A → D

2.3   مجموعه‌ی کاهش ناپذیر وابستگی‌ها

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

  • سمت چپ (تعیین کننده) هر وابستگی تابعی کاهش ناپذیر باشد. یعنی اگر سمت چپ یکی از قانون‌های وابستگی را کاهش دادیم حتما مجموعه‌ی بستار به دست آمده از آن تغییر کند(نه اینکه بتواند از قانون‌های دیگر به دست آید). به عبارت دیگر همه‌ی وابستگی‌ها باید کاهش ناپذیر چپ باشند.
  • هیچ وابستگی تابعی نتواند بدون تغییر بستار از این مجموعه حذف شود.
  • سمت راست(وابسته) هر وابستگی تابعی فقط یک ویژگی داشته باشد.

3   نرمال سطح دوم

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

اکنون به جدول اولیه‌ی فروش دقت کنید. در این جدول کلید دو ویژگی شماره فاکتور و شماره جنس است در حالی که وابستگی تابعی شماره جنس ⭠ {نام جنس ، موجودی} را داریم که در سمت چپ آن (تعیین کننده آن) فقط بخشی از کلید اصلی است. ویژگی یا ويژگی‌هایی از جدول به بخشی از کلید اصلی وابسته هستند و بنابراین باید جدا شوند.

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

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

با ترکیب قانون‌هایی که تعیین کننده‌ی یکسان دارند دو قانون زیر به دست می‌آید.

بنابراین باید جدول یاد شده را به دو جدول بشکنیم تا وابستگی جزئی درون آن نباشد.

4   نرمال سطح سوم

جدول دانشجو
شمارهٔ دانشجویی نام نام خانوادگی نام دبیرستان شهر دبیرستان کدپستی دبیرستان
۹۸۱۲۵۶۱ علی رحیمی امام صادق شهرضا ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۲ کوروش پارسایی امام صادق شهرضا ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۳ احمد یوسفان منتظری نجف‌آباد ۷۶۷۶۵۶۷۸۷۴
۹۸۱۲۵۶۴ کامران خداپرستی امام صادق شهرضا ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۵ رضا حقیقی امام صادق شهرضا ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۶ محمدرضا مغزی منتظری نجف‌آباد ۷۶۷۶۵۶۷۸۷۴

کدپستی دبیرستان ⭠ {نام دبیرستان، شهر دبیرستان}

4.1   وابستگی باواسطه

شمارهٔ دانشجویی, نام, نام خانوادگی, کدپستی دبیرستان

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

جدول دانشجو
شمارهٔ دانشجویی نام نام خانوادگی کدپستی دبیرستان
۹۸۱۲۵۶۱ علی رحیمی ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۲ کوروش پارسایی ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۳ احمد یوسفان ۷۶۷۶۵۶۷۸۷۴
۹۸۱۲۵۶۴ کامران خداپرستی ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۵ رضا حقیقی ۸۹۲۷۳۹۸۷۴
۹۸۱۲۵۶۶ محمدرضا مغزی ۷۶۷۶۵۶۷۸۷۴
جدول دبیرستان
کدپستی دبیرستان نام دبیرستان شهر دبیرستان
۸۹۲۷۳۹۸۷۴ امام صادق شهرضا
۷۶۷۶۵۶۷۸۷۴ منتظری نجف‌آباد

4.2   استثناها

جدول خریدار
نام خریدار کدپستی خریدار شهر خیابان کوچه پلاک
Ali 558633 Kashan Street1 alley1 23
Kamran 912133 Arsanjan Street2 alley2 32
Hamid 234553 Kohdasht Street3 alley3 21
Koroush 494833 Mamasani Street4 alley3 20
Reza 232444 Kazeron Street5 alley6 12
جدول دانشجو
شمارهٔ دانشجویی نام و نام خانوادگی شمارهٔ ملی نام پدر نام و نام خانوادگی مادر کدپستی شهر خیابان کوچه پلاک
۹۸۲۳۲۳ علی رضایی ۲۹۸۷۳۹۲۸۳ رضا اختر صالحی ۷۶۸۷۹۸۷ کاشان باباافضل محمدی ۲۳
۹۷۲۳۸۲۳ کامران خداپرست ۳۹۸۴۵۰۹۳ بهرام اختر شیرین ۹۰۴۸۴۲۰۹۳ زاهدان رضایی سعیدی ۳۴
۹۷۳۸۳۸۷ مهدی رضایی ۲۹۸۷۳۹۲۸۴ رضا اختر صالحی ۷۶۸۷۹۸۷ کاشان باباافضل محمدی ۲۳
۹۸۲۳۷۴ حسین رضایی ۲۹۸۷۳۹۲۸۵ رضا اختر صالحی ۷۶۸۷۹۸۷ کاشان باباافضل محمدی ۲۳
۹۶۰۹۸۳۴ زینب رضایی ۲۹۸۷۳۹۲۸۶ رضا اختر صالحی ۷۶۸۷۹۸۷ کاشان باباافضل محمدی ۲۳

5   نرمال BCNF

۱. هر دانشجو ممکن است در چندین رشته تحصیل کند.

۲. برای هر رشته، یک دانشجو فقط یک استاد راهنما دارد

۳. در هر رشته چندین استاد راهنما وجود دارد

۴. هر استاد راهنما فقط در یک رشته راهنمایی می‌کند.

جدول راهنمایی
شماره دانشجویی رشته استاد راهنما
123 کامپیوتر یوسفان
243 هنر عرب بیگی
342 مکانیک عباسیان
342 کامپیوتر یوسفان
123 هنر عرب بیگی
243 مکانیک عباسیان
243 کامپیوتر یوسفان
342 هنر عرب بیگی
123 مکانیک عباسیان

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

شماره دانشجویی و استاد راهنما

جدول شماره دانشجویی - استاد راهنما
شماره دانشجویی استاد راهنما
123 یوسفان
123 عرب بیگی
123 عباسیان
243 عرب بیگی
243 یوسفان
342 عباسیان
342 یوسفان
342 عرب بیگی

رشته و استاد راهنما

جدول رشته - استاد راهنما
استاد راهنما رشته
یوسفان کامپیوتر
عرب بیگی هنر
عباسیان مکانیک

5.1   همهٔ وابستگی‌ها در جدول فقط به کلید اصلی باشد.

6   نرمال سطح چهارم

SSN Sport Book
54467
Sport
Volleyball
Basketball
Book
We
Hafez
65231
Sport
Tennis
Basketball
Book
Pinocchio
Animal Farm
Hafez
SSN Sport Book
54467 Volleyball We
54467 Volleyball Hafez
54467 Basketball We
54467 Basketball Hafez
65231 Tennis Pinocchio
65231 Tennis Animal Farm
65231 Tennis Hafez
65231 Basketball Pinocchio
65231 Basketball Animal Farm
65231 Basketball Hafez

6.1   multivalued dependency

وابستگی چند مقداری

SSN →→ Book | Sport

SSN Sport Book
54467 Volleyball We
54467 Volleyball Hafez
54467 Basketball We
54467 Basketball Hafez
65231 Tennis Pinocchio
65231 Tennis Animal Farm
65231 Tennis Hafez
65231 Basketball Pinocchio
65231 Basketball Animal Farm
65231 Basketball Hafez
SSN Sport
54467 Volleyball
54467 Basketball
65231 Tennis
65231 Basketball
SSN Book
54467 We
54467 Hafez
65231 Pinocchio
65231 Animal Farm
65231 Hafez

جدولی را در نظر بگیرید که شمارهٔ ملی یک نفر را به همراه نام فرزندان و شماره تلفن‌های فرد نگهداری می‌کند. هر فرد می‌تواند چند شمارهٔ تلفن و چند فرزند داشته باشد.

SSN child phone
54467 ali 90284902
54467 ali 82434893
54467 reza 90284902
54467 reza 82434893
65231 hamid 9284028
65231 hamid 9284026
65231 hamed 9284028
65231 hamed 9284026
65231 mahmood 9284028
65231 mahmood 9284026

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

SSN child
54467 ali
54467 reza
65231 hamid
65231 hamed
65231 mahmood
SSN phone
54467 90284902
54467 82434893
65231 9284028
65231 9284026

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

برای یک فاکتور یک یا چند قلم جنس و یک یا چند خریدار می‌تواند وجود داشته باشد.

با این فرض، جدول زیر برای فروش پیشنهاد شده است.

جدول فروش همراه خریدار
شماره جنس شماره فاکتور فروش میزان فروش نام خریدار
1 1 12 Ali
1 4 14 Kamran
1 5 5 Hamid
2 2 10 Koroush
2 4 20 Kamran
2 5 30 Hamid
2 3 40 Reza
1 5 5 Shahin
2 5 30 Shahin

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

جدول فروش
شماره جنس شماره فاکتور فروش میزان فروش
1 1 12
1 4 14
1 5 5
2 2 10
2 4 20
2 5 30
2 3 40
جدول فروش همراه خریدار
شماره جنس شماره فاکتور فروش نام خریدار
1 1 Ali
1 4 Kamran
1 5 Hamid
2 2 Koroush
2 4 Kamran
2 5 Hamid
2 3 Reza
1 5 Shahin
2 5 Shahin

اکنون اگر این جدول را بدون توجه به دیگر جدول‌های نگاه کنیم روشن است که جدول خوبی نیست ولی تا نرمال BCNF مشکلی ندارد. روشن است که تکرار داده دارد در واقع نوعی گروه بندی یا عدم وابستگی میان آنها وجود دارد که باعث می‌شود بهتر ببینم به دو جدول زیر آن را بشکنیم بدون این که اطلاعاتی از دست برود.

جدول فروش: فاکتور - جنس
شماره جنس شماره فاکتور فروش
1 1
1 4
1 5
2 2
2 4
2 5
2 3
جدول فروش: فاکتور - خریدار
شماره فاکتور فروش نام خریدار
1 Ali
4 Kamran
5 Hamid
2 Koroush
4 Kamran
5 Hamid
3 Reza

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

جدول فروش
شماره جنس شماره فاکتور فروش میزان فروش
1 1 12
1 4 14
1 5 5
2 2 10
2 4 20
2 5 30
2 3 40
جدول فروش: فاکتور - خریدار
شماره فاکتور فروش نام خریدار
1 Ali
4 Kamran
5 Hamid
2 Koroush
4 Kamran
5 Hamid
3 Reza

چرا این دو جدول همه‌ی اطلاعات مربوط به جدول پیشین را در بردارد؟

مهم‌ترین نکته این است که خریداران گوناگون در یک فاکتور فروش نمی‌توانند جنس‌های گوناگونی داشته باشند و همه‌ی جنس‌هایشان تکراری است.

7   نمونه نرمال سازی

جدول فروش زیر را در نظر بگیرید:

جدول فروش همراه خریدار
شماره جنس شماره فاکتور فروش میزان فروش نام خریدار نشانی خریدار دیگر اطلاعات خریدار
1 1 12 Ali Street1 other
1 4 14 Kamran street2 other
1 5 5 Hamid street3 other
2 2 10 Koroush street1 other
2 4 20 Kamran street2 other
2 5 30 Hamid street3 other
2 3 40 Reza street2 other

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

جدول فروش یک فروشگاه
شماره جنس شماره فاکتور فروش میزان فروش
1 1 12
1 4 14
1 5 5
2 2 10
2 4 20
2 5 30
2 3 40
جدول فاکتور - خریدار
شماره فاکتور فروش نام خریدار نشانی خریدار دیگر اطلاعات خریدار
1 Ali Street1 other
4 Kamran street2 other
5 Hamid street3 other
2 Koroush street1 other
4 Kamran street2 other
5 Hamid street3 other
3 Reza street2 other

باز هم این جدول مشکل دارد و به خوبی می‌توان این مشکلات را به ویژه زمانی که تعداد خریداران و فاکتورها افزایش یابد دید زیرا نشانی خریدار و دیگر اطلاعات خریدار بی‌جهت تکرار می‌شود. بنابراین جدول فاکتور-خریدار به دو جدول زیر شکسته می‌شود.

جدول فاکتور - خریدار
شماره فاکتور فروش نام خریدار
1 Ali
4 Kamran
5 Hamid
2 Koroush
4 Kamran
5 Hamid
3 Reza
جدول خریدار
نام خریدار نشانی خریدار دیگر اطلاعات خریدار
Ali Street1 other
Kamran street2 other
Hamid street3 otherخ
Koroush street1 other
Kamran street2 other
Hamid street3 other
Reza street2 other

حفظ وابستگی‌ها و کنار هم گذاشتن ویژگی‌هایی که به هم وابسته هستند، اهمیت بالایی دارد.