PDA

View Full Version : سوال: نحوه انجام عملیات iud (اینسرت آپدیت و حذف)در جداول رابطه ای



esafb52
جمعه 25 مرداد 1392, 12:41 عصر
با سلام
من تا حالا فقط با دیتابیس هایی کار کردم که فقط جداول مستقل داشتن اما الان میخوام کار با جداول رابطه ای رو هم یاد بگیرم و نحوه نوشتن متدهای اینسرت آپدیت و حذف رو با اونها هم بدونم
برای مثال دو جدول ساده داریم و دوتا فیلد id با هم ارتباط دارن
جدول اول
idmoalf
maolfname
و جدول دوم
idbook
bookname
حالا چطور باید کد نویسی این جداول رو انجام بدم
ضمنا یه توضیحی هم بدین ممنون میشم

parvizwpf
جمعه 25 مرداد 1392, 12:46 عصر
یعنی با کد جداول و دیتابیس رو بسازی؟

esafb52
جمعه 25 مرداد 1392, 12:51 عصر
نه خیر دوست عزیز من همون ثبت حذف و آپدیت معمولی رو می خوام ولی این دستورات رو با جدولی که با یک جدول دیگه رابطه داره ننوشتم!!

veniz2008
جمعه 25 مرداد 1392, 13:55 عصر
با سلام
من تا حالا فقط با دیتابیس هایی کار کردم که فقط جداول مستقل داشتن اما الان میخوام کار با جداول رابطه ای رو هم یاد بگیرم و نحوه نوشتن متدهای اینسرت آپدیت و حذف رو با اونها هم بدونم
برای مثال دو جدول ساده داریم و دوتا فیلد id با هم ارتباط دارن
جدول اول
idmoalf
maolfname
و جدول دوم
idbook
bookname
حالا چطور باید کد نویسی این جداول رو انجام بدم
ضمنا یه توضیحی هم بدین ممنون میشم
سلام.
اگر بخوایم خیلی ساده این مطلب رو توضیح بدیم در جدول دوم که مربوط به کتاب ها هست ما باید بدونیم که هر کتاب، مولفش کی هست پس نیاز هست که idmoalf رو به جدول دوم اضافه کنیم. یعنی فیلد کلید جدول اول رو در جدول دوم میاریم تا بین این دو جدول ارتباط برقرار بشه. به این فیلدی که در جدول کتاب آورده میشه اصطلاحا کلید خارجی گفته میشه. علاوه بر آوردن نام فیلد، ما در عمل هم این دو فیلد رو که در هر دو جدول وجود داره به هم ارتباط میدیم. این باعث میشه که شما فقط از idmoalf های معتبر در جدول کتاب (جدول وابسته) بتونی استفاده کنی.
در مورد کدنویسی، نوشتن کوئری ها تفاوتی نمیکنه (در select ها معمولا از Join استفاده میکنیم) ولی در کل اول باید جدول اصلی (جدول مولف ها) مقدار دهی بشن و بعد برید سراغ مقداردهی جداول وابسته (جدول کتاب ها).
فقط به این نکته دقت کنید اگر در جدول اصلی ( جدول مبدا که همون مولف هست) شما کلید رو تغییر بدی (حذف یا ویرایش)، این تغییرات بایستی به جدول وابسته هم اعمال بشه. مدیریت کردن این تغییرات رو میتونید به عهده sql بذارید یا اینکه خودتون شخصا این کار رو انجام بدید.

esafb52
جمعه 25 مرداد 1392, 14:49 عصر
سلام.
اگر بخوایم خیلی ساده این مطلب رو توضیح بدیم در جدول دوم که مربوط به کتاب ها هست ما باید بدونیم که هر کتاب، مولفش کی هست پس نیاز هست که idmoalf رو به جدول دوم اضافه کنیم. یعنی فیلد کلید جدول اول رو در جدول دوم میاریم تا بین این دو جدول ارتباط برقرار بشه. به این فیلدی که در جدول کتاب آورده میشه اصطلاحا کلید خارجی گفته میشه. علاوه بر آوردن نام فیلد، ما در عمل هم این دو فیلد رو که در هر دو جدول وجود داره به هم ارتباط میدیم. این باعث میشه که شما فقط از idmoalf های معتبر در جدول کتاب (جدول وابسته) بتونی استفاده کنی.
در مورد کدنویسی، نوشتن کوئری ها تفاوتی نمیکنه (در select ها معمولا از Join استفاده میکنیم) ولی در کل اول باید جدول اصلی (جدول مولف ها) مقدار دهی بشن و بعد برید سراغ مقداردهی جداول وابسته (جدول کتاب ها).
فقط به این نکته دقت کنید اگر در جدول اصلی ( جدول مبدا که همون مولف هست) شما کلید رو تغییر بدی (حذف یا ویرایش)، این تغییرات بایستی به جدول وابسته هم اعمال بشه. مدیریت کردن این تغییرات رو میتونید به عهده sql بذارید یا اینکه خودتون شخصا این کار رو انجام بدید.
از پاسخ خوبتون ممنون
الان یک نکته برام سوال شد آیا فیلد کلید در جدول اصلی عینا با همون نام باید در جدول دوم تکرار بشه؟الان من خودم بین دو فیلد آی دی(مولف و کتاب) ارتباط برقرار کردم آیا این کار اشتباهه؟؟!
اگه امکان داره فقط رشته دستورsql اون سه متد رو برای چنین جدولی مثال بزنین هم ممنون میشم

veniz2008
جمعه 25 مرداد 1392, 15:06 عصر
الان یک نکته برام سوال شد آیا فیلد کلید در جدول اصلی عینا با همون نام باید در جدول دوم تکرار بشه؟
نه. اجباری به قرار دادن نام های یکسان نیست. برای راحتی و فهم بیشتر معمولا یکی میگیرن.

الان من خودم بین دو فیلد آی دی(مولف و کتاب) ارتباط برقرار کردم آیا این کار اشتباهه؟؟!
چطور این ارتباط رو برقرار کردی؟ یه کم توضیح بده.

اگه امکان داره فقط رشته دستورsql اون سه متد رو برای چنین جدولی مثال بزنین هم ممنون میشم
هیچ فرقی وجود نداره. تنها موردی که میتونه فرق داشته باشه select ای هست که بخوای نام مولف رو هم در بیاری :

select TblBook.*,TblMoalef.MoalefName from TblBook INNER JOIN TblMoalef ON TblBook.MoalefID = TblMoalef.MoalefID

esafb52
جمعه 25 مرداد 1392, 15:35 عصر
سلام اینجوری
109184
جوین رو بلد هستم چون از قبل بعضی مواقع نیاز بود دو تا جدول رو با هم ادغام کنم
ولی حذف اینسرت و آپدیت رو مثال بزنین
ممنون

mousa1992
جمعه 25 مرداد 1392, 16:48 عصر
سلام
درکتون از رابطه اشتباهه ( با توجه به مثالی که زدی میگم )

خب در موردشون توضیح میدم مختصر
فرض کنید ی جدول داریم برا کتاب ها ( Books) و ی جدول هم برا مولفین (Author )
خب فیلد های جداولمون رو مینویسم
Books ( BID , BName ,.... , B_AuthorID ) 1

Author ( AID ,FName,LName,... ) 2

خب ما فیلدی توی جدول کتاب ها داریم به نام B_AuthorID که کد مولف رو نگهداری میکنه و ما این کارو انجام میدیم تا جدول هامونو نرمال سازی کنیم ( نرمال سازی جداول چند قانون داره که میتونی مطالعه کنی در موردشون و از نظر این قوانین درست نیست که اطلاعات ناشر و مولف و ... رو توی همین ی جدول مربوط به کتاب نگهداری کنیم )

خب حالا ما دو فیلد B_AuthorID , AID رو باهم ارتباط میدیم و زمانی که نیاز داشته باشیم با استفاده از دستور های join میتونید اطلاعات مولف کتاب رو همراه با هر کتاب بکشیم بیرون

حذف و اضافه و ویرایش (Insert , Update,Delete ) بهشون میگن دستورات DML نه iud (صرفا جهت اطلاع :P )
خب نوشتن این دستورات هیچ فرقی با حالت عادی نداره و فقط و فقط باید چند نکته رو رعایت کنی
یکی اینکه زمنی که میخوای ی کتاب رو اضافه کنی و فیلد B_AuthorID رو مقدار دهی کنی باید این AID مربوطه توی جدول Author موجود باشه در غیر این صورت خطا دریافت میکنید ( مگر اینکه بخوای این فیلد از جدول کتاب هارو مقدار دهی نکنی)
برا مثال :
INSERT INTO Books (BID,BName,,B_AuthorID) VALUES (1, "C# Developers", Null or respective ID ) 1

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

برای حذف در صورتی که از جدول کتاب ها بخواین چیزی رو حذف کنید که هیچ مشکلی نیست چون هیچ جدولی وابسطه به جدول کتاب ها نداریم آما اگه بخوای از جدول Author حذف کنی و در صورتی که کتابی توی جدول Books موجود باشه که فیلد B_Author رو مقداری رو از جدول Author گرفته باشه اونوقت چند تصمیم میتونی بگیری که بستگی داره به اینکه موقع ایجاد رابطه چه گزینه ای رو انتخاب کرده باشید ( میتونید هنگام ایجاد رابطه تعیین کنید که موقع حذف ی فیلد از جدول Author ایا رکورد هایی که تو جدول Book هستن و وابسطه به این رکوردی که قراره حذف بشه باشن آیا رکورد های وابسطه رو حذف کنه و یا مقدار اون فیلدشون رو خالی کنه و یا ی مقدار پیشفرض بهشون بده )

خب نظر من اینه که وقتی ی ناشر رو میخوای حذف کنی ینی اینکه هیچ کتابی هم از اون اینجا نداری درسته ؟ پس میتونی هم فیلداشو توی جدول Book حذف کنی و هم توی Author که البته با انتخاب گزینه هایی که بالا بهتو گفتم این کار خودش هنگام حذف به صورت اتو هانجام میشه

و برا اپدیت هم توی جدول Book که هیچ مشکلی نیست آما برا Author اگه دست به فیلد AID نزنی که معمولا هم این فیلد بدون تغییر میمونه هیچ مشکلی نیست ؛ در غیر این صورت باز همهمون سه گزینه بالا رو هنگام ایجاد رابطه داری

امیدوارم مفید واقع بشه

موفق باشی

یاعلی

esafb52
جمعه 25 مرداد 1392, 17:52 عصر
از هردو بزرگوار ممنونم واقعا درک درستی بهم دادین
فقط یه سوال:
اینکه ما باید حین کار بااین جداول مثلا درج آیا باید بیایم نام مثلا مولف جدید وارد شده رو گرفته و یه سلکت بزنیم و ببینیم که آیا قبلا این فرد وجود داشته یا نه اگر هست id آن را گرفته و بعد کتاب را درج کنیم و اگر چنانچه نیست اول اون رو درج کنیم بعد id رو گرفته و کتاب را درج کنیم یا نه باید به روش دیگه ای انجام بشه چون فکر کنین مثلا 1000 مولف داشته باشی این سلکت ها کم هزینه نیس!!!
راه حلی که به ذهن من رسیده اینه که مولف رو جدا تو یه فرم اضافه کنم حین درج کتاب یه کومبو بذارم که اسم مولف ها رو داخلش لود کنم و باتوجه به انتخاب اون آیتم id رو بدست بیارم و بعد کتاب رو درج کنم

باز هم ممنون

veniz2008
جمعه 25 مرداد 1392, 19:55 عصر
راه حلی که به ذهن من رسیده اینه که مولف رو جدا تو یه فرم اضافه کنم حین درج کتاب یه کومبو بذارم که اسم مولف ها رو داخلش لود کنم و باتوجه به انتخاب اون آیتم id رو بدست بیارم و بعد کتاب رو درج کنم
باز هم ممنون
همین درسته.
اجباری وجود نداره که ثبت این دو مورد (مولفین و کتاب ها) پشت سر هم باشه.
بهتر همونه که این موارد رو تفکیک کنید و هر کدوم رو در یک فرم جداگانه درج کنید.