PDA

View Full Version : تشریح نرمال سازی سطح 2NF , 3NF



engmmrj
سه شنبه 08 مرداد 1392, 19:03 عصر
سلام
لطفا سطح نرمال سازی سطح 2NF و 3NF رو به همراه مثال برای من تشریح کنید .
بطور معمول باید تا چه سطحی رعایت کرد ؟
استفاده از سطوح نرمال سازی چه مزایایی داره به جر افزونگی ؟

محمد سلیم آبادی
سه شنبه 08 مرداد 1392, 19:35 عصر
سلام

لطفا سطح نرمال سازی سطح 2NF و 3NF رو به همراه مثال برای من تشریح کنید .
به مطالب مربوط به نرمالسازی مراجعه کنید (اینجا) (http://www.dotnettips.info/writer/%D9%85%D8%AD%D9%85%D8%AF%20%D8%B3%D9%84%DB%8C%D9%8 5%20%D8%A7%D8%A8%D8%A7%D8%AF%DB%8C)


بطور معمول باید تا چه سطحی رعایت کرد ؟
تا سطح سه


استفاده از سطوح نرمال سازی چه مزایایی داره به جر افزونگی ؟
به جز کاهش افزونگی داده ها باعث نظم بخشیدن در بروزرسانی (حذف/درج/ویرایش) داده ها می شود.
در مطالبی که بهش اشاره کردم که بر گرفته از کتاب آقای C.J. Date هست به این موارد اشاره شده است.

Kubuntu
جمعه 11 مرداد 1392, 16:59 عصر
http://upload7.ir/images/39108423727325150145.jpg
امیدوارم بتونه کمکت کنه
لینک بزرگ عکس
http://upload7.ir/images/17784215087505114388.jpg

engmmrj
شنبه 26 مرداد 1392, 00:48 صبح
سلام

به مطالب مربوط به نرمالسازی مراجعه کنید (اینجا) (http://www.dotnettips.info/writer/%D9%85%D8%AD%D9%85%D8%AF%20%D8%B3%D9%84%DB%8C%D9%8 5%20%D8%A7%D8%A8%D8%A7%D8%AF%DB%8C)


تا سطح سه


به جز کاهش افزونگی داده ها باعث نظم بخشیدن در بروزرسانی (حذف/درج/ویرایش) داده ها می شود.
در مطالبی که بهش اشاره کردم که بر گرفته از کتاب آقای C.J. Date هست به این موارد اشاره شده است.
من هرچی سطح 2NF رو میخونم چیزی متوجه نمیشه ! ، میشه به زبان ساده توضیح بدید ؟

محمد سلیم آبادی
شنبه 26 مرداد 1392, 13:19 عصر
قبل از اینکه مطلب رو بخونید لازمه بگم که بصورت متناوب از واژه خصیصه به جای ستون و از ستون به جای خصیصه
استفاده شده هر دوی آنها به یک معنا هستند.
شما فرض کنید میخواهیم تعلق یک شیء به یک فرد را تعیین کنیم. مثلا علی دارای یک کامپیوتر است. خب نیاز به
سه جدول داریم جدول اول برای لیست کردن تمام اشیاء مورد نظر، جدول بعدی برای لیست کردن تمام افراد مورد نظر
جدول سوم برای تعیین تعلق یک شی به یک فرد.
در جدول اشیاء به هر شی یک کد منحصربفرد انتساب میدهیم و در کنار آن خصایص و ویژگی های آن شی را نیز درج میکنیم
در جدول افراد نیز یک کد منحصربفرد به هر فرد انتساب میدهیم (این کد میتونه یک خصیصه طبیعی مثل شماره ملی فرد باشه)
در جدول متعلقات از کدهای اشیاء و افراد استفاده میشه. ترکیب این دو ستون کلید اولیه هست. چرا که تنها یکبار
نیاز هست که تعلق یک شی به یک فرد را تعیین کنیم. یه ستون دیگه اضافه میکنیم تا تعیین کنیم که کی این تعلق
صورت گرفته است. طبیعی است که ستون سوم که تاریخ تعلق را مشخص کرده وابستگی تابعی داره به کلید اولیه
جدول که از ترکیب دو ستون تشکیل شده (هر دو ستون کلید خارجی هستند و به جدول اشیاء و جدول افراد ارجاع
داده شدند)

نکته اساسی: حالا اگر ما نام شی یا نام فرد را در جدول تعلق قرار بدیم این جدول دیگه از فرم دوم نرمال خارج میشه
چون خصیصه ای اضافه شده که وابستگی نداره به کلید اولیه جدول. مثلا در مورد نام فرد این ستون وابستگی
داره به کد فرد و در مورد نام شیء این ستون وابستگی داره به کد شی که ستون کد شیء یک جزئی از کلید اولیه
محسوب میشه. نه کل کلید اولیه.
خب من در مطلبی که بهش اشاره کردم به بینظمی ها و ناهنجاری هایی که در این حالت صورت میگیره اشاراتی داشتم

ابتدا دو جدول اشیاء و افراد را ایجاد میکنیم:

create table Objs
(
obj_id tinyint not null primary key,
obj_name varchar(25) not null,
...
)

create table People
(
person_id char(10) not null primary key,
person_name varchar(25) not null,
...
)

سپس نظر شما را به این جدول جلب میکنم. این جدول از سه ستون تشکیل شده. دو ستون که کلید خارجی هستند و ترکیب آنها نیز کلید اولیه را تشکیل می دهند. ستون سوم هم وابستگی تابعی داره به کلید اولیه (که ترکیب دو ستونی است هر خود کلید خارجی هستند)


create table Depens
(
person_id char(10) not null
references People,
obj_id tinyint not null
references Objs,
depens_date date,
primary key (person_id, obj_id)
)

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

engmmrj
دوشنبه 28 مرداد 1392, 18:02 عصر
قبل از اینکه مطلب رو بخونید لازمه بگم که بصورت متناوب از واژه خصیصه به جای ستون و از ستون به جای خصیصه
استفاده شده هر دوی آنها به یک معنا هستند.
شما فرض کنید میخواهیم تعلق یک شیء به یک فرد را تعیین کنیم. مثلا علی دارای یک کامپیوتر است. خب نیاز به
سه جدول داریم جدول اول برای لیست کردن تمام اشیاء مورد نظر، جدول بعدی برای لیست کردن تمام افراد مورد نظر
جدول سوم برای تعیین تعلق یک شی به یک فرد.
در جدول اشیاء به هر شی یک کد منحصربفرد انتساب میدهیم و در کنار آن خصایص و ویژگی های آن شی را نیز درج میکنیم
در جدول افراد نیز یک کد منحصربفرد به هر فرد انتساب میدهیم (این کد میتونه یک خصیصه طبیعی مثل شماره ملی فرد باشه)
در جدول متعلقات از کدهای اشیاء و افراد استفاده میشه. ترکیب این دو ستون کلید اولیه هست. چرا که تنها یکبار
نیاز هست که تعلق یک شی به یک فرد را تعیین کنیم. یه ستون دیگه اضافه میکنیم تا تعیین کنیم که کی این تعلق
صورت گرفته است. طبیعی است که ستون سوم که تاریخ تعلق را مشخص کرده وابستگی تابعی داره به کلید اولیه
جدول که از ترکیب دو ستون تشکیل شده (هر دو ستون کلید خارجی هستند و به جدول اشیاء و جدول افراد ارجاع
داده شدند)

نکته اساسی: حالا اگر ما نام شی یا نام فرد را در جدول تعلق قرار بدیم این جدول دیگه از فرم دوم نرمال خارج میشه
چون خصیصه ای اضافه شده که وابستگی نداره به کلید اولیه جدول. مثلا در مورد نام فرد این ستون وابستگی
داره به کد فرد و در مورد نام شیء این ستون وابستگی داره به کد شی که ستون کد شیء یک جزئی از کلید اولیه
محسوب میشه. نه کل کلید اولیه.
خب من در مطلبی که بهش اشاره کردم به بینظمی ها و ناهنجاری هایی که در این حالت صورت میگیره اشاراتی داشتم

ابتدا دو جدول اشیاء و افراد را ایجاد میکنیم:

create table Objs
(
obj_id tinyint not null primary key,
obj_name varchar(25) not null,
...
)

create table People
(
person_id char(10) not null primary key,
person_name varchar(25) not null,
...
)

سپس نظر شما را به این جدول جلب میکنم. این جدول از سه ستون تشکیل شده. دو ستون که کلید خارجی هستند و ترکیب آنها نیز کلید اولیه را تشکیل می دهند. ستون سوم هم وابستگی تابعی داره به کلید اولیه (که ترکیب دو ستونی است هر خود کلید خارجی هستند)


create table Depens
(
person_id char(10) not null
references People,
obj_id tinyint not null
references Objs,
depens_date date,
primary key (person_id, obj_id)
)

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

جدول User


1-iduser
2-username


جدول Kala


1-idkala
2-namekala


جدول Forosh


1-idforosh
2-idkala
3-iduser

محمد سلیم آبادی
دوشنبه 28 مرداد 1392, 22:20 عصر
جدول فروش چندان مفهوم نیست.
قصد دارین چه اطلاعاتی رو در جدول فروش ثبت کنید؟ مثلا اینکه کاربر x کالای x را به مشتری فروخته است فقط همین؟ در این وضعیت آیا قید یکتا ترکیبی روی ستون های کدکالا و کدکاربر قرار دادین؟
نمیخواهین جدول فروش خصایص دیگه ای چون تعداد کالا فروخته شده، کد مشتری، تاریخ فروش و غیره ثبت بشه؟

engmmrj
سه شنبه 29 مرداد 1392, 00:09 صبح
جدول فروش چندان مفهوم نیست.
قصد دارین چه اطلاعاتی رو در جدول فروش ثبت کنید؟ مثلا اینکه کاربر x کالای x را به مشتری فروخته است فقط همین؟ در این وضعیت آیا قید یکتا ترکیبی روی ستون های کدکالا و کدکاربر قرار دادین؟
نمیخواهین جدول فروش خصایص دیگه ای چون تعداد کالا فروخته شده، کد مشتری، تاریخ فروش و غیره ثبت بشه؟
میخواستم فقط برای اینکه بفهم بلدم Table درست طراحی کنم یا نه این Table رو طراحی کردم که شما ببینی درست است یا نه ، آیا الان نرمال است Table ها ؟

محمد سلیم آبادی
سه شنبه 29 مرداد 1392, 00:15 صبح
اگر ترکیب دو ستون 2و 3 در جدول فروش یکتا بشه بله نرمال هست.

engmmrj
سه شنبه 29 مرداد 1392, 00:38 صبح
اگر ترکیب دو ستون 2و 3 در جدول فروش یکتا بشه بله نرمال هست.
بله یکتا هست :تشویق: . واقعا دستتون درد نکنه .
حالا چیکار کنم از سطح 2NF که الان هست بره سطح 3NF ؟

محمد سلیم آبادی
سه شنبه 29 مرداد 1392, 11:28 صبح
اصطلاح "نرمال" زمانی بکار میره که جداول در فرم سوم نرمال بسر میبرند.
پس همانطوری که قبلا اشاره کردم جداولتان نرمال اند یعنی 3ND هم هستند.