مشاهده نسخه کامل
: یک سئوال در مورد ارتباط بین دو جدول در دو زمان متفاوت (در هنگام وجود و در هنگام عدم وجود)
در یک نرم افزار کتابخانه زمانی که یک مشتری کتاب را با امانت می برد در دیتابیس DBRelation، IdCu کد مشتری و IdBo کد کتاب ثبت می شود و زمانی که لیست کتابهای امانت برده شده توسط او درخواست می شود، در این گزارش اسم مشتری و مشخصات کتابهای امانت برده شده توسط او نمایش داده می شود که این گزارش براساس ارتباط فیلد IdCu جدول DBCustomer با IdCu جدول DBRelation و IdBo جدول DBRelation با IdBo جدول DBBook برای نمایش اسم کتاب نمایش داده می شود.
DBCustomer:
IdCu, Fname, Lname, Tel, ...
DBBook:
IdBo, Name, Isbn, ...
DBRelation
IdCu, IdBo
حالا:
زمانی که کتابی که توسط این مشتری به امانت برده شده به هر دلیل از لیست خارج می شود (حذف مشخصات این کتاب از دیتابیس) چون گزارش براساس ارتباط بین این دو جدول پر می شود، دیگر در لیست چنین رکوردی نمایش داده نمی شود انگار که این مشتری اصلا چنین کتابی را به امانت نبرده است!
راه حل این مشکل چیست؟ (سرنوشت فیلدهایی که از یک جد.ول حذف می شود در حالی که با جدول دیگر ارتباط دارند چه می شود)
سلام
حقیقتش درست متوجه نشدم چه گفتید. اگر مشکلتان حل نشد بهتر توضیح دهید؟
ولی من اگر بودم همچین دیتابیسی میساختم.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
با سیستم فوق هم میتوان آمار کلی را حفظ کرد، و همه امار بردن و پس آوردن ها ثبت شود.
اگر هم ToDate مقدارش NULL میتوان نتیجه گرفت، کتاب برگردانده نشده.
میتوان اطلاعات آماری هم ارائه داد.مثلاً :
هر عضو چند بار کتاب گرفته، در کل چه مدت کتاب ها دستش بوده، میانگین زمان خواندن هر کتاب برای هر عضو یا برای کل اعضا و....
سلام
در همین مثال که شما ارائه کردید سئوالم را مطرح می کنم:
شما در دیتابیس Transfers Table دو Id ذخیره می کنید Id مشتری و Id کتاب و اطلاعات را توسط ارتباط همین فیلد ها با جدول های متناظر بازیابی می کنید
حالا بعد از n سال یک کتاب از لیست خارج می شود (مشخصات کتاب از دیتابیس حذف می شود) و بعد از n+1 سال کاربر لیست کتابهای به امانت برده شده توسط فلان مشتری را درخواست می کند که این کار اطلاعات کاربر از جدول Members Table بازیابی شده و از جدول Transfers Table ، Id کتاب به امانت برده شده بازمی گردد و زمانی که به سراغ جدول Books table می رود تا اطلاعات کتاب را بازیابی کند این Id اکنون دیگر وجود ندارد و در نتیجه این رکورد بازیابی نمی شود!
امیدوارم سئوالم را متوجه شده باشید. منتظر پاسخ شما هستم؟
سلام
اون قسمت n و n+1 سوالتان خیلی دات نت بود! خوشم امد!
اگر میخواهید پس از m سال از حذف کتاب از لیست، همچنان بتوانید نام و مشخصات کتاب را استخراج کنید، پس واضح است، شما به اطلاعات کتابها نیاز دارید.
اصلاً سطر مربوط به کتاب را حذف نکنید، هیچ ایرادی هم ندارد، بهرحال primaryKey شما هم که قابل استفاده مجدد نیست.
اگر هر سطر شما برای هر کتاب 100 بایت مصرف کتد، یک میلیون نسخه کتاب هم که حذف کنید (که امکان ندارد) میشود 100M اطلاعات اضافی در دیتابیس، که چون طبق گفته خودتان به انها شاید نیاز هم پیدا کنید، دیگر اضافه هم نیستند و وجودشان لازم است.
یک فیلد bool در آن تعبیه کنید، که مشخص کند، کتاب موجود است یا دیگر موجود نیست.
در زمان نمایش لیست کتابها و یا جستجوی عنوانی خاص، به راحتی میتوانید با مقدار این bool خروجی را ف-ی-ل-ت-ر کرده و فقط کتابهای موجود را نمایش دهید.
در زمان حذف هم فقط مقدار آن را تغییر دهید.
اگر در حجم عظیم کتاب با کاهش سرعت مواجه شدید، شاید اماکن دارد، بد نباشد روی فیلد bool هم یک index بگذارید!!!
خودم رو کشتم تا تونستم توضیح بدم
ممنون از راهنماییتون
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.