PDA

View Full Version : قواعد نرمال سازی بانک اطلاعاتی



razaghi
پنج شنبه 20 مرداد 1384, 13:29 عصر
ممنون می شوم اگر سایتی در مورد قواعد نرمال سازی بانک اطلاعاتی می دانید مرا راهنمایی کنید.

ealireza
پنج شنبه 20 مرداد 1384, 21:26 عصر
آره وجودش لازمه

AminSobati
پنج شنبه 20 مرداد 1384, 23:43 عصر
http://www.utexas.edu/its/windows/database/datamodeling/rm/rm7.html
http://www.serverwatch.com/tutorials/article.php/1549781

Hamedm
جمعه 21 مرداد 1384, 13:32 عصر
سلام

قوانین نرمال سازی خیلی جای بحث داره در زیر فقط اشاره ای به آن کردم(البته با اجازه از آقای ثباتی):


Nornamalization

فرآیندی است که طراحی را اصلاح میکند و معمولا باعث افزایش تعداد جداول میشه.


قوانین:

قانون اول: فیلد های تکراری در یک جدول ممنوع است.
مثلا فرض کنید میخواهیم فاکتور فروش بنویسیم و آن را اینچنین طراحی کنیم:
FactorCode
FactorDate
CustomarID
EmployeeID
KalaCode1
Quantity1
KalaCode2
Quantity2
KalaCode3
Quantity3
...
KalaCode10
Quantity10

این طراحی غلط است، چون طراح متوجه روابط چند به چند ( کالا و فاکتور) نبوده است.

اشکالات این طراحی:
1. یک فاکتور ممکن است بیش از 10 ردیف داشته باشد.
2. یک فاکتور ممکن است فقط 2 ردیف داشته باشد که در این طورت 8 ردیف (فیلد) خالی باقی میماند که فظا اشغال میکند.
3. جستجو خیلی سخت و کند میشود. مثلا میخواهیم بدانیم کد کالای 100 چند بار به فروش رفته. برای این کار بایستی به ازاء هریک از کد کالای X تمام جدول یک بار جستجو شود.

جدول بالا بایستی به دو جدول زیر تبدیل شود:
فاکتور
FactorCode
FactorDate
CustomerID
EmployeeID

ردیفهای فاکتور
FactorCode
KalaCode
Quantity
Price
Discount

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

جدول فاکتور
کد فاکتور
تاریخ فاکتور
نوع فاکتور
کد مشتری
نام مشتری
آدرس مشتری
کد فروشنده
نام فروشنده
...

طراحی بالا طبق قانون دوم غلط است. چون طراح موجودیت مشتری و فروشنده را ندیده است. طراحی ای صحیح است که جدولی برای مشتری و فروشنده در نظر گرفته شود و اطلاعات از آن جدول استخراج شود.

نکته: یک جدول حتما متعلق به یک موجودیت دارد، اما یک موجودیت امکان دارد بیش از یک جدول داشته باشد.

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

به عنوان مثال جدول زیر را در نظر بگیرید:
سیستم دانشگاه، جدول نگهداری اطلاعات کلاس درس:

جدول کلاس
کد درس
کد کلاس
کد استاد
کد مرکز آموزشی
شماره کلاس
روز تشکیل
ساعت تشکیل
عنوان درس

در مثال بالا فیلد عنوان درس اشتباه است. چون به بخشی از کلید وابستگی دارد نه کل آن.



DeNornamalization


ممکن است بعضی از مواقع نیاز باشد که نرمالیزاسیون را کنار بگذاریم.
یعنی بعضی از مواقع میتوان فیلدهای تکراری را با شرایط خاصی قبول کرد.
برای مثال میتوانیم به سیستم دبیرخانه اشاره کنیم.

جدول شرکتها
کد شرکت
نام شرکت
نوع شرکت
آدرس
شماره تلفن 1
شماره تلفن 2
شماره فکس
نام هیئت رئیسه
نام مدیر عامل
نام مسئول فروش
و ....

این طراحی غیر نرمال است چون شماره تلفن 3 بار تکرار شده است.
حال چرا این طراحی صحیح است:
اگر بخواهیم سیستم 118 بنویسیم، ای طراحی کاملا غلط است، ولی ما میخواهیم شماره تلفن را در حد یک سری اطلاعات عمومی شرکت داشته باشیم و نیز هیچ جستجویی روی شماره تلفن در این طراحی وجود ندارد.
در مورد افراد هم همین طور است. نیازی نیست جدولی مانند جدول زیر طراحی شود.

جدول افراد
کد فرد
نام فرد
نام خانوادگی
نام پدر

جدول سمت
کد سمت
نام سمت

جدول افراد شرکت
کد شرکت
کد فرد
کد سمت

نیازی نیست این قدر دقیق اطلاعات افراد و سمتها ذخیره شود.


در پناه حق موفق باشید و پرتوان