PDA

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



pbm_soy
چهارشنبه 29 تیر 1390, 22:50 عصر
سلام
لطفا در مورد موارد زیر نظر بدید لطفا با دلیل منطقی

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

چرا جداول را بهم ارتباط می دهند در sql server یا جاهای دیگه در حالی که در برنامه عملیات مربوط ارتباط را با خود زبان برنامه نویسی انجام می دهند؟؟؟ مانند select کردن از دو جدول و نوشتن شرط ارتباط دو جدول در همان دستور و یا اضافه کردن پارامترهای join
ویا در زمان حذف کردن یک رکورد از یک جدول عملیات cascade delete را خود برنامه نویس انجام می دهد و یا برای ویرایش رکورد هم همینطور!!!

من اینگونه این موضوع را عنوان می کنم که عملیات بروی بانک اطلاعاتی را هم برنامه نویس (توسط برنامه)می تواند انجام دهد و هم می تواند به عهده sql server بذارد که بستگی به محیط اجرا و میزان ترافیک کار بستگی دارد

با تشکر

Galawij
چهارشنبه 29 تیر 1390, 23:22 عصر
جواب سوالاتی که مطرح کردید به حدی واضح و روشن هست که احساس می کنم نیازی به پاسخ نداشته باشد. ولی فقط یک سوال برای خودم پیش اومده: یعنی شما الان همه این کارها را در سمت کد نویسی انجام می دید؟ می دونید چقدر حجم کد نویسی شما اضافه می شه؟؟!!:متعجب:

pbm_soy
پنج شنبه 30 تیر 1390, 12:03 عصر
خیر بستگی به محیط عملیاتی داره اگه بار application بخواد بالا باشه معمولا بیشتر کارها رو به عهده sqlserver میذارم

اگر لطف کنید و روشنتر کنید ممنون میشم

یوسف زالی
یک شنبه 02 مرداد 1390, 10:35 صبح
این کار باعث میشه درستی اطلاعاتتون موقع ذخیره ، نوشتن پروسیجر ها ، انتقال اطلاعات ، اصلاح های دستی سمت سرور در سایت مشتری و ... تضمین بشه.
اگر هیچ کدوم از این کارها رو ندارید یا این قدر به کارتون مطمئن هستید که اشتباه نکنید از کلید هم استفاده نکنید.
اما بالاخره مواقعی در پشتیبانی و توسعه نرم افزار پیش میاد که از هندل کردن دستی خسته می شید، یا اینکه داده اشتباه می زنید، یا اینکه برق می ره مستر اینسرت شده دیتیل نشده...
یا وقت نوشتن پروسیجر حواستون نیست به ارتباط جداول، کدی میگذارید که فرزند بدون پدر ایجاد می کنه...
و...

pbm_soy
دوشنبه 03 مرداد 1390, 19:50 عصر
من هم تمام گفته ها را تائید می کنم
ولی می خوام بگم که انجام دادن کارها از طرف برنامه هم تحت شرایطی اشتباه نیست (اشتباه نیست و می توان از هردو روش استفاده کرد) و تحت شرایطی هم حتما باید کارها را به عهده sql server گذاشت

در مورد زمان برق رفتن معمولا می توان در بازه های زمانی جامعیت داده را تست کرد (مثلا در نصفه شب ) یا خروج از برنامه را کنترل کرد که نرمال بوده یا خیر در صورت غیر نرمال یک بررسی از دادهها انجام شود
در مورد ثبت اطلاعات فرزند بدون پدر هم معمولا در طراحی فرم ورود اطلاعات ابتدا سوال می شود که اطلاعات فرزند کدام پدر را قرار است وارد کنید در صورت وجود پدر و نمایش اطلاعات پدر بخش ثبت اطلاعات فزند نیز فعال می شود
ویا لیستی از پدرهای موجود نمایش داده می شود و کاربر با انتخاب پدر موردنظر اطلاعات فرزند آن را وارد می کند در صورت انتخاب نشدن پدر اطلاعات فرزند ثبت نمی شود !!

من فکر می کنم در خیلی از موارد طراحی جداول با طراحی فرمهای وردو اطلاعات آنها ارتباط مستقیم دارد و می توان برخی مسائل مربوط به جامعیت را با طراحی درست فرمها نیز برطرف کرد

ممنون بابت توجه دوستان

یوسف زالی
دوشنبه 03 مرداد 1390, 20:00 عصر
خواهش می کنم.
عرض کردم می تونین دستی همه کارهارو هم کنین.
اما وقتی برای انجام کاری وسیله ای وجود داره که جوابش رو پس داده صرف هزینه زمانی یا ... به نظر انگیزه قوی تری نیاز داره.
به هر حال نمیشه گفت "حتما" استفاده از یکی از این روشها اشتباهه.

Galawij
دوشنبه 03 مرداد 1390, 21:19 عصر
شاید فرمایشات شما در مورد برنامه های تحت ویندوز صدق کند ولی در مورد برنامه های تحت وب این طریق عمل کردن باعث کند شدن شدید لود و کار کردن با سایت می شود. تا آنجایی که امکان داشته باشد در برنامه های تحت وب باید دستورات را به سمت پایگاه داده سوق داد.

centerpace
سه شنبه 04 مرداد 1390, 00:23 صبح
با سلام

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

یوسف زالی
سه شنبه 04 مرداد 1390, 00:41 صبح
منظور ایشون relation بود نه master - detail کردن جداول.

centerpace
سه شنبه 04 مرداد 1390, 01:05 صبح
منظور ایشون relation بود نه master - detail کردن جداول.
پیش نیاز هر RELATIONمشخص کردن کلید اصلی، خارجی هستش.
خوب میتونه واسه اونایی که حرفه ای برنامه می نویسن واسه نوشتن تریگر می تونه کارشونو راحت کنه ویا دستوراتDMLتوی SQL SERVER
من که همیشه از Relation استفاده می کنم.درسته که باعث میشه خطای زیادی درهنگام اعمال بر روی پایگاه بده ولی باعث میشه اشتباهات خودم رو متوجه بشم.چون اگه این ارتباطات نباشه ممکنه مقدار کلید خارجی رو توی جدول دیگه وارد نکنیم.
من استنباطم این هستش.شاید دوستان نظربهتری داشته باشند