--- Cannot embed stylesheet: [Errno 2] No such file or directory: 'html4css1.css' --->
نرمال سازی پایگاه داده روندی برای ساماندهی ویژگیها (ستونها) و رابطهها (جدولها) در یک پایگاه دادهی رابطهای به منظور کاهش افزونگی داده است.
هدف از نرمال سازی؟
یک فروشگاه را در نظر بگیرید که اطلاعاتی مانند زیر را بخواهد در خود نگهداری کند.
| شماره جنس | نام جنس | موجودی | شماره فاکتور فروش | میزان فروش |
|---|---|---|---|---|
| 1 | شکر | 1000 | 1 | 12 |
| 4 | 14 | |||
| 5 | 5 | |||
| 2 | نمک | 1500 | 2 | 10 |
| 4 | 20 | |||
| 5 | 30 | |||
| 3 | 40 |
| شماره جنس | نام جنس | موجودی | شماره فاکتور فروش | میزان فروش |
|---|---|---|---|---|
| 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 | شکر | 1000 |
| 2 | نمک | 1500 |
| شماره جنس | شماره فاکتور فروش | میزان فروش |
|---|---|---|
| 1 | 1 | 12 |
| 1 | 4 | 14 |
| 1 | 5 | 5 |
| 2 | 2 | 10 |
| 2 | 4 | 20 |
| 2 | 5 | 30 |
| 2 | 3 | 40 |
مشکلهای جدولهای پیشین چه بودند؟
ناهنجاری افزودن داده، حذف داده،به روز رسانی داده
قانون تقسیم چه میتواند باشد.
در جدول موجودی فروشگاه، شمارهی جنس تعیین کنندهی (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 |
به این ترتیب وابستگی تابعی میتواند به صورت یک عمل ریاضی تعریف شود و ویژگیهای آن از دید ریاضی بر روی رابطهها بررسی گردد. بنابراین تعدادی اصل و تعدادی ویژگی و قضیه ار روی آن به دست میآید که در اینجا به بخشی از آن پرداخته میشود.
اگر X ، Y و Z مجموعههایی از ویژگیها در یک رابطهی R باشند برخی از قانونهایی که نتیجه میشود در ادامه نوشته شده است.
اصول آرمسترانگ
قانونهای زیر میتواند از روی سه قانون بالا به دست آید:
به مجموعهی همهی وابستگیهای تابعی که میتواند از روی چند وابستگی تابعی به دست آید بستار آن وابستگیهای تابعی گفته میشود. اگر F یک مجموعه وابستگی باشد + F مجموعهی بستار F است.
برای نمونه اگر در رابطهی R ویژگیهای A,B,C,D را به همراه قانونهای وابستگی زیر داشته باشیم
آنگاه قانونهای زیر (بخشی از بستار این قانونها) میتواند به دست آید:
در یک رابطه (جدول) به مجموعهای از وابستگیهای تابعی گفته میشود که کمینه باشد یا به عبارت دیگر هیچ کدام از قانونهای وابستگی درون این مجموعه نتواند به شکلی از روی دیگر قانونها به دست آید. مجموعهای کاهش ناپذیر از وابستگیها است اگر و فقط اگر سه قانون زیر را داشته باشد.
اگر ویژگیهایی به بخشی از کلید اصلی وابسته باشند به آن وابستگی جزئی گفته میشود. جدولی در سطح دوم نرمال است که درون آن وابستگی جزئی وجود نداشته باشد. یعنی هیچ قانون وابستگی که سمت چپ آن (تعیین کننده) آن بخشی از کلید باشد در وابستگیهای آن جدول وجود نداشته باشد. به عبارت دیگر بخشی از کلید در سمت چپ هیچ وابستگی تابعی نباشد.
اکنون به جدول اولیهی فروش دقت کنید. در این جدول کلید دو ویژگی شماره فاکتور و شماره جنس است در حالی که وابستگی تابعی شماره جنس ⭠ {نام جنس ، موجودی} را داریم که در سمت چپ آن (تعیین کننده آن) فقط بخشی از کلید اصلی است. ویژگی یا ويژگیهایی از جدول به بخشی از کلید اصلی وابسته هستند و بنابراین باید جدا شوند.
برای به دست آوردن فرم نرمال دوم باید همهی وابستگیهای جزئی را به دست آوریم و از آنها جدولهای جداگانه ایجاد کنیم. دقت کنید که وابستگیهای جزئی که در آنها سمت چپ (تعیین کننده) یکسان است باید با هم ترکیب شوند.
در جدول مجموعهی کاهش ناپذیر وابستگیهای زیر را داریم
با ترکیب قانونهایی که تعیین کنندهی یکسان دارند دو قانون زیر به دست میآید.
بنابراین باید جدول یاد شده را به دو جدول بشکنیم تا وابستگی جزئی درون آن نباشد.
| شمارهٔ دانشجویی | نام | نام خانوادگی | نام دبیرستان | شهر دبیرستان | کدپستی دبیرستان |
|---|---|---|---|---|---|
| ۹۸۱۲۵۶۱ | علی | رحیمی | امام صادق | شهرضا | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۲ | کوروش | پارسایی | امام صادق | شهرضا | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۳ | احمد | یوسفان | منتظری | نجفآباد | ۷۶۷۶۵۶۷۸۷۴ |
| ۹۸۱۲۵۶۴ | کامران | خداپرستی | امام صادق | شهرضا | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۵ | رضا | حقیقی | امام صادق | شهرضا | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۶ | محمدرضا | مغزی | منتظری | نجفآباد | ۷۶۷۶۵۶۷۸۷۴ |
کدپستی دبیرستان ⭠ {نام دبیرستان، شهر دبیرستان}
شمارهٔ دانشجویی, نام, نام خانوادگی, کدپستی دبیرستان
کدپستی دبیرستان, نام دبیرستان, شهر دبیرستان
| شمارهٔ دانشجویی | نام | نام خانوادگی | کدپستی دبیرستان |
|---|---|---|---|
| ۹۸۱۲۵۶۱ | علی | رحیمی | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۲ | کوروش | پارسایی | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۳ | احمد | یوسفان | ۷۶۷۶۵۶۷۸۷۴ |
| ۹۸۱۲۵۶۴ | کامران | خداپرستی | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۵ | رضا | حقیقی | ۸۹۲۷۳۹۸۷۴ |
| ۹۸۱۲۵۶۶ | محمدرضا | مغزی | ۷۶۷۶۵۶۷۸۷۴ |
| کدپستی دبیرستان | نام دبیرستان | شهر دبیرستان |
|---|---|---|
| ۸۹۲۷۳۹۸۷۴ | امام صادق | شهرضا |
| ۷۶۷۶۵۶۷۸۷۴ | منتظری | نجفآباد |
| نام خریدار | کدپستی خریدار | شهر | خیابان | کوچه | پلاک |
|---|---|---|---|---|---|
| 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 |
| شمارهٔ دانشجویی | نام و نام خانوادگی | شمارهٔ ملی | نام پدر | نام و نام خانوادگی مادر | کدپستی | شهر | خیابان | کوچه | پلاک |
|---|---|---|---|---|---|---|---|---|---|
| ۹۸۲۳۲۳ | علی رضایی | ۲۹۸۷۳۹۲۸۳ | رضا | اختر صالحی | ۷۶۸۷۹۸۷ | کاشان | باباافضل | محمدی | ۲۳ |
| ۹۷۲۳۸۲۳ | کامران خداپرست | ۳۹۸۴۵۰۹۳ | بهرام | اختر شیرین | ۹۰۴۸۴۲۰۹۳ | زاهدان | رضایی | سعیدی | ۳۴ |
| ۹۷۳۸۳۸۷ | مهدی رضایی | ۲۹۸۷۳۹۲۸۴ | رضا | اختر صالحی | ۷۶۸۷۹۸۷ | کاشان | باباافضل | محمدی | ۲۳ |
| ۹۸۲۳۷۴ | حسین رضایی | ۲۹۸۷۳۹۲۸۵ | رضا | اختر صالحی | ۷۶۸۷۹۸۷ | کاشان | باباافضل | محمدی | ۲۳ |
| ۹۶۰۹۸۳۴ | زینب رضایی | ۲۹۸۷۳۹۲۸۶ | رضا | اختر صالحی | ۷۶۸۷۹۸۷ | کاشان | باباافضل | محمدی | ۲۳ |
۱. هر دانشجو ممکن است در چندین رشته تحصیل کند.
۲. برای هر رشته، یک دانشجو فقط یک استاد راهنما دارد
۳. در هر رشته چندین استاد راهنما وجود دارد
۴. هر استاد راهنما فقط در یک رشته راهنمایی میکند.
| شماره دانشجویی | رشته | استاد راهنما |
|---|---|---|
| 123 | کامپیوتر | یوسفان |
| 243 | هنر | عرب بیگی |
| 342 | مکانیک | عباسیان |
| 342 | کامپیوتر | یوسفان |
| 123 | هنر | عرب بیگی |
| 243 | مکانیک | عباسیان |
| 243 | کامپیوتر | یوسفان |
| 342 | هنر | عرب بیگی |
| 123 | مکانیک | عباسیان |
یک مشکل مهم این جدول این است که در آن وابستگی مهم میان استاد راهنما و رشته نشان داده نشده است. روشن است که ساختار جدولها بهتر است به گونهای باشد که تا جایی که بشود بتواند شرایط واقعی را نشان دهد و وابستگی تابعی را نشان دهد.
شماره دانشجویی و استاد راهنما
| شماره دانشجویی | استاد راهنما |
|---|---|
| 123 | یوسفان |
| 123 | عرب بیگی |
| 123 | عباسیان |
| 243 | عرب بیگی |
| 243 | یوسفان |
| 342 | عباسیان |
| 342 | یوسفان |
| 342 | عرب بیگی |
رشته و استاد راهنما
| استاد راهنما | رشته |
|---|---|
| یوسفان | کامپیوتر |
| عرب بیگی | هنر |
| عباسیان | مکانیک |
|
|
وابستگی چند مقداری
SSN →→ Book | Sport
|
|
جدولی را در نظر بگیرید که شمارهٔ ملی یک نفر را به همراه نام فرزندان و شماره تلفنهای فرد نگهداری میکند. هر فرد میتواند چند شمارهٔ تلفن و چند فرزند داشته باشد.
| 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 |
میتواند به دو جدول زیر شکسته شود.
|
|
فرض کنید در فروشگاهی امکان خرید گروهی نیز باشد یعنی یک گروه از خریداران با نامهای گوناگون یک خرید را با هم انجام دهند و یک فاکتور برایشان صادر شود. برای نمونه اگر سه نفر از اعضا خانواده با هم برای خرید آمدند نام هر سه نفر در فاکتور خرید آورده شود در حالی که یک فاکتور برای جنسهای درون آن زده شود. بنابراین قانون زیر نیز افزوده شود:
برای یک فاکتور یک یا چند قلم جنس و یک یا چند خریدار میتواند وجود داشته باشد.
با این فرض، جدول زیر برای فروش پیشنهاد شده است.
| شماره جنس | شماره فاکتور فروش | میزان فروش | نام خریدار |
|---|---|---|---|
| 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 |
چرا این دو جدول همهی اطلاعات مربوط به جدول پیشین را در بردارد؟
مهمترین نکته این است که خریداران گوناگون در یک فاکتور فروش نمیتوانند جنسهای گوناگونی داشته باشند و همهی جنسهایشان تکراری است.
جدول فروش زیر را در نظر بگیرید:
| شماره جنس | شماره فاکتور فروش | میزان فروش | نام خریدار | نشانی خریدار | دیگر اطلاعات خریدار |
|---|---|---|---|---|---|
| 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 |
حفظ وابستگیها و کنار هم گذاشتن ویژگیهایی که به هم وابسته هستند، اهمیت بالایی دارد.