PDA

View Full Version : کدام راه حل بنظر شما بهتر است؟



mohsen_borzooei
چهارشنبه 24 آبان 1385, 09:03 صبح
با سلام
من یه data base توی accessدارم که دارای 14 جدول می باشد .
و مجموعا حدود 200 الی 250 فیلد دارند . در فرم ورودی اطلاعات این فیلدها پر می شوند که ممکنست همه آنها هم پر نشوند . حال در گزینه دیگر فرم گزینه بروزرسانی هم دارم که همون اطلاعات را روی فرم می یاره و کاربر اونها رو ویرایش می کنه .مسئله اینجاست برای update کردن فیلده ها به نظر بنده حقیر دو راه می رسه :
1- استفاده از دستور update برای تک تک جدول ها
2- پاک کردن سطر مربوطه و استفاده از دستور insert
حال بااین تفاصیل کدام راه بالا سریعتر عمل می کنه و یا اگه راه بهتری است مشتاقانه منتظر دیدن انم .
ممنون .
.... کی و کجا وعده دیدار ما . یا ابا صالح المهدی ادرکنی .

arshia_
چهارشنبه 24 آبان 1385, 09:26 صبح
به نظر می رسه کار درست همون بروزرسانی باشه
چون برای انجام حالت دوم باید اول سطر رو پاک کنی و بعد مجدد درج کنی
با این توضیح می شه دو فرمان
به نظرمی رسه دو فرمان از یه فرمان زمان بیشتری نیاز داره

fotrosi
چهارشنبه 24 آبان 1385, 09:44 صبح
همچنین اگر سطر رو پاک کردی و هنگام اضافه کردن مجدد آن خطایی رخ دهد اطلاعات رو از دست خواهی داد که اصلا منطقی به نظر نمی رسه.

دستور update رو فقط برای سطر مورد نظر اجرا کن

mzjahromi
چهارشنبه 24 آبان 1385, 09:52 صبح
همچنین اگر سطر رو پاک کردی و هنگام اضافه کردن مجدد آن خطایی رخ دهد اطلاعات رو از دست خواهی داد که اصلا منطقی به نظر نمی رسه.


این مورد رو میشه با تراکنش برطرف کرد ولی
استفاده از Update سرعت بهتری داره. ضمن اینکه اگر رکوردها هم به یکدیگر وابسته اند میتوانید از cascade update استفاده کنید و فقط Master رو Update کنید.

MNosouhi
چهارشنبه 24 آبان 1385, 11:45 صبح
ضمن اینکه اگر رکوردها هم به یکدیگر وابسته اند میتوانید از cascade update استفاده کنید و فقط Master رو Update کنید.
1-Synayax دستوز بالا (cascade updat) همینطوریه که نوشتین ؟ آخه روی cascade خطا میگیره.
2-در دستور بالا ، اگر کلید اصلی جدول در جدول دیگری کلید خارجی باشد ، با تغییر در مقدار کلید اصلی مقدار کلید خارجی هم تغییر می کنه؟

mzjahromi
چهارشنبه 24 آبان 1385, 12:18 عصر
این دستور نیست
یکی از ویژگیهای روابط هست
وقتی که روابط رو تعریف میکنید Cascade update یا cascade delete رو هم تیک میزنید(اگه با ویزارد جداولتون رو میسازید) اونوقت اگه مستر تغییر کنه Slave هم تغییر میکنه یا اگه مستر حذف بشه بقیه هم...
2- بله

MNosouhi
چهارشنبه 24 آبان 1385, 14:38 عصر
وقتی cascade Delete رو تیک زده باشم ، اگر رکوردی از جدول اصلی حذف بشه ، تمام رکورد های وابسته به اون رکورد ، در جداول دیگه هم حذف میشه ، که اصلا منطقی نیست ، اگر هم cascade Delete تیک نخورده باشه و وابستگیی بین رکورد جاری و وجداول دیگه وجود داشته باشه اصلا اجازه حذف نمیده . پس باید چیکار کرد ؟
یعنی میخام اگر رکوردی از جدول جاری حذف شد که با رکوردهایی در جدول های دیگه رابطه داره ، کلید خارجی رکوردهای جداول دیگه مقدار null بگیرند.
مثلا اگر در جدول اصلی فیلد کلیدی با نام id و رکوردی به مقدار id برابر 10 وجود داشته باشه و در جدول دیگه ای همین فیلد id کلید خارجی باشه و در رکوردی با مقدار 10 (از جدول اصلی) مقداردهی شده باشه ، اگر رکورد حاوی مقدار 10 از جدول اصلی حذف شد ، در جداول دیگه رکوردهایی که فیلد با مقدار 10 داشته اند ، به جای 10 مقدار Null بگیرین .
sql میتونه خودش این رو مدیریت کنه و یا اینکه ما خودمون باید مدیریت کنیم؟

mzjahromi
چهارشنبه 24 آبان 1385, 18:28 عصر
ببینید:
شما نمیتونید یک رکورد که دیتیل داره رو حذف کنید مگر اینکه قبلش تکلیف دیتیلهاش رو روشن کنید یا اینکه دیتیلهاش رو هم حذف کنید. این منطق کار هست
در مورد مقدار NULL گرفتن هم شبیه به مابقی مقادیر عمل میکنه

MNosouhi
چهارشنبه 24 آبان 1385, 19:05 عصر
شما نمیتونید یک رکورد که دیتیل داره رو حذف کنید مگر اینکه قبلش تکلیف دیتیلهاش رو روشن کنید یا اینکه دیتیلهاش رو هم حذف کنید. این منطق کار هست
در مورد مقدار NULL گرفتن هم شبیه به مابقی مقادیر عمل میکنه

یه مثال میزنم ، یه جدول داریم با نام Table1 که حاوی پست های سازمانی هستش (مثل معاونت ، مدیریت و ...) و یه فیلد داره به اسم Pid که فیلد کلید است . یه جدول دیگه هم داریم که اسمش Table2 هستش و مشخصات افراد مثل نام ، نام خانوادگی و پست سازمانی اشخاص رو نگهداری میکنه . Pid در Table2 به عنوان کلید خارجی استفاده میشه . حالا اگر یک رکورد Table1 حذف بشه منطقی نیست که Sql server بیاد و از Table2 تعدادی رکورد حذف کنه(یعنی به خاطر اینکه یه پست سازمانی حذف شده ، مشخصات همه افرادی را که دارای اون پست سازمانی بودن رو حذف کنه) ، بلکه منطقی اینه که Pid در Table2 رو Null کنه تا بعدا کاربر دوباره مقداردهی کنه(پست جدیدی رو انتخاب کنه)

mzjahromi
پنج شنبه 25 آبان 1385, 06:48 صبح
منظور شما رو میدونم

بلکه منطقی اینه که Pid در Table2 رو Null کنه تا بعدا کاربر دوباره مقداردهی کنه
مشروط به اینکه مشخص بشه NULL یعنی چه پست سازمانی؟ و الا نمیشه و منطقی نیست
شما نمیتونی دیتیلی داشته باشی که مستر نداشته باشه مگر اینکه مگر اینکه نخوای Refrential integrity رو اعمال کنی.

MNosouhi
پنج شنبه 25 آبان 1385, 07:10 صبح
مشروط به اینکه مشخص بشه NULL یعنی چه پست سازمانی؟ و الا نمیشه و منطقی نیست
شما نمیتونی دیتیلی داشته باشی که مستر نداشته باشه مگر اینکه مگر اینکه نخوای Refrential integrity رو اعمال کنی.

null هیچ پست سازمانیی نیست . قبلا در یه کتابی خونده بودم که کلید خارجی یا باید null باشه و یا اینکه مقداری از جدول اصلی (در مثال بالا Table1) را داشته باشه . من نمی فهمم چرا شما می فرمایید که این حرف غیر منطقیه؟